landrush 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|