landrush 1.1.2 → 1.2.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/.rubocop_todo.yml +12 -178
- data/.travis.yml +6 -1
- data/CHANGELOG.md +18 -1
- data/CONTRIBUTING.adoc +112 -0
- data/Gemfile +6 -9
- data/Guardfile +10 -0
- data/README.adoc +100 -0
- data/Rakefile +14 -2
- data/appveyor.yml +20 -0
- data/doc/Development.adoc +112 -0
- data/doc/ProxyMobile.adoc +66 -0
- data/doc/Troubleshooting.adoc +42 -0
- data/doc/Usage.adoc +271 -0
- data/features/commands.feature +35 -0
- data/features/dns_resolution.feature +6 -5
- data/features/{landrush-ip.feature → landrush_ip.feature} +0 -0
- data/features/step_definitions/landrush_custom_steps.rb +48 -0
- data/features/support/env.rb +25 -1
- data/landrush.gemspec +3 -3
- data/lib/landrush/action/common.rb +3 -11
- data/lib/landrush/action/install_prerequisites.rb +2 -3
- data/lib/landrush/action/redirect_dns.rb +1 -1
- data/lib/landrush/action/setup.rb +25 -30
- data/lib/landrush/action/teardown.rb +8 -11
- data/lib/landrush/cap/guest/all/read_host_visible_ip_address.rb +28 -4
- data/lib/landrush/cap/guest/linux/add_iptables_rule.rb +1 -1
- data/lib/landrush/cap/guest/linux/redirect_dns.rb +2 -2
- data/lib/landrush/cap/guest/suse/add_iptables_rule.rb +20 -0
- data/lib/landrush/cap/guest/suse/install_iptables.rb +14 -0
- data/lib/landrush/cap/guest/suse/iptables_installed.rb +11 -0
- data/lib/landrush/cap/host/suse/dnsmasq_installed.rb +11 -0
- data/lib/landrush/cap/host/suse/install_dnsmasq.rb +14 -0
- data/lib/landrush/cap/host/suse/restart_dnsmasq.rb +21 -0
- data/lib/landrush/cap/host/windows/configure_visibility_on_host.rb +1 -1
- data/lib/landrush/command.rb +42 -17
- data/lib/landrush/config.rb +29 -14
- data/lib/landrush/plugin.rb +30 -0
- data/lib/landrush/server.rb +96 -138
- data/lib/landrush/start_server.rb +11 -0
- data/lib/landrush/store.rb +6 -2
- data/lib/landrush/util/path.rb +32 -0
- data/lib/landrush/util/process_helper.rb +46 -0
- data/lib/landrush/util/retry.rb +2 -2
- data/lib/landrush/version.rb +1 -1
- data/test/landrush/action/setup_test.rb +19 -25
- data/test/landrush/action/teardown_test.rb +18 -15
- data/test/landrush/cap/guest/all/read_host_visible_ip_address_test.rb +35 -1
- data/test/landrush/cap/guest/linux/configured_dns_servers_test.rb +8 -8
- data/test/landrush/cap/guest/linux/redirect_dns_test.rb +4 -4
- data/test/landrush/config_test.rb +23 -2
- data/test/landrush/dependent_vms_test.rb +5 -5
- data/test/landrush/issues/255.rb +115 -0
- data/test/landrush/server_test.rb +22 -4
- data/test/landrush/store_test.rb +28 -13
- data/test/support/test_server_daemon.rb +2 -4
- data/test/test_helper.rb +37 -14
- metadata +30 -15
- data/CONTRIBUTING.md +0 -103
- data/NOTES.md +0 -28
- data/README.md +0 -406
- data/doc/proxy-mobile/README.md +0 -50
- data/features/step_definitions/dns.rb +0 -19
- data/features/step_definitions/ip.rb +0 -13
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Landrush reload
|
2
|
+
Landrush DNS server should restart on a 'vagrant reload'
|
3
|
+
|
4
|
+
Scenario Outline: booting a box and restarting it
|
5
|
+
Given a file named "Vagrantfile" with:
|
6
|
+
"""
|
7
|
+
Vagrant.configure("2") do |config|
|
8
|
+
config.vm.box = '<box>'
|
9
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
10
|
+
config.landrush.enabled = true
|
11
|
+
end
|
12
|
+
"""
|
13
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
14
|
+
Then Landrush is running
|
15
|
+
|
16
|
+
When I successfully run `bundle exec vagrant landrush set foo 1.2.3.4`
|
17
|
+
And I successfully run `bundle exec vagrant landrush set bar 4.3.1.1`
|
18
|
+
And I successfully run `bundle exec vagrant landrush ls`
|
19
|
+
Then stdout from "bundle exec vagrant landrush ls" should match /^foo.*1.2.3.4$/
|
20
|
+
Then stdout from "bundle exec vagrant landrush ls" should match /^bar.*4.3.2.1$/
|
21
|
+
|
22
|
+
When I successfully run `bundle exec vagrant landrush rm --all`
|
23
|
+
And I successfully run `bundle exec vagrant landrush ls`
|
24
|
+
Then stdout from "bundle exec vagrant landrush ls" should match /^foo.*1.2.3.4$/
|
25
|
+
Then stdout from "bundle exec vagrant landrush ls" should match /^bar.*4.3.2.1$/
|
26
|
+
|
27
|
+
When I successfully run `bundle exec vagrant reload`
|
28
|
+
Then Landrush is running
|
29
|
+
|
30
|
+
When I successfully run `bundle exec vagrant landrush stop`
|
31
|
+
Then Landrush is not running
|
32
|
+
|
33
|
+
Examples:
|
34
|
+
| box | provider |
|
35
|
+
| debian/jessie64 | virtualbox |
|
@@ -16,9 +16,9 @@ Feature: dns_resolution
|
|
16
16
|
end
|
17
17
|
"""
|
18
18
|
When I successfully run `bundle exec vagrant up --provider <provider>`
|
19
|
-
Then the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the
|
20
|
-
And the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the host
|
19
|
+
Then the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the host
|
21
20
|
And the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the guest
|
21
|
+
And the hostname "my-host.landrush-acceptance-test" should resolve to "10.10.10.123" on the internal DNS server
|
22
22
|
|
23
23
|
When I successfully run `bundle exec vagrant landrush set my-static-host.landrush-acceptance-test 42.42.42.42`
|
24
24
|
Then the hostname "my-static-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the internal DNS server
|
@@ -30,6 +30,7 @@ Feature: dns_resolution
|
|
30
30
|
And the hostname "my-static-cname-host.landrush-acceptance-test" should resolve to "42.42.42.42" on the host
|
31
31
|
|
32
32
|
Examples:
|
33
|
-
| box
|
34
|
-
| debian/jessie64
|
35
|
-
#|
|
33
|
+
| box | provider |
|
34
|
+
| debian/jessie64 | virtualbox |
|
35
|
+
#| opensuse/openSUSE-42.1-x86_64 | virtualbox |
|
36
|
+
#| ubuntu/wily64 | virtualbox |
|
File without changes
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'landrush/server'
|
2
|
+
|
3
|
+
Then(/^the hostname "([^"]+)" should resolve to "([^"]+)" on the internal DNS server$/) do |host, ip|
|
4
|
+
port = Landrush::Server.port
|
5
|
+
resolver = Resolv::DNS.new(nameserver_port: [['localhost', port]], search: ['local'], ndots: 1)
|
6
|
+
ip_resolved = resolver.getaddress(host).to_s
|
7
|
+
expect(ip_resolved).to eq(ip)
|
8
|
+
end
|
9
|
+
|
10
|
+
Then(/^the hostname "([^"]+)" should resolve to "([^"]+)" on the host$/) do |host, ip|
|
11
|
+
addrinfo = Addrinfo.getaddrinfo(host, nil, Socket::AF_INET)
|
12
|
+
ip_resolved = addrinfo.first.ip_address
|
13
|
+
expect(ip_resolved).to eq(ip)
|
14
|
+
end
|
15
|
+
|
16
|
+
Then(/^the hostname "([^"]+)" should resolve to "([^"]+)" on the guest/) do |host, ip|
|
17
|
+
run("bundle exec vagrant ssh -c \"dig +short '#{host}' A\"")
|
18
|
+
expect(last_command_started).to have_output(/^#{ip}$/)
|
19
|
+
end
|
20
|
+
|
21
|
+
Then(/^the host visible IP address of the guest is the IP of interface "([^"]+)"/) do |interface|
|
22
|
+
cmd = "bundle exec vagrant ssh -c \"ip addr list #{interface} | grep 'inet ' | cut -d' ' -f6| cut -d/ -f1\""
|
23
|
+
run(cmd)
|
24
|
+
expect(last_command_started).to have_output(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)
|
25
|
+
|
26
|
+
ip = last_command_started.output.split("\n").last
|
27
|
+
|
28
|
+
run('bundle exec vagrant landrush list')
|
29
|
+
|
30
|
+
expect(last_command_started).to have_output(/#{ip}$/)
|
31
|
+
end
|
32
|
+
|
33
|
+
Then(/^Landrush is( not)? running$/) do |negated|
|
34
|
+
run('bundle exec vagrant landrush status')
|
35
|
+
if negated
|
36
|
+
expect(last_command_started).to have_output(/Daemon status: stopped/)
|
37
|
+
else
|
38
|
+
expect(last_command_started).to have_output(/Daemon status: running pid=[0-9]+/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Then(%r{^stdout from "([^"]*)" should( not)? match /(.*)/$}) do |cmd, negated, regexp|
|
43
|
+
if negated
|
44
|
+
aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd)).send(:stdout) !~ /#{regexp}/
|
45
|
+
else
|
46
|
+
aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd)).send(:stdout) =~ /#{regexp}/
|
47
|
+
end
|
48
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -1,15 +1,39 @@
|
|
1
1
|
require 'aruba/cucumber'
|
2
2
|
require 'komenda'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'find'
|
3
5
|
|
4
6
|
Aruba.configure do |config|
|
5
|
-
config.exit_timeout =
|
7
|
+
config.exit_timeout = 3600
|
6
8
|
config.activate_announcer_on_command_failure = [:stdout, :stderr]
|
7
9
|
config.working_directory = 'build/aruba'
|
8
10
|
end
|
9
11
|
|
12
|
+
Before do |_scenario|
|
13
|
+
# Making sure that all tests run in a pristine environment
|
14
|
+
# Create the Vagrant home directory for the tests
|
15
|
+
vagrant_home = File.join(File.dirname(__FILE__), '..', '..', 'build', 'vagrant.d')
|
16
|
+
# Make sure the Vagrant home directory is "clean".
|
17
|
+
# We keep the boxes directory to not have to re-download the boxes each time
|
18
|
+
ENV['VAGRANT_HOME'] = vagrant_home
|
19
|
+
Dir.new(ENV['VAGRANT_HOME']).entries.reject { |file| 'boxes'.eql?(file) || '.'.eql?(file) || '..'.eql?(file) }
|
20
|
+
.each { |file| FileUtils.rmtree(File.join(ENV['VAGRANT_HOME'], file)) }
|
21
|
+
|
22
|
+
# Actual gems are in ~/vagrant.d/gems/gems
|
23
|
+
gems_path = File.join(vagrant_home, 'gems', 'gems')
|
24
|
+
FileUtils.mkdir_p gems_path
|
25
|
+
|
26
|
+
# Find the path to the Bundler gems
|
27
|
+
bundler_gem_path = File.join(Bundler.rubygems.find_name('bundler').first.base_dir, 'gems')
|
28
|
+
|
29
|
+
# Copy the gems to the Vagrant gems dir
|
30
|
+
FileUtils.cp_r bundler_gem_path, gems_path, verbose: false
|
31
|
+
end
|
32
|
+
|
10
33
|
After do |_scenario|
|
11
34
|
Komenda.run('bundle exec vagrant landrush stop', fail_on_fail: true)
|
12
35
|
|
36
|
+
# If there is a Vagrantfile from previous run, delete it
|
13
37
|
if File.exist?(File.join(aruba.config.working_directory, 'Vagrantfile'))
|
14
38
|
Komenda.run('bundle exec vagrant destroy -f', cwd: aruba.config.working_directory, fail_on_fail: true)
|
15
39
|
end
|
data/landrush.gemspec
CHANGED
@@ -19,16 +19,16 @@ Gem::Specification.new do |spec|
|
|
19
19
|
and down, and you can configure static entries to be returned from the
|
20
20
|
server as well. See the README for more documentation.
|
21
21
|
DESCRIP
|
22
|
-
spec.summary =
|
22
|
+
spec.summary = 'a vagrant plugin providing consistent DNS visible on host and guests'
|
23
23
|
spec.homepage = 'https://github.com/vagrant-landrush/landrush'
|
24
24
|
spec.license = 'MIT'
|
25
25
|
|
26
|
-
spec.files = `git ls-files`.split(
|
26
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
27
27
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
28
28
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
29
29
|
spec.require_paths = ['lib']
|
30
30
|
|
31
31
|
spec.add_dependency 'rubydns', '0.8.5'
|
32
32
|
spec.add_dependency 'win32-process'
|
33
|
-
spec.add_dependency 'landrush-ip', '~> 0.2.
|
33
|
+
spec.add_dependency 'landrush-ip', '~> 0.2.5'
|
34
34
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Landrush
|
2
2
|
module Action
|
3
|
+
# A module containing shared functionality for Vagrant middleware classes
|
3
4
|
module Common
|
4
5
|
SUPPORTED_PROVIDERS = {
|
5
6
|
'VagrantPlugins::ProviderVirtualBox::Provider' => :virtualbox,
|
@@ -16,14 +17,7 @@ module Landrush
|
|
16
17
|
|
17
18
|
def initialize(app, env)
|
18
19
|
@app = app
|
19
|
-
end
|
20
|
-
|
21
|
-
def handle_action_stack(env)
|
22
20
|
@env = env
|
23
|
-
|
24
|
-
yield
|
25
|
-
|
26
|
-
app.call(env)
|
27
21
|
end
|
28
22
|
|
29
23
|
def virtualbox?
|
@@ -47,7 +41,7 @@ module Landrush
|
|
47
41
|
raise "The landrush plugin does not support the #{key} provider yet!"
|
48
42
|
end
|
49
43
|
|
50
|
-
if provider_name == :parallels && Gem::Version.new(VagrantPlugins::Parallels::VERSION) < Gem::Version.new(
|
44
|
+
if provider_name == :parallels && Gem::Version.new(VagrantPlugins::Parallels::VERSION) < Gem::Version.new('1.0.3')
|
51
45
|
raise "The landrush plugin supports the Parallels provider v1.0.3 and later. Please, update your 'vagrant-parallels' plugin."
|
52
46
|
end
|
53
47
|
|
@@ -73,9 +67,7 @@ module Landrush
|
|
73
67
|
end
|
74
68
|
|
75
69
|
def read_machine_hostname
|
76
|
-
if machine.config.vm.hostname
|
77
|
-
return machine.config.vm.hostname
|
78
|
-
end
|
70
|
+
return machine.config.vm.hostname if machine.config.vm.hostname
|
79
71
|
|
80
72
|
"#{Pathname.pwd.basename}.#{config.tld}"
|
81
73
|
end
|
@@ -7,11 +7,11 @@ module Landrush
|
|
7
7
|
# Make sure we use the right data directory for Landrush
|
8
8
|
# Seems Vagrant only makes home_path available in this case, compared to custom commands where there is also data_dir
|
9
9
|
Server.working_dir = File.join(env[:home_path], 'data', 'landrush')
|
10
|
+
Server.gems_dir = File.join(env[:gems_path].to_s, 'gems')
|
11
|
+
Server.ui = env[:ui]
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
13
|
+
pre_boot_setup if enabled?
|
14
|
+
app.call(env)
|
15
15
|
# This is after the middleware stack returns, which, since we're right
|
16
16
|
# before the Network action, should mean that all interfaces are good
|
17
17
|
# to go.
|
@@ -19,21 +19,25 @@ module Landrush
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def host_ip_address
|
22
|
-
|
22
|
+
if private_network_ips.include? machine.config.landrush.host_ip_address
|
23
|
+
machine.config.landrush.host_ip_address
|
24
|
+
else
|
25
|
+
machine.guest.capability(:read_host_visible_ip_address)
|
26
|
+
end
|
23
27
|
end
|
24
28
|
|
25
29
|
private
|
26
30
|
|
27
31
|
def pre_boot_setup
|
28
|
-
record_dependent_vm
|
29
32
|
add_prerequisite_network_interface
|
30
|
-
configure_server
|
31
|
-
start_server
|
32
33
|
end
|
33
34
|
|
34
35
|
def post_boot_setup
|
36
|
+
record_dependent_vm
|
37
|
+
configure_server
|
35
38
|
record_machine_dns_entry
|
36
39
|
setup_static_dns
|
40
|
+
start_server
|
37
41
|
return unless machine.config.landrush.host_redirect_dns?
|
38
42
|
env[:host].capability(:configure_visibility_on_host, host_ip_address, config.tld)
|
39
43
|
end
|
@@ -62,15 +66,13 @@ module Landrush
|
|
62
66
|
def setup_static_dns
|
63
67
|
config.hosts.each do |hostname, dns_value|
|
64
68
|
dns_value ||= host_ip_address
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
69
|
+
next if Store.hosts.has?(hostname, dns_value)
|
70
|
+
info "adding static DNS entry: #{hostname} => #{dns_value}"
|
71
|
+
Store.hosts.set hostname, dns_value
|
72
|
+
next unless ip_address?(dns_value)
|
73
|
+
reverse_dns = IPAddr.new(dns_value).reverse
|
74
|
+
info "adding static reverse DNS entry: #{reverse_dns} => #{dns_value}"
|
75
|
+
Store.hosts.set(reverse_dns, hostname)
|
74
76
|
end
|
75
77
|
end
|
76
78
|
|
@@ -97,19 +99,12 @@ module Landrush
|
|
97
99
|
machine.config.vm.networks.any? { |type, _| type == :private_network }
|
98
100
|
end
|
99
101
|
|
100
|
-
#
|
101
|
-
|
102
|
-
|
103
|
-
#
|
104
|
-
|
105
|
-
|
106
|
-
if machine.config.landrush.host_ip_address.nil?
|
107
|
-
private_networks[0] if private_networks.length == 1
|
108
|
-
elsif private_networks.include? machine.config.landrush.host_ip_address
|
109
|
-
machine.config.landrush.host_ip_address
|
110
|
-
end
|
111
|
-
# If there is more than one private network or there is no match between config.landrush.host_ip_address
|
112
|
-
# and the discovered addresses we will pass on to read_host_visible_ip_address capability
|
102
|
+
# @return [Array<String] IPv4 addresses of all private networks
|
103
|
+
def private_network_ips
|
104
|
+
# machine.config.vm.networks is an array of two elements. The first containing the type as symbol, the second is a
|
105
|
+
# hash containing other config data which varies between types
|
106
|
+
machine.config.vm.networks.select { |network| :private_network == network[0] && !network[1][:ip].nil? }
|
107
|
+
.map { |network| network[1][:ip] }
|
113
108
|
end
|
114
109
|
end
|
115
110
|
end
|
@@ -8,26 +8,23 @@ module Landrush
|
|
8
8
|
# Seems Vagrant only makes home_path available in this case, compared to custom commands where there is also data_dir
|
9
9
|
Server.working_dir = File.join(env[:home_path], 'data', 'landrush')
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
11
|
+
teardown if enabled?
|
12
|
+
app.call(env)
|
14
13
|
end
|
15
14
|
|
16
15
|
def teardown
|
17
16
|
teardown_machine_dns
|
18
17
|
DependentVMs.remove(machine_hostname)
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
19
|
+
return unless DependentVMs.none?
|
20
|
+
teardown_static_dns
|
21
|
+
teardown_server
|
24
22
|
end
|
25
23
|
|
26
24
|
def teardown_machine_dns
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
25
|
+
return unless Store.hosts.has? machine_hostname
|
26
|
+
info "removing machine entry: #{machine_hostname}"
|
27
|
+
Store.hosts.delete(machine_hostname)
|
31
28
|
end
|
32
29
|
|
33
30
|
def teardown_static_dns
|
@@ -14,11 +14,26 @@ module Landrush
|
|
14
14
|
addresses
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.filter_preferred_addresses(addresses)
|
18
|
+
if @machine.config.landrush.host_interface_class == :any
|
19
|
+
addresses = addresses.select do |addr|
|
20
|
+
(addr.key?('ipv4') && !addr['ipv4'].empty?) ||
|
21
|
+
(addr.key?('ipv6') && !addr['ipv6'].empty?)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
key = @machine.config.landrush.host_interface_class.to_s
|
25
|
+
|
26
|
+
addresses = addresses.select do |addr|
|
27
|
+
(addr.key?(key) && !addr[key].empty?)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
addresses
|
32
|
+
end
|
33
|
+
|
17
34
|
def self.read_host_visible_ip_address(machine)
|
18
35
|
@machine = machine
|
19
36
|
|
20
|
-
@machine.guest.capability(:landrush_ip_install) unless @machine.guest.capability(:landrush_ip_installed)
|
21
|
-
|
22
37
|
addr = nil
|
23
38
|
addresses = machine.guest.capability(:landrush_ip_get)
|
24
39
|
|
@@ -33,15 +48,24 @@ module Landrush
|
|
33
48
|
|
34
49
|
if addr.nil?
|
35
50
|
addresses = filter_addresses addresses
|
51
|
+
raise 'No addresses found' if addresses.empty?
|
36
52
|
|
53
|
+
addresses = filter_preferred_addresses addresses
|
37
54
|
raise 'No addresses found' if addresses.empty?
|
38
55
|
|
39
56
|
addr = addresses.last
|
40
57
|
end
|
41
58
|
|
42
|
-
|
59
|
+
# Keep preferring IPv4 over IPv6.
|
60
|
+
key = if machine.config.landrush.host_interface_class == :any
|
61
|
+
addr['ipv4'].empty? ? 'ipv6' : 'ipv4'
|
62
|
+
else
|
63
|
+
machine.config.landrush.host_interface_class.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
ip = IPAddr.new(addr[key])
|
43
67
|
|
44
|
-
machine.env.ui.info "[landrush] Using #{addr['name']} (#{addr[
|
68
|
+
machine.env.ui.info "[landrush] Using #{addr['name']} (#{addr[key]})"
|
45
69
|
|
46
70
|
ip.to_s
|
47
71
|
end
|
@@ -10,7 +10,7 @@ module Landrush
|
|
10
10
|
machine.communicate.sudo(command) do |data, type|
|
11
11
|
if [:stderr, :stdout].include?(type)
|
12
12
|
color = (type == :stdout) ? :green : :red
|
13
|
-
machine.env.ui.info(data.chomp, :
|
13
|
+
machine.env.ui.info(data.chomp, color: color, prefix: false)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -2,9 +2,9 @@ module Landrush
|
|
2
2
|
module Cap
|
3
3
|
module Linux
|
4
4
|
module RedirectDns
|
5
|
-
def self.redirect_dns(machine, target={})
|
5
|
+
def self.redirect_dns(machine, target = {})
|
6
6
|
dns_servers = machine.guest.capability(:configured_dns_servers)
|
7
|
-
%w
|
7
|
+
%w(tcp udp).each do |proto|
|
8
8
|
dns_servers.each do |dns_server|
|
9
9
|
machine.guest.capability(
|
10
10
|
:add_iptables_rule,
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Landrush
|
2
|
+
module Cap
|
3
|
+
module Suse
|
4
|
+
module AddIptablesRule
|
5
|
+
def self.add_iptables_rule(machine, rule)
|
6
|
+
_run(machine, %(/usr/sbin/iptables -C #{rule} 2> /dev/null || /usr/sbin/iptables -A #{rule}))
|
7
|
+
end
|
8
|
+
|
9
|
+
def self._run(machine, command)
|
10
|
+
machine.communicate.sudo(command) do |data, type|
|
11
|
+
if [:stderr, :stdout].include?(type)
|
12
|
+
color = (type == :stdout) ? :green : :red
|
13
|
+
machine.env.ui.info(data.chomp, color: color, prefix: false)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|