landrush 1.2.0 → 1.3.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 +5 -5
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +100 -12
- data/.travis.yml +1 -2
- data/CHANGELOG.md +11 -0
- data/Gemfile +11 -11
- data/README.adoc +8 -1
- data/Rakefile +3 -3
- data/appveyor.yml +3 -1
- data/doc/Development.adoc +24 -19
- data/doc/Usage.adoc +17 -6
- data/features/dns_resolution.feature +3 -0
- data/features/docker_provider.feature +32 -0
- data/features/support/env.rb +2 -2
- data/landrush.gemspec +3 -3
- data/lib/landrush.rb +1 -0
- data/lib/landrush/action/common.rb +7 -2
- data/lib/landrush/action/redirect_dns.rb +3 -0
- data/lib/landrush/action/setup.rb +16 -12
- data/lib/landrush/action/teardown.rb +2 -0
- data/lib/landrush/cap/guest/all/read_host_visible_ip_address.rb +2 -2
- data/lib/landrush/cap/guest/linux/add_iptables_rule.rb +2 -2
- data/lib/landrush/cap/guest/linux/configured_dns_servers.rb +1 -0
- data/lib/landrush/cap/guest/linux/redirect_dns.rb +1 -1
- data/lib/landrush/cap/guest/suse/add_iptables_rule.rb +2 -2
- data/lib/landrush/cap/host/arch/dnsmasq_installed.rb +11 -0
- data/lib/landrush/cap/host/arch/install_dnsmasq.rb +16 -0
- data/lib/landrush/cap/host/arch/restart_dnsmasq.rb +21 -0
- data/lib/landrush/cap/host/darwin/configure_visibility_on_host.rb +21 -18
- data/lib/landrush/cap/host/debian/host.rb +1 -0
- data/lib/landrush/cap/host/linux/configure_visibility_on_host.rb +5 -3
- data/lib/landrush/cap/host/linux/create_dnsmasq_config.rb +3 -0
- data/lib/landrush/cap/host/redhat/restart_dnsmasq.rb +8 -2
- data/lib/landrush/cap/host/ubuntu/host.rb +1 -0
- data/lib/landrush/cap/host/windows/configure_visibility_on_host.rb +14 -6
- data/lib/landrush/command.rb +18 -3
- data/lib/landrush/config.rb +6 -2
- data/lib/landrush/dns_server.rb +82 -0
- data/lib/landrush/plugin.rb +18 -0
- data/lib/landrush/server.rb +147 -205
- data/lib/landrush/start_server.rb +1 -1
- data/lib/landrush/store.rb +53 -24
- data/lib/landrush/util/dnsmasq.rb +10 -0
- data/lib/landrush/util/process_helper.rb +16 -16
- data/lib/landrush/util/retry.rb +1 -0
- data/lib/landrush/version.rb +1 -1
- data/test/landrush/action/setup_test.rb +8 -7
- data/test/landrush/action/teardown_test.rb +5 -5
- data/test/landrush/cap/guest/linux/redirect_dns_test.rb +1 -1
- data/test/landrush/cap/host/darwin/configure_visibility_on_host_test.rb +10 -6
- data/test/landrush/cap/host/linux/configure_visibility_on_host_test.rb +1 -1
- data/test/landrush/cap/host/windows/configure_visibility_on_host_test.rb +35 -4
- data/test/landrush/issues/255.rb +55 -55
- data/test/landrush/parallel_store_use_test.rb +50 -0
- data/test/landrush/server_test.rb +6 -17
- data/test/landrush/store_test.rb +8 -8
- data/test/landrush/util/dnsmasq_test.rb +42 -0
- data/test/support/create_fake_working_dir.rb +3 -2
- data/test/support/delete_fake_working_dir.rb +1 -1
- data/test/support/test_server_daemon.rb +1 -1
- data/test/test_helper.rb +6 -8
- metadata +42 -17
data/lib/landrush/store.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'json'
|
3
|
+
require 'filelock'
|
3
4
|
|
4
5
|
module Landrush
|
6
|
+
class ConfigLockError < StandardError
|
7
|
+
end
|
8
|
+
|
5
9
|
class Store
|
6
10
|
def self.hosts
|
7
11
|
@hosts ||= new(Server.working_dir.join('hosts.json'))
|
@@ -23,52 +27,76 @@ module Landrush
|
|
23
27
|
end
|
24
28
|
|
25
29
|
def set(key, value)
|
26
|
-
|
30
|
+
with_file_lock do |file|
|
31
|
+
config = current_config(file).merge(key => value)
|
32
|
+
write(config, file)
|
33
|
+
end
|
27
34
|
end
|
28
35
|
|
29
36
|
def each(*args, &block)
|
30
|
-
|
37
|
+
with_file_lock do |file|
|
38
|
+
current_config(file).each(*args, &block)
|
39
|
+
end
|
31
40
|
end
|
32
41
|
|
33
42
|
def delete(key)
|
34
|
-
|
43
|
+
with_file_lock do |file|
|
44
|
+
write(current_config(file).reject { |k, v| k == key || v == key }, file)
|
45
|
+
end
|
35
46
|
end
|
36
47
|
|
37
48
|
def has?(key, value = nil)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
49
|
+
with_file_lock do |file|
|
50
|
+
if value.nil?
|
51
|
+
current_config(file).key? key
|
52
|
+
else
|
53
|
+
current_config(file)[key] == value
|
54
|
+
end
|
42
55
|
end
|
43
56
|
end
|
44
57
|
|
45
58
|
def find(search)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
search
|
54
|
-
|
59
|
+
with_file_lock do |file|
|
60
|
+
search = IPAddr.new(search).reverse if begin
|
61
|
+
IPAddr.new(search)
|
62
|
+
rescue StandardError
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
current_config(file).keys.detect do |key|
|
66
|
+
key.casecmp(search) == 0 ||
|
67
|
+
search =~ /#{key}$/i ||
|
68
|
+
key =~ /^#{search}\./i
|
69
|
+
end
|
55
70
|
end
|
56
71
|
end
|
57
72
|
|
58
73
|
def get(key)
|
59
|
-
|
74
|
+
with_file_lock do |file|
|
75
|
+
current_config(file)[key]
|
76
|
+
end
|
60
77
|
end
|
61
78
|
|
62
79
|
def clear!
|
63
|
-
|
80
|
+
with_file_lock do |file|
|
81
|
+
write({}, file)
|
82
|
+
end
|
64
83
|
end
|
65
84
|
|
66
85
|
protected
|
67
86
|
|
68
|
-
def
|
87
|
+
def with_file_lock
|
88
|
+
Filelock @backing_file.to_s, wait: 3 do |file|
|
89
|
+
yield file
|
90
|
+
end
|
91
|
+
rescue Filelock::WaitTimeout
|
92
|
+
raise ConfigLockError, 'Unable to lock Landrush config'
|
93
|
+
end
|
94
|
+
|
95
|
+
def current_config(file)
|
69
96
|
if backing_file.exist?
|
70
97
|
begin
|
71
|
-
|
98
|
+
file.rewind
|
99
|
+
JSON.parse(file.read)
|
72
100
|
rescue JSON::ParserError
|
73
101
|
{}
|
74
102
|
end
|
@@ -77,10 +105,11 @@ module Landrush
|
|
77
105
|
end
|
78
106
|
end
|
79
107
|
|
80
|
-
def write(config)
|
81
|
-
|
82
|
-
|
83
|
-
|
108
|
+
def write(config, file)
|
109
|
+
file.rewind
|
110
|
+
file.truncate(0)
|
111
|
+
file.write(JSON.pretty_generate(config))
|
112
|
+
file.flush
|
84
113
|
end
|
85
114
|
end
|
86
115
|
end
|
@@ -2,24 +2,22 @@ module Landrush
|
|
2
2
|
module Util
|
3
3
|
# A module containing helper classes for dealing with pid files
|
4
4
|
module ProcessHelper
|
5
|
-
def write_pid(pid,
|
6
|
-
|
7
|
-
|
5
|
+
def write_pid(pid, file)
|
6
|
+
file.rewind
|
7
|
+
file.truncate(0)
|
8
|
+
file.write pid
|
9
|
+
file.flush
|
8
10
|
end
|
9
11
|
|
10
|
-
def read_pid(
|
11
|
-
|
12
|
-
|
12
|
+
def read_pid(file)
|
13
|
+
file.rewind
|
14
|
+
file.read.to_i
|
15
|
+
rescue StandardError
|
13
16
|
nil
|
14
17
|
end
|
15
18
|
|
16
|
-
def
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
def process_status(pid_file)
|
21
|
-
return running? ? :running : :unknown if File.exist? pid_file
|
22
|
-
:stopped
|
19
|
+
def process_status(file)
|
20
|
+
running?(file) ? :running : :stopped
|
23
21
|
end
|
24
22
|
|
25
23
|
def ensure_path_exits(file_name)
|
@@ -27,12 +25,14 @@ module Landrush
|
|
27
25
|
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
28
26
|
end
|
29
27
|
|
30
|
-
def terminate_process(
|
28
|
+
def terminate_process(file)
|
29
|
+
pid = read_pid(file)
|
30
|
+
|
31
31
|
# Kill/Term loop - if the daemon didn't die easily, shoot
|
32
32
|
# it a few more times.
|
33
33
|
attempts = 5
|
34
|
-
while running? && attempts > 0
|
35
|
-
sig =
|
34
|
+
while running?(file) && attempts > 0
|
35
|
+
sig = attempts >= 2 ? 'KILL' : 'TERM'
|
36
36
|
|
37
37
|
puts "Sending #{sig} to process #{pid}..."
|
38
38
|
Process.kill(sig, pid)
|
data/lib/landrush/util/retry.rb
CHANGED
data/lib/landrush/version.rb
CHANGED
@@ -13,7 +13,7 @@ module Landrush
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'calls the next app in the chain' do
|
16
|
-
app = ->
|
16
|
+
app = ->(e) { e[:called] = true }
|
17
17
|
setup = Landrush::Action::Setup.new(app, env)
|
18
18
|
|
19
19
|
setup.call(env)
|
@@ -26,7 +26,7 @@ module Landrush
|
|
26
26
|
|
27
27
|
setup.call(env)
|
28
28
|
|
29
|
-
DependentVMs.list.must_equal %w
|
29
|
+
DependentVMs.list.must_equal %w[somehost.vagrant.test]
|
30
30
|
end
|
31
31
|
|
32
32
|
it "starts the landrush server if it's not already started" do
|
@@ -34,7 +34,7 @@ module Landrush
|
|
34
34
|
|
35
35
|
setup.call(env)
|
36
36
|
|
37
|
-
Server.
|
37
|
+
Server.status.must_equal :running
|
38
38
|
end
|
39
39
|
|
40
40
|
it "does not attempt to start the server if it's already up" do
|
@@ -43,12 +43,13 @@ module Landrush
|
|
43
43
|
Server.working_dir = File.join(env[:home_path], 'data', 'landrush')
|
44
44
|
Server.gems_dir = env[:gems_path].to_s + '/gems'
|
45
45
|
Server.start
|
46
|
-
original_pid = Server.pid
|
46
|
+
original_pid = Server.read_pid(File.open(File.join(Server.working_dir, 'run', 'landrush.pid')))
|
47
47
|
|
48
48
|
setup.call(env)
|
49
49
|
|
50
|
-
Server.
|
51
|
-
Server.
|
50
|
+
Server.status.must_equal :running
|
51
|
+
new_pid = Server.read_pid(File.open(File.join(Server.working_dir, 'run', 'landrush.pid')))
|
52
|
+
new_pid.must_equal original_pid
|
52
53
|
end
|
53
54
|
|
54
55
|
it 'does nothing if it is not enabled via config' do
|
@@ -93,7 +94,7 @@ module Landrush
|
|
93
94
|
setup = Landrush::Action::Setup.new(app, env)
|
94
95
|
setup.call(env)
|
95
96
|
|
96
|
-
Store.hosts.get('somehost.vagrant.test')
|
97
|
+
assert_nil Store.hosts.get('somehost.vagrant.test')
|
97
98
|
end
|
98
99
|
end
|
99
100
|
end
|
@@ -7,7 +7,7 @@ module Landrush
|
|
7
7
|
describe Teardown do
|
8
8
|
it 'calls the next app in the chain' do
|
9
9
|
env = fake_environment
|
10
|
-
app = ->
|
10
|
+
app = ->(e) { e[:called] = true }
|
11
11
|
teardown = Teardown.new(app, env)
|
12
12
|
|
13
13
|
teardown.call(env)
|
@@ -23,7 +23,7 @@ module Landrush
|
|
23
23
|
Store.hosts.set('somehost.vagrant.test', '1.2.3.4')
|
24
24
|
teardown.call(env)
|
25
25
|
|
26
|
-
Store.hosts.get('somehost.vagrant.test')
|
26
|
+
assert_nil Store.hosts.get('somehost.vagrant.test')
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'removes the machine as a dependent VM' do
|
@@ -45,7 +45,7 @@ module Landrush
|
|
45
45
|
Server.start
|
46
46
|
teardown.call(env)
|
47
47
|
|
48
|
-
Server.
|
48
|
+
Server.status.must_equal :stopped
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'leaves the landrush server when other dependent vms exist' do
|
@@ -60,7 +60,7 @@ module Landrush
|
|
60
60
|
Server.start
|
61
61
|
teardown.call(env)
|
62
62
|
|
63
|
-
Server.
|
63
|
+
Server.status.must_equal :running
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'leaves static entries when other dependent vms exist' do
|
@@ -84,7 +84,7 @@ module Landrush
|
|
84
84
|
|
85
85
|
teardown.call(env)
|
86
86
|
|
87
|
-
Server.
|
87
|
+
Server.status.must_equal :stopped
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'does nothing when landrush is disabled' do
|
@@ -5,7 +5,7 @@ describe Landrush::Cap::Linux::RedirectDns do
|
|
5
5
|
|
6
6
|
describe 'redirect_dns' do
|
7
7
|
it 'fetches the dns servers from the machine, and adds one iptables rule per server' do
|
8
|
-
machine.guest.stubs(:capability).with(:configured_dns_servers).returns(%w
|
8
|
+
machine.guest.stubs(:capability).with(:configured_dns_servers).returns(%w[1.2.3.4 4.5.6.7])
|
9
9
|
|
10
10
|
machine.guest.expects(:capability).with(:add_iptables_rule, 'OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 53 -j DNAT --to-destination 2.3.4.5:4321').once
|
11
11
|
machine.guest.expects(:capability).with(:add_iptables_rule, 'OUTPUT -t nat -p udp -d 1.2.3.4 --dport 53 -j DNAT --to-destination 2.3.4.5:4321').once
|
@@ -23,7 +23,7 @@ module Landrush
|
|
23
23
|
# also disable 'sudo'
|
24
24
|
ConfigureVisibilityOnHost.stubs(:sudo).returns('')
|
25
25
|
|
26
|
-
ConfigureVisibilityOnHost.configure_visibility_on_host(env, '42.42.42.42', 'vagrant.test')
|
26
|
+
ConfigureVisibilityOnHost.configure_visibility_on_host(env, '42.42.42.42', ['vagrant.test'])
|
27
27
|
|
28
28
|
Dir["#{dir}/*"].empty?.must_equal false
|
29
29
|
File.exist?(File.join(dir, 'vagrant.test')).must_equal true
|
@@ -31,7 +31,7 @@ module Landrush
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
it '
|
34
|
+
it 'multiple tlds can be specified' do
|
35
35
|
Dir.mktmpdir('landrush-test-dir-') do |dir|
|
36
36
|
# puts "Using #{dir} for testing"
|
37
37
|
Dir["#{dir}/*"].empty?.must_equal true
|
@@ -41,11 +41,15 @@ module Landrush
|
|
41
41
|
# also disable 'sudo'
|
42
42
|
ConfigureVisibilityOnHost.stubs(:sudo).returns('')
|
43
43
|
|
44
|
-
|
44
|
+
tlds = %w[foo.bar acme.com example.com]
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
ConfigureVisibilityOnHost.configure_visibility_on_host(env, '42.42.42.42', tlds)
|
47
|
+
|
48
|
+
tlds.each do |tld|
|
49
|
+
Dir["#{dir}/*"].empty?.must_equal false
|
50
|
+
File.exist?(File.join(dir, tld)).must_equal true
|
51
|
+
Pathname(File.join(dir, tld)).read.must_equal CONFIG
|
52
|
+
end
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
@@ -22,7 +22,7 @@ module Landrush
|
|
22
22
|
skip('Only supported on Linux') unless Vagrant::Util::Platform.linux?
|
23
23
|
File.exist?(TEST_CONFIG).must_equal false
|
24
24
|
|
25
|
-
Landrush::Cap::Linux::ConfigureVisibilityOnHost.configure_visibility_on_host(Vagrant::Environment.new, TEST_IP, TEST_TLD)
|
25
|
+
Landrush::Cap::Linux::ConfigureVisibilityOnHost.configure_visibility_on_host(Vagrant::Environment.new, TEST_IP, [TEST_TLD])
|
26
26
|
|
27
27
|
File.exist?(TEST_CONFIG).must_equal true
|
28
28
|
Pathname(TEST_CONFIG).read.must_equal CONFIG
|
@@ -6,6 +6,25 @@ module Landrush
|
|
6
6
|
describe ConfigureVisibilityOnHost do
|
7
7
|
TEST_IP = '10.42.42.42'.freeze
|
8
8
|
|
9
|
+
DOT_3_SVC_RUNNING = 'SERVICE_NAME: dot3svc
|
10
|
+
TYPE : 30 WIN32
|
11
|
+
STATE : 4 RUNNING
|
12
|
+
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
|
13
|
+
WIN32_EXIT_CODE : 0 (0x0)
|
14
|
+
SERVICE_EXIT_CODE : 0 (0x0)
|
15
|
+
CHECKPOINT : 0x0
|
16
|
+
WAIT_HINT : 0x0
|
17
|
+
'.freeze
|
18
|
+
|
19
|
+
DOT_3_SVC_STOPPED = 'SERVICE_NAME: dot3svc
|
20
|
+
TYPE : 30 WIN32
|
21
|
+
STATE : 1 STOPPED
|
22
|
+
WIN32_EXIT_CODE : 0 (0x0)
|
23
|
+
SERVICE_EXIT_CODE : 0 (0x0)
|
24
|
+
CHECKPOINT : 0x0
|
25
|
+
WAIT_HINT : 0x0
|
26
|
+
'.freeze
|
27
|
+
|
9
28
|
before do
|
10
29
|
@vboxmanage_found = !Vagrant::Util::Which.which('VBoxManage').nil?
|
11
30
|
@has_admin_privileges = Landrush::Cap::Windows::ConfigureVisibilityOnHost.admin_mode?
|
@@ -24,21 +43,33 @@ module Landrush
|
|
24
43
|
network_name = get_network_name(old_network_state, new_network_state)
|
25
44
|
|
26
45
|
get_dns_for_name(network_name).must_be_nil
|
27
|
-
Landrush::Cap::Windows::ConfigureVisibilityOnHost.configure_visibility_on_host(fake_environment, TEST_IP, 'landrush.test')
|
46
|
+
Landrush::Cap::Windows::ConfigureVisibilityOnHost.configure_visibility_on_host(fake_environment, TEST_IP, ['landrush.test'])
|
28
47
|
get_dns_for_name(network_name).must_equal '127.0.0.1'
|
29
|
-
rescue
|
48
|
+
rescue StandardError
|
30
49
|
delete_test_interface network_description
|
31
50
|
end
|
32
51
|
end
|
33
52
|
end
|
34
53
|
|
54
|
+
describe '#wired_autoconfig_service_running?' do
|
55
|
+
it 'service running' do
|
56
|
+
Landrush::Cap::Windows::ConfigureVisibilityOnHost.expects(:wired_autoconfig_service_state).returns(DOT_3_SVC_RUNNING)
|
57
|
+
assert ConfigureVisibilityOnHost.send(:wired_autoconfig_service_running?)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'service stopped' do
|
61
|
+
Landrush::Cap::Windows::ConfigureVisibilityOnHost.expects(:wired_autoconfig_service_state).returns(DOT_3_SVC_STOPPED)
|
62
|
+
refute ConfigureVisibilityOnHost.send(:wired_autoconfig_service_running?)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
35
66
|
def network_state
|
36
67
|
`netsh interface ip show config`.split(/\n/).reject(&:empty?)
|
37
68
|
end
|
38
69
|
|
39
70
|
def get_network_name(old_network_state, new_network_state)
|
40
71
|
new_network_state.reject! { |line| old_network_state.include? line }
|
41
|
-
new_network_state[0].match(
|
72
|
+
new_network_state[0].match(/.*"(.*)"$/).captures[0]
|
42
73
|
end
|
43
74
|
|
44
75
|
# Creates a test interface using VBoxMange and sets a known test IP
|
@@ -60,7 +91,7 @@ module Landrush
|
|
60
91
|
# TODO: better error handling
|
61
92
|
begin
|
62
93
|
dns[0].match(/.* (\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}).*/).captures[0]
|
63
|
-
rescue
|
94
|
+
rescue StandardError
|
64
95
|
return nil
|
65
96
|
end
|
66
97
|
end
|
data/test/landrush/issues/255.rb
CHANGED
@@ -6,65 +6,65 @@ module Landrush
|
|
6
6
|
describe ReadHostVisibleIpAddress do
|
7
7
|
let(:landrush_ip_output) do
|
8
8
|
<<YAML
|
9
|
-
- name: br-44ba74744d5d
|
10
|
-
|
11
|
-
|
12
|
-
- name: br-7884014b4104
|
13
|
-
|
14
|
-
|
15
|
-
- name: br-efce9da0c1fd
|
16
|
-
|
17
|
-
|
18
|
-
- name: docker0
|
19
|
-
|
20
|
-
|
21
|
-
- name: docker_gwbridge
|
22
|
-
|
23
|
-
|
24
|
-
- name: enp4s0
|
25
|
-
|
26
|
-
|
27
|
-
- name: wlp3s0
|
28
|
-
|
29
|
-
|
30
|
-
- name: lo
|
31
|
-
|
32
|
-
|
33
|
-
- name: veth050aa01
|
34
|
-
|
35
|
-
|
36
|
-
- name: veth1c191f7
|
37
|
-
|
38
|
-
|
39
|
-
- name: veth38aa771
|
40
|
-
|
41
|
-
|
42
|
-
- name: veth5f49498
|
43
|
-
|
44
|
-
|
45
|
-
- name: veth7803c65
|
46
|
-
|
47
|
-
|
48
|
-
- name: veth8a09803
|
49
|
-
|
50
|
-
|
51
|
-
- name: veth8bf1652
|
52
|
-
|
53
|
-
|
54
|
-
- name: veth95ef8de
|
55
|
-
|
56
|
-
|
57
|
-
- name: vethc75f284
|
58
|
-
|
59
|
-
|
60
|
-
-
|
61
|
-
|
62
|
-
|
9
|
+
- name: br-44ba74744d5d
|
10
|
+
ipv4: 172.17.0.1
|
11
|
+
ipv6: fe80::42:e1ff:fe01:ae98
|
12
|
+
- name: br-7884014b4104
|
13
|
+
ipv4: 172.19.0.1
|
14
|
+
ipv6: fe80::42:c0ff:fe4b:900c
|
15
|
+
- name: br-efce9da0c1fd
|
16
|
+
ipv4: 172.18.0.1
|
17
|
+
ipv6: fe80::42:2ff:fe46:f1d1
|
18
|
+
- name: docker0
|
19
|
+
ipv4: 172.16.0.1
|
20
|
+
ipv6: fe80::42:dbff:fe1b:6e92
|
21
|
+
- name: docker_gwbridge
|
22
|
+
ipv4: 172.20.0.1
|
23
|
+
ipv6: fe80::42:72ff:fe96:c6df
|
24
|
+
- name: enp4s0
|
25
|
+
ipv4: 192.168.88.97
|
26
|
+
ipv6: fe80::323d:9fa0:ef2a:ddf5
|
27
|
+
- name: wlp3s0
|
28
|
+
ipv4: 192.168.88.118
|
29
|
+
ipv6: fe80::6b80:15d4:e83c:a59d
|
30
|
+
- name: lo
|
31
|
+
ipv4: 127.0.0.1
|
32
|
+
ipv6: ::1/128
|
33
|
+
- name: veth050aa01
|
34
|
+
ipv4: ""
|
35
|
+
ipv6: fe80::c83a:8eff:fe7a:3244
|
36
|
+
- name: veth1c191f7
|
37
|
+
ipv4: ""
|
38
|
+
ipv6: fe80::b498:f3ff:fea1:3243
|
39
|
+
- name: veth38aa771
|
40
|
+
ipv4: ""
|
41
|
+
ipv6: fe80::8c97:e2ff:fe1a:b14f
|
42
|
+
- name: veth5f49498
|
43
|
+
ipv4: ""
|
44
|
+
ipv6: fe80::6825:20ff:fef5:a00d
|
45
|
+
- name: veth7803c65
|
46
|
+
ipv4: ""
|
47
|
+
ipv6: fe80::34d7:6cff:fe28:54ce
|
48
|
+
- name: veth8a09803
|
49
|
+
ipv4: ""
|
50
|
+
ipv6: fe80::b436:30ff:fed1:598e
|
51
|
+
- name: veth8bf1652
|
52
|
+
ipv4: ""
|
53
|
+
ipv6: fe80::60a8:67ff:fe85:cce4
|
54
|
+
- name: veth95ef8de
|
55
|
+
ipv4: ""
|
56
|
+
ipv6: fe80::9c45:e8ff:fe69:e62f
|
57
|
+
- name: vethc75f284
|
58
|
+
ipv4: ""
|
59
|
+
ipv6: fe80::78b2:7fff:fe55:59
|
60
|
+
- name: vethe533ef0
|
61
|
+
ipv4: ""
|
62
|
+
ipv6: fe80::b83e:93ff:fe52:aac7
|
63
63
|
YAML
|
64
64
|
end
|
65
65
|
|
66
66
|
let(:machine) { fake_machine }
|
67
|
-
let(:addresses) { YAML.
|
67
|
+
let(:addresses) { YAML.safe_load(landrush_ip_output) }
|
68
68
|
|
69
69
|
def call_cap(machine)
|
70
70
|
Landrush::Cap::All::ReadHostVisibleIpAddress.read_host_visible_ip_address(machine)
|