landrush 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/examples/Vagrantfile +0 -2
- data/lib/landrush/action/common.rb +61 -0
- data/lib/landrush/action/install_prerequisites.rb +6 -13
- data/lib/landrush/action/redirect_dns.rb +11 -24
- data/lib/landrush/action/setup.rb +44 -23
- data/lib/landrush/action/teardown.rb +11 -17
- data/lib/landrush/cap/linux/read_host_visible_ip_address.rb +36 -0
- data/lib/landrush/config.rb +2 -5
- data/lib/landrush/dependent_vms.rb +6 -6
- data/lib/landrush/plugin.rb +12 -7
- data/lib/landrush/store.rb +3 -1
- data/lib/landrush/version.rb +1 -1
- data/lib/landrush.rb +0 -1
- data/test/landrush/action/setup_test.rb +25 -11
- data/test/landrush/action/teardown_test.rb +4 -5
- data/test/landrush/dependent_vms_test.rb +6 -10
- data/test/landrush/store_test.rb +9 -0
- data/test/test_helper.rb +50 -6
- metadata +6 -5
- data/lib/landrush/util.rb +0 -25
data/README.md
CHANGED
@@ -24,7 +24,7 @@ Enable the plugin in your `Vagrantfile`:
|
|
24
24
|
|
25
25
|
config.landrush.enable
|
26
26
|
|
27
|
-
Bring up a machine that has a
|
27
|
+
Bring up a machine that has a hostname set (see the `Vagrantfile` for an example)
|
28
28
|
|
29
29
|
$ vagrant up
|
30
30
|
|
data/examples/Vagrantfile
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Landrush
|
2
|
+
module Action
|
3
|
+
module Common
|
4
|
+
SUPPORTED_PROVIDERS = {
|
5
|
+
'VagrantPlugins::ProviderVirtualBox::Provider' => :virtualbox,
|
6
|
+
'HashiCorp::VagrantVMwarefusion::Provider' => :vmware_fusion,
|
7
|
+
'Landrush::FakeProvider' => :fake_provider,
|
8
|
+
}
|
9
|
+
|
10
|
+
def self.included(base)
|
11
|
+
base.send :attr_reader, :app, :env
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(app, env)
|
15
|
+
@app = app
|
16
|
+
end
|
17
|
+
|
18
|
+
def handle_action_stack(env)
|
19
|
+
@env = env
|
20
|
+
|
21
|
+
yield
|
22
|
+
|
23
|
+
app.call(env)
|
24
|
+
end
|
25
|
+
|
26
|
+
def virtualbox?
|
27
|
+
provider == :virtualbox
|
28
|
+
end
|
29
|
+
|
30
|
+
def vmware?
|
31
|
+
provider == :vmware_fusion
|
32
|
+
end
|
33
|
+
|
34
|
+
def provider
|
35
|
+
SUPPORTED_PROVIDERS.fetch(machine.provider.class.name) { |key|
|
36
|
+
raise "The landrush plugin does not support the #{key} provider yet!"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def global_config
|
41
|
+
env[:global_config]
|
42
|
+
end
|
43
|
+
|
44
|
+
def machine
|
45
|
+
env[:machine]
|
46
|
+
end
|
47
|
+
|
48
|
+
def machine_hostname
|
49
|
+
machine.config.vm.hostname
|
50
|
+
end
|
51
|
+
|
52
|
+
def enabled?
|
53
|
+
global_config.landrush.enabled?
|
54
|
+
end
|
55
|
+
|
56
|
+
def info(msg)
|
57
|
+
env[:ui].info "[landrush] #{msg}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -1,25 +1,18 @@
|
|
1
1
|
module Landrush
|
2
2
|
module Action
|
3
3
|
class InstallPrerequisites
|
4
|
-
|
5
|
-
@app = app
|
6
|
-
end
|
4
|
+
include Common
|
7
5
|
|
8
6
|
def call(env)
|
9
|
-
|
10
|
-
|
11
|
-
@machine.ui.info('setting up prerequisites')
|
12
|
-
|
13
|
-
install_prerequisites
|
7
|
+
handle_action_stack(env) do
|
8
|
+
install_prerequisites if enabled?
|
14
9
|
end
|
15
|
-
|
16
|
-
@app.call(env)
|
17
10
|
end
|
18
11
|
|
19
12
|
def install_prerequisites
|
20
|
-
unless
|
21
|
-
|
22
|
-
|
13
|
+
unless machine.guest.capability(:iptables_installed)
|
14
|
+
info 'iptables not installed, installing it'
|
15
|
+
machine.guest.capability(:install_iptables)
|
23
16
|
end
|
24
17
|
end
|
25
18
|
end
|
@@ -1,32 +1,25 @@
|
|
1
1
|
module Landrush
|
2
2
|
module Action
|
3
3
|
class RedirectDns
|
4
|
-
|
5
|
-
'VagrantPlugins::ProviderVirtualBox::Provider' => :virtualbox,
|
6
|
-
'HashiCorp::VagrantVMwarefusion::Provider' => :vmware_fusion,
|
7
|
-
}
|
8
|
-
|
9
|
-
def initialize(app, env)
|
10
|
-
@app = app
|
11
|
-
end
|
4
|
+
include Common
|
12
5
|
|
13
6
|
def call(env)
|
14
|
-
|
15
|
-
|
7
|
+
handle_action_stack(env) do
|
8
|
+
redirect_dns if enabled?
|
9
|
+
end
|
10
|
+
end
|
16
11
|
|
17
|
-
|
18
|
-
|
12
|
+
def redirect_dns
|
13
|
+
info "setting up machine's DNS to point to our server"
|
14
|
+
machine.guest.capability(:redirect_dns, host: _target_host, port: 10053)
|
19
15
|
|
20
|
-
|
21
|
-
|
22
|
-
end
|
16
|
+
machine.config.vm.networks.each do |type, options|
|
17
|
+
info "network: #{type.inspect}, #{options.inspect}"
|
23
18
|
end
|
24
|
-
|
25
|
-
@app.call(env)
|
26
19
|
end
|
27
20
|
|
28
21
|
def _target_host
|
29
|
-
case
|
22
|
+
case provider
|
30
23
|
when :virtualbox then
|
31
24
|
'10.0.2.2'
|
32
25
|
when :vmware_fusion then
|
@@ -34,12 +27,6 @@ module Landrush
|
|
34
27
|
end
|
35
28
|
end
|
36
29
|
|
37
|
-
def _provider
|
38
|
-
SUPPORTED_PROVIDERS.fetch(@machine.provider.class.name) { |key|
|
39
|
-
raise "I don't support the #{key} provider yet!"
|
40
|
-
}
|
41
|
-
end
|
42
|
-
|
43
30
|
# Poor man's gateway; strip the last octet and jam a 1 on there.
|
44
31
|
def _gateway_for_ip(ip)
|
45
32
|
ip.split('.').tap(&:pop).push(1).join('.')
|
@@ -1,41 +1,62 @@
|
|
1
1
|
module Landrush
|
2
2
|
module Action
|
3
3
|
class Setup
|
4
|
-
|
5
|
-
@app = app
|
6
|
-
end
|
4
|
+
include Common
|
7
5
|
|
8
6
|
def call(env)
|
9
|
-
|
10
|
-
|
11
|
-
start_server_if_necessary(env)
|
12
|
-
setup_machine_dns(env)
|
13
|
-
setup_static_dns(env)
|
7
|
+
handle_action_stack(env) do
|
8
|
+
pre_boot_setup if enabled?
|
14
9
|
end
|
15
|
-
|
10
|
+
|
11
|
+
# This is after the middleware stack returns, which, since we're right
|
12
|
+
# before the Network action, should mean that all interfaces are good
|
13
|
+
# to go.
|
14
|
+
record_machine_dns_entry if enabled?
|
16
15
|
end
|
17
16
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
def pre_boot_setup
|
18
|
+
record_dependent_vm
|
19
|
+
add_prerequisite_network_interface
|
20
|
+
start_server
|
21
|
+
setup_static_dns
|
22
|
+
end
|
23
|
+
|
24
|
+
def record_dependent_vm
|
25
|
+
DependentVMs.add(machine_hostname)
|
25
26
|
end
|
26
27
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
def add_prerequisite_network_interface
|
29
|
+
return unless virtualbox? && !private_network_exists?
|
30
|
+
|
31
|
+
info 'virtualbox requires an additional private network; adding it'
|
32
|
+
machine.config.vm.network :private_network, type: :dhcp
|
31
33
|
end
|
32
34
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
35
|
+
def start_server
|
36
|
+
return if Server.running?
|
37
|
+
|
38
|
+
info 'starting dns server'
|
39
|
+
Server.start
|
40
|
+
end
|
41
|
+
|
42
|
+
def setup_static_dns
|
43
|
+
global_config.landrush.hosts.each do |hostname, ip_address|
|
44
|
+
info "adding static entry: #{hostname} => #{ip_address}"
|
36
45
|
Store.hosts.set hostname, ip_address
|
37
46
|
end
|
38
47
|
end
|
48
|
+
|
49
|
+
def record_machine_dns_entry
|
50
|
+
ip_address = machine.guest.capability(:read_host_visible_ip_address)
|
51
|
+
|
52
|
+
info "adding machine entry: #{machine_hostname} => #{ip_address}"
|
53
|
+
|
54
|
+
Store.hosts.set(machine_hostname, ip_address)
|
55
|
+
end
|
56
|
+
|
57
|
+
def private_network_exists?
|
58
|
+
machine.config.vm.networks.any? { |type, _| type == :private_network }
|
59
|
+
end
|
39
60
|
end
|
40
61
|
end
|
41
62
|
end
|
@@ -1,48 +1,42 @@
|
|
1
1
|
module Landrush
|
2
2
|
module Action
|
3
3
|
class Teardown
|
4
|
-
|
5
|
-
@app = app
|
6
|
-
end
|
4
|
+
include Common
|
7
5
|
|
8
6
|
def call(env)
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
handle_action_stack(env) do
|
8
|
+
teardown if enabled?
|
9
|
+
end
|
12
10
|
end
|
13
11
|
|
14
12
|
def teardown
|
15
13
|
teardown_machine_dns
|
16
|
-
DependentVMs.remove(
|
14
|
+
DependentVMs.remove(machine_hostname)
|
17
15
|
|
18
16
|
if DependentVMs.none?
|
19
17
|
teardown_static_dns
|
20
18
|
teardown_server
|
21
19
|
else
|
22
20
|
info "there are #{DependentVMs.count} VMs left, leaving DNS server and static entries"
|
21
|
+
info DependentVMs.list.map { |dvm| " - #{dvm}" }.join("\n")
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
25
|
def teardown_machine_dns
|
27
|
-
|
28
|
-
|
29
|
-
Store.hosts.delete(hostname)
|
26
|
+
info "removing machine entry: #{machine_hostname}"
|
27
|
+
Store.hosts.delete(machine_hostname)
|
30
28
|
end
|
31
29
|
|
32
30
|
def teardown_static_dns
|
33
|
-
|
34
|
-
info "removing static entry: #{
|
35
|
-
Store.hosts.delete
|
31
|
+
global_config.landrush.hosts.each do |static_hostname, _|
|
32
|
+
info "removing static entry: #{static_hostname}"
|
33
|
+
Store.hosts.delete static_hostname
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
39
37
|
def teardown_server
|
40
38
|
Server.stop
|
41
39
|
end
|
42
|
-
|
43
|
-
def info(msg)
|
44
|
-
@env[:ui].info "[landrush] #{msg}"
|
45
|
-
end
|
46
40
|
end
|
47
41
|
end
|
48
42
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Landrush
|
2
|
+
module Cap
|
3
|
+
module Linux
|
4
|
+
module ReadHostVisibleIpAddress
|
5
|
+
#
|
6
|
+
# !!!!!!!!!!!!
|
7
|
+
# !! NOTE !!
|
8
|
+
# !!!!!!!!!!!!
|
9
|
+
#
|
10
|
+
# This is a fragile heuristic: we are simply assuming the IP address of
|
11
|
+
# the last interface non-localhost IP address is the host-visible one.
|
12
|
+
#
|
13
|
+
# For VMWare, the interface that Vagrant uses is host accessible, so we
|
14
|
+
# expect this to be the same as `read_ip_address`.
|
15
|
+
#
|
16
|
+
# For VirtualBox, the Vagrant interface is not host visible, so we add
|
17
|
+
# our own private_network, which we expect this to return for us.
|
18
|
+
#
|
19
|
+
# If the Vagrantfile sets up any sort of fancy networking, this has the
|
20
|
+
# potential to fail, which will break things.
|
21
|
+
#
|
22
|
+
# TODO: Find a better heuristic for this implementation.
|
23
|
+
#
|
24
|
+
def self.read_host_visible_ip_address(machine)
|
25
|
+
command = "ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }'"
|
26
|
+
result = ""
|
27
|
+
machine.communicate.execute(command) do |type, data|
|
28
|
+
result << data if type == :stdout
|
29
|
+
end
|
30
|
+
|
31
|
+
result.chomp.split("\n").last
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/landrush/config.rb
CHANGED
@@ -30,13 +30,10 @@ module Landrush
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def validate(machine)
|
33
|
-
if
|
34
|
-
unless
|
33
|
+
if enabled?
|
34
|
+
unless machine.config.vm.hostname.to_s.length > 0
|
35
35
|
return { 'landrush' => ['you must specify a hostname so we can make a DNS entry for it'] }
|
36
36
|
end
|
37
|
-
unless Util.ip_address(machine)
|
38
|
-
return { 'landrush' => ['you must specify a private network or else DNS makes no sense'] }
|
39
|
-
end
|
40
37
|
end
|
41
38
|
{}
|
42
39
|
end
|
@@ -13,12 +13,12 @@ module Landrush
|
|
13
13
|
(dir.directory? ? dir.children : []).each(&block)
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.add(
|
17
|
-
FileUtils.touch(file_for(
|
16
|
+
def self.add(hostname)
|
17
|
+
FileUtils.touch(file_for(hostname))
|
18
18
|
end
|
19
19
|
|
20
|
-
def self.remove(
|
21
|
-
file_for(
|
20
|
+
def self.remove(hostname)
|
21
|
+
file_for(hostname).tap { |f| f.delete if f.exist? }
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.list
|
@@ -29,8 +29,8 @@ module Landrush
|
|
29
29
|
dir.rmtree
|
30
30
|
end
|
31
31
|
|
32
|
-
def self.file_for(
|
33
|
-
dir.join(
|
32
|
+
def self.file_for(hostname)
|
33
|
+
dir.join(hostname)
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.dir
|
data/lib/landrush/plugin.rb
CHANGED
@@ -13,19 +13,17 @@ module Landrush
|
|
13
13
|
end
|
14
14
|
|
15
15
|
action_hook 'landrush_setup', :machine_action_up do |hook|
|
16
|
+
require_relative 'action/common'
|
16
17
|
require_relative 'action/setup'
|
17
18
|
require_relative 'action/install_prerequisites'
|
18
19
|
require_relative 'action/redirect_dns'
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
hook.after(boot_action, post_boot_actions)
|
23
|
-
}
|
24
|
-
|
25
|
-
register_boot_hooks.call(VagrantPlugins::ProviderVirtualBox::Action::Boot)
|
21
|
+
hook.before(VagrantPlugins::ProviderVirtualBox::Action::Network, pre_boot_actions)
|
22
|
+
hook.after(Vagrant::Action::Builtin::WaitForCommunicator, post_boot_actions)
|
26
23
|
|
27
24
|
if defined?(HashiCorp::VagrantVMwarefusion)
|
28
|
-
|
25
|
+
hook.before(HashiCorp::VagrantVMwarefusion::Action::Network, pre_boot_actions)
|
26
|
+
hook.after(HashiCorp::VagrantVMwarefusion::Action::Boot, post_boot_actions)
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
@@ -43,11 +41,13 @@ module Landrush
|
|
43
41
|
end
|
44
42
|
|
45
43
|
action_hook 'landrush_teardown', :machine_action_halt do |hook|
|
44
|
+
require_relative 'action/common'
|
46
45
|
require_relative 'action/teardown'
|
47
46
|
hook.after(Vagrant::Action::Builtin::GracefulHalt, Action::Teardown)
|
48
47
|
end
|
49
48
|
|
50
49
|
action_hook 'landrush_teardown', :machine_action_destroy do |hook|
|
50
|
+
require_relative 'action/common'
|
51
51
|
require_relative 'action/teardown'
|
52
52
|
hook.after(Vagrant::Action::Builtin::GracefulHalt, Action::Teardown)
|
53
53
|
end
|
@@ -76,5 +76,10 @@ module Landrush
|
|
76
76
|
require_relative 'cap/linux/add_iptables_rule'
|
77
77
|
Cap::Linux::AddIptablesRule
|
78
78
|
end
|
79
|
+
|
80
|
+
guest_capability('linux', 'read_host_visible_ip_address') do
|
81
|
+
require_relative 'cap/linux/read_host_visible_ip_address'
|
82
|
+
Cap::Linux::ReadHostVisibleIpAddress
|
83
|
+
end
|
79
84
|
end
|
80
85
|
end
|
data/lib/landrush/store.rb
CHANGED
data/lib/landrush/version.rb
CHANGED
data/lib/landrush.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'landrush/action/common'
|
2
3
|
require 'landrush/action/setup'
|
3
4
|
|
4
5
|
module Landrush
|
@@ -14,16 +15,6 @@ module Landrush
|
|
14
15
|
env[:called].must_equal true
|
15
16
|
end
|
16
17
|
|
17
|
-
it "stores the machine's hostname => ip address" do
|
18
|
-
app = Proc.new {}
|
19
|
-
setup = Setup.new(app, nil)
|
20
|
-
env = fake_environment_with_machine('somehost.vagrant.dev', '1.2.3.4')
|
21
|
-
|
22
|
-
setup.call(env)
|
23
|
-
|
24
|
-
Store.hosts.get('somehost.vagrant.dev').must_equal '1.2.3.4'
|
25
|
-
end
|
26
|
-
|
27
18
|
it "records the booting host as a dependent VM" do
|
28
19
|
app = Proc.new {}
|
29
20
|
setup = Setup.new(app, nil)
|
@@ -66,7 +57,30 @@ module Landrush
|
|
66
57
|
env[:global_config].landrush.disable
|
67
58
|
setup.call(env)
|
68
59
|
|
69
|
-
|
60
|
+
DependentVMs.list.must_equal []
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'after boot' do
|
64
|
+
it "stores the machine's hostname => ip address" do
|
65
|
+
app = Proc.new {}
|
66
|
+
setup = Setup.new(app, nil)
|
67
|
+
env = fake_environment_with_machine('somehost.vagrant.dev', '1.2.3.4')
|
68
|
+
|
69
|
+
setup.call(env)
|
70
|
+
|
71
|
+
Store.hosts.get('somehost.vagrant.dev').must_equal '1.2.3.4'
|
72
|
+
end
|
73
|
+
|
74
|
+
it "does nothing if it is not enabled via config" do
|
75
|
+
app = Proc.new {}
|
76
|
+
setup = Setup.new(app, nil)
|
77
|
+
env = fake_environment_with_machine('somehost.vagrant.dev', '1.2.3.4')
|
78
|
+
|
79
|
+
env[:global_config].landrush.disable
|
80
|
+
setup.call(env)
|
81
|
+
|
82
|
+
Store.hosts.get('somehost.vagrant.dev').must_equal nil
|
83
|
+
end
|
70
84
|
end
|
71
85
|
end
|
72
86
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'landrush/action/common'
|
2
3
|
require 'landrush/action/teardown'
|
3
4
|
|
4
5
|
module Landrush
|
@@ -30,7 +31,7 @@ module Landrush
|
|
30
31
|
teardown = Teardown.new(app, nil)
|
31
32
|
env = fake_environment_with_machine('somehost.vagrant.dev', '1.2.3.4')
|
32
33
|
|
33
|
-
DependentVMs.add(
|
34
|
+
DependentVMs.add('somehost.vagrant.dev')
|
34
35
|
teardown.call(env)
|
35
36
|
|
36
37
|
DependentVMs.list.must_equal []
|
@@ -51,8 +52,7 @@ module Landrush
|
|
51
52
|
app = Proc.new {}
|
52
53
|
teardown = Teardown.new(app, nil)
|
53
54
|
env = fake_environment_with_machine('somehost.vagrant.dev', '1.2.3.4')
|
54
|
-
|
55
|
-
DependentVMs.add(other_machine)
|
55
|
+
DependentVMs.add('otherhost.vagrant.dev')
|
56
56
|
|
57
57
|
Server.start
|
58
58
|
teardown.call(env)
|
@@ -64,8 +64,7 @@ module Landrush
|
|
64
64
|
app = Proc.new {}
|
65
65
|
teardown = Teardown.new(app, nil)
|
66
66
|
env = fake_environment_with_machine('somehost.vagrant.dev', '1.2.3.4')
|
67
|
-
|
68
|
-
DependentVMs.add(other_machine)
|
67
|
+
DependentVMs.add('otherhost.vagrant.dev')
|
69
68
|
|
70
69
|
fake_static_entry(env, 'static.vagrant.dev', '3.4.5.6')
|
71
70
|
|
@@ -8,24 +8,20 @@ module Landrush
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "reports true once a machine has been added" do
|
11
|
-
|
12
|
-
DependentVMs.add(env[:machine])
|
11
|
+
DependentVMs.add('recordme.example.dev')
|
13
12
|
DependentVMs.any?.must_equal true
|
14
13
|
end
|
15
14
|
|
16
15
|
it "reports false if a machine has been added then removed" do
|
17
|
-
|
18
|
-
DependentVMs.
|
19
|
-
DependentVMs.remove(env[:machine])
|
16
|
+
DependentVMs.add('recordme.example.dev')
|
17
|
+
DependentVMs.remove('recordme.example.dev')
|
20
18
|
DependentVMs.any?.must_equal false
|
21
19
|
end
|
22
20
|
|
23
21
|
it "reports true if not all machines have been removed" do
|
24
|
-
|
25
|
-
|
26
|
-
DependentVMs.
|
27
|
-
DependentVMs.add(second_env[:machine])
|
28
|
-
DependentVMs.remove(first_env[:machine])
|
22
|
+
DependentVMs.add('recordme.example.dev')
|
23
|
+
DependentVMs.add('alsome.example.dev')
|
24
|
+
DependentVMs.remove('recordme.example.dev')
|
29
25
|
DependentVMs.any?.must_equal true
|
30
26
|
end
|
31
27
|
end
|
data/test/landrush/store_test.rb
CHANGED
@@ -66,6 +66,15 @@ module Landrush
|
|
66
66
|
@store.set('somehost.vagrant.dev', 'here')
|
67
67
|
@store.find('somehost.vagrant.dev').must_equal 'somehost.vagrant.dev'
|
68
68
|
end
|
69
|
+
|
70
|
+
it "returns for prefix searches as well" do
|
71
|
+
@store.set('somehost.vagrant.dev', 'here')
|
72
|
+
|
73
|
+
@store.find('somehost').must_equal 'somehost.vagrant.dev'
|
74
|
+
@store.find('somehost.vagrant').must_equal 'somehost.vagrant.dev'
|
75
|
+
@store.find('somehost.vagr').must_equal nil
|
76
|
+
@store.find('someh').must_equal nil
|
77
|
+
end
|
69
78
|
end
|
70
79
|
end
|
71
80
|
end
|
data/test/test_helper.rb
CHANGED
@@ -18,16 +18,54 @@ def fake_environment_with_machine(hostname, ip)
|
|
18
18
|
{ machine: machine, ui: FakeUI, global_config: env.config_global }
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
class RecordingCommunicator
|
22
|
+
attr_reader :commands, :responses
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@commands = Hash.new([])
|
26
|
+
@responses = Hash.new('')
|
27
|
+
end
|
28
|
+
|
29
|
+
def stub_command(command, response)
|
30
|
+
responses[command] = response
|
31
|
+
end
|
32
|
+
|
33
|
+
def sudo(command)
|
34
|
+
puts "SUDO: #{command}"
|
35
|
+
commands[:sudo] << command
|
36
|
+
responses[command]
|
37
|
+
end
|
38
|
+
|
39
|
+
def execute(command, &block)
|
40
|
+
commands[:execute] << command
|
41
|
+
responses[command].split("\n").each do |line|
|
42
|
+
block.call(:stdout, "#{line}\n")
|
24
43
|
end
|
25
|
-
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test(command)
|
47
|
+
commands[:test] << command
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
def ready?
|
52
|
+
true
|
53
|
+
end
|
54
|
+
end
|
26
55
|
|
56
|
+
class Landrush::FakeProvider
|
57
|
+
def initialize(machine)
|
58
|
+
end
|
59
|
+
|
60
|
+
def ssh_info
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def fake_machine(hostname, ip, env = Vagrant::Environment.new)
|
27
65
|
machine = Vagrant::Machine.new(
|
28
66
|
'fake_machine',
|
29
67
|
'fake_provider',
|
30
|
-
|
68
|
+
Landrush::FakeProvider,
|
31
69
|
'provider_config',
|
32
70
|
{}, # provider_options
|
33
71
|
env.config_global,
|
@@ -36,9 +74,15 @@ def fake_machine(hostname, ip, env = Vagrant::Environment.new)
|
|
36
74
|
env
|
37
75
|
)
|
38
76
|
|
77
|
+
machine.instance_variable_set("@communicator", RecordingCommunicator.new)
|
78
|
+
machine.communicate.stub_command(
|
79
|
+
"ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }'",
|
80
|
+
"#{ip}\n"
|
81
|
+
)
|
82
|
+
|
39
83
|
machine.config.landrush.enable
|
40
84
|
machine.config.vm.hostname = hostname
|
41
|
-
|
85
|
+
|
42
86
|
|
43
87
|
machine
|
44
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: landrush
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubydns
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- landrush.gemspec
|
92
92
|
- lib/ext/rexec.rb
|
93
93
|
- lib/landrush.rb
|
94
|
+
- lib/landrush/action/common.rb
|
94
95
|
- lib/landrush/action/install_prerequisites.rb
|
95
96
|
- lib/landrush/action/redirect_dns.rb
|
96
97
|
- lib/landrush/action/setup.rb
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- lib/landrush/cap/debian/iptables_installed.rb
|
100
101
|
- lib/landrush/cap/linux/add_iptables_rule.rb
|
101
102
|
- lib/landrush/cap/linux/configured_dns_server.rb
|
103
|
+
- lib/landrush/cap/linux/read_host_visible_ip_address.rb
|
102
104
|
- lib/landrush/cap/linux/redirect_dns.rb
|
103
105
|
- lib/landrush/command.rb
|
104
106
|
- lib/landrush/config.rb
|
@@ -107,7 +109,6 @@ files:
|
|
107
109
|
- lib/landrush/resolver_config.rb
|
108
110
|
- lib/landrush/server.rb
|
109
111
|
- lib/landrush/store.rb
|
110
|
-
- lib/landrush/util.rb
|
111
112
|
- lib/landrush/version.rb
|
112
113
|
- test/landrush/action/setup_test.rb
|
113
114
|
- test/landrush/action/teardown_test.rb
|
@@ -136,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
137
|
version: '0'
|
137
138
|
segments:
|
138
139
|
- 0
|
139
|
-
hash:
|
140
|
+
hash: 901975285541024268
|
140
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
142
|
none: false
|
142
143
|
requirements:
|
@@ -145,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
146
|
version: '0'
|
146
147
|
segments:
|
147
148
|
- 0
|
148
|
-
hash:
|
149
|
+
hash: 901975285541024268
|
149
150
|
requirements: []
|
150
151
|
rubyforge_project:
|
151
152
|
rubygems_version: 1.8.23
|
data/lib/landrush/util.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Landrush
|
2
|
-
module Util
|
3
|
-
def self.host_and_ip(machine)
|
4
|
-
[hostname(machine), ip_address(machine)]
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.hostname(machine)
|
8
|
-
return nil unless machine
|
9
|
-
|
10
|
-
machine.config.vm.hostname
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.ip_address(machine)
|
14
|
-
return nil unless machine
|
15
|
-
|
16
|
-
machine.config.vm.networks.each do |type, options|
|
17
|
-
if type == :private_network && options[:ip].is_a?(String)
|
18
|
-
return options[:ip]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
nil
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|