pleschev-vagrant-hostmaster 0.8.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.
- data/.gitignore +21 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +108 -0
- data/Rakefile +11 -0
- data/lib/vagrant/hostmaster.rb +15 -0
- data/lib/vagrant/hostmaster/command/base.rb +32 -0
- data/lib/vagrant/hostmaster/command/list.rb +8 -0
- data/lib/vagrant/hostmaster/command/remove.rb +8 -0
- data/lib/vagrant/hostmaster/command/root.rb +68 -0
- data/lib/vagrant/hostmaster/command/update.rb +8 -0
- data/lib/vagrant/hostmaster/config.rb +11 -0
- data/lib/vagrant/hostmaster/middleware/remove.rb +21 -0
- data/lib/vagrant/hostmaster/middleware/update.rb +21 -0
- data/lib/vagrant/hostmaster/version.rb +5 -0
- data/lib/vagrant/hostmaster/vm.rb +165 -0
- data/lib/vagrant_init.rb +1 -0
- data/test/vagrant/hostmaster/command_tests/list_test.rb +43 -0
- data/test/vagrant/hostmaster/command_tests/remove_test.rb +43 -0
- data/test/vagrant/hostmaster/command_tests/root_test.rb +49 -0
- data/test/vagrant/hostmaster/command_tests/update_test.rb +43 -0
- data/test/vagrant/hostmaster/config_test.rb +29 -0
- data/test/vagrant/hostmaster/middleware_tests/remove_test.rb +40 -0
- data/test/vagrant/hostmaster/middleware_tests/update_test.rb +38 -0
- data/test/vagrant/hostmaster/multiple_vm_test.rb +88 -0
- data/test/vagrant/hostmaster/simple_vm_test.rb +78 -0
- data/test/vagrant/hostmaster/test_helpers.rb +137 -0
- data/test/vagrant/hostmaster/ui/capture.rb +35 -0
- data/vagrant-hostmaster.gemspec +22 -0
- metadata +163 -0
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'generator'
|
2
|
+
require 'vagrant/hostmaster/ui/capture'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module Hostmaster
|
6
|
+
module TestHelpers
|
7
|
+
protected
|
8
|
+
def assert_local_host_address_of(address, vm, hosts_file, message=nil)
|
9
|
+
_wrap_assertion do
|
10
|
+
hosts_file.open
|
11
|
+
full_message = build_message(message,
|
12
|
+
"Expected host address of ? for ?.\n?",
|
13
|
+
address,
|
14
|
+
vm.uuid,
|
15
|
+
hosts_file.read
|
16
|
+
)
|
17
|
+
hosts_file.rewind
|
18
|
+
assert_block(full_message) do
|
19
|
+
hosts_file.grep(/# VAGRANT: #{vm.uuid} \(#{vm.name}\)$/).any? do |entry|
|
20
|
+
scanner = StringScanner.new(entry.chomp)
|
21
|
+
scanner.skip(/\s+/)
|
22
|
+
scanner.scan(/[0-9.]+/) == address
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def assert_local_host_entries_for(vms, hosts_file)
|
29
|
+
hostmaster_boxes.each do |name,box|
|
30
|
+
assert_local_host_entry_for box[:vm], hosts_file
|
31
|
+
assert_local_host_address_of box[:address], box[:vm], hosts_file
|
32
|
+
assert_local_host_name_of box[:host_name], box[:vm], hosts_file
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def assert_local_host_entry_for(vm, hosts_file, message=nil)
|
37
|
+
_wrap_assertion do
|
38
|
+
hosts_file.open
|
39
|
+
full_message = build_message(message,
|
40
|
+
"Expected host entry for ? to exist.\n?",
|
41
|
+
vm.uuid,
|
42
|
+
hosts_file.read
|
43
|
+
)
|
44
|
+
hosts_file.rewind
|
45
|
+
assert_block(full_message) do
|
46
|
+
hosts_file.grep(/# VAGRANT: #{vm.uuid} \(#{vm.name}\)$/).any?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def assert_local_host_name_of(name, vm, hosts_file, message=nil)
|
52
|
+
_wrap_assertion do
|
53
|
+
hosts_file.open
|
54
|
+
full_message = build_message(message,
|
55
|
+
"Expected host name of ? for ?.\n?",
|
56
|
+
name,
|
57
|
+
vm.uuid,
|
58
|
+
hosts_file.read
|
59
|
+
)
|
60
|
+
hosts_file.rewind
|
61
|
+
assert_block(full_message) do
|
62
|
+
hosts_file.grep(/# VAGRANT: #{vm.uuid} \(#{vm.name}\)$/).any? do |entry|
|
63
|
+
scanner = StringScanner.new(entry.chomp)
|
64
|
+
scanner.skip(/\s+/)
|
65
|
+
scanner.skip(/[0-9.]+/)
|
66
|
+
scanner.skip(/\s+/)
|
67
|
+
scanner.scan(/[^\s#]+/) == name
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def assert_no_local_host_entries_for(vms, hosts_file)
|
74
|
+
vms.each do |vm|
|
75
|
+
assert_no_local_host_entry_for(vm, hosts_file)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def assert_no_local_host_entry_for(vm, hosts_file, message=nil)
|
80
|
+
_wrap_assertion do
|
81
|
+
hosts_file.open
|
82
|
+
full_message = build_message(message,
|
83
|
+
"Expected host entry for ? to not exist.\n?",
|
84
|
+
vm.uuid,
|
85
|
+
hosts_file.read
|
86
|
+
)
|
87
|
+
hosts_file.rewind
|
88
|
+
assert_block(full_message) do
|
89
|
+
hosts_file.grep(/# VAGRANT: #{vm.uuid} \(#{vm.name}\)$/).empty?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def hostmaster_box(name, host_name, address, uuid)
|
95
|
+
hostmaster_boxes[name] = {:name => name, :host_name => host_name, :address => address, :uuid => uuid}
|
96
|
+
hostmaster_boxes
|
97
|
+
end
|
98
|
+
|
99
|
+
def hostmaster_boxes
|
100
|
+
@boxes ||= {}
|
101
|
+
end
|
102
|
+
|
103
|
+
def hostmaster_config
|
104
|
+
hostmaster_boxes.inject("") do |config,(name,box)|
|
105
|
+
config << <<-EOF
|
106
|
+
config.vm.define :#{name} do |box|
|
107
|
+
box.vm.host_name = "#{box[:host_name]}"
|
108
|
+
box.vm.network :hostonly, "#{box[:address]}"
|
109
|
+
end
|
110
|
+
EOF
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def hostmaster_env
|
115
|
+
Vagrant::Environment.new(:cwd => vagrantfile(hostmaster_config), :ui_class => Vagrant::Hostmaster::UI::Capture).load!
|
116
|
+
end
|
117
|
+
|
118
|
+
def hostmaster_vms(env)
|
119
|
+
env.vms.values.collect do |vm|
|
120
|
+
box = hostmaster_boxes[vm.name]
|
121
|
+
vm.stubs(:state).returns(:running)
|
122
|
+
vm.stubs(:uuid).returns(box[:uuid])
|
123
|
+
box[:vm] = Vagrant::Hostmaster::VM.new(vm)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def write_local_host_entries(hosts_file, entries={})
|
128
|
+
hostmaster_boxes.each do |name,box|
|
129
|
+
entry = box.merge(entries[name] || {})
|
130
|
+
hosts_file.puts "#{entry[:address]} #{entry[:host_name]} # VAGRANT: #{entry[:uuid]} (#{entry[:name]})"
|
131
|
+
end
|
132
|
+
hosts_file.fsync
|
133
|
+
hosts_file
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Hostmaster
|
3
|
+
module UI
|
4
|
+
class Capture < Vagrant::UI::Silent
|
5
|
+
class << self
|
6
|
+
def capture
|
7
|
+
return @capture unless block_given?
|
8
|
+
begin
|
9
|
+
current, @capture = @capture, ""
|
10
|
+
yield
|
11
|
+
result = @capture
|
12
|
+
ensure
|
13
|
+
@capture = current
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def capture?
|
18
|
+
@capture
|
19
|
+
end
|
20
|
+
end
|
21
|
+
[:info, :warn, :error, :success].each do |method|
|
22
|
+
class_eval <<-CODE
|
23
|
+
def #{method}(message, *args)
|
24
|
+
super(message)
|
25
|
+
if self.class.capture?
|
26
|
+
self.class.capture << message
|
27
|
+
self.class.capture << "\n" unless message[-1,1] == "\n"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
CODE
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/vagrant/hostmaster/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["S. Brent Faulkner"]
|
6
|
+
gem.email = ["brent.faulkner@mosaic.com"]
|
7
|
+
gem.description = %q{vagrant-hostmaster is a Vagrant plugin to manage /etc/hosts entries on both the host OS and guest VMs.}
|
8
|
+
gem.summary = %q{Vagrant plugin to manage /etc/hosts entries.}
|
9
|
+
gem.homepage = "https://github.com/mosaicxm/vagrant-hostmaster"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "pleschev-vagrant-hostmaster"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Vagrant::Hostmaster::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'vagrant', '~>1.0.3'
|
19
|
+
gem.add_development_dependency 'bundler'
|
20
|
+
gem.add_development_dependency 'mocha', '~>0.12.3'
|
21
|
+
gem.add_development_dependency 'rake'
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pleschev-vagrant-hostmaster
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 61
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
- 1
|
10
|
+
version: 0.8.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- S. Brent Faulkner
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2013-02-16 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: vagrant
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 17
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 0
|
32
|
+
- 3
|
33
|
+
version: 1.0.3
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: bundler
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: mocha
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 41
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
- 12
|
62
|
+
- 3
|
63
|
+
version: 0.12.3
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: rake
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
description: vagrant-hostmaster is a Vagrant plugin to manage /etc/hosts entries on both the host OS and guest VMs.
|
81
|
+
email:
|
82
|
+
- brent.faulkner@mosaic.com
|
83
|
+
executables: []
|
84
|
+
|
85
|
+
extensions: []
|
86
|
+
|
87
|
+
extra_rdoc_files: []
|
88
|
+
|
89
|
+
files:
|
90
|
+
- .gitignore
|
91
|
+
- Gemfile
|
92
|
+
- LICENSE
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- lib/vagrant/hostmaster.rb
|
96
|
+
- lib/vagrant/hostmaster/command/base.rb
|
97
|
+
- lib/vagrant/hostmaster/command/list.rb
|
98
|
+
- lib/vagrant/hostmaster/command/remove.rb
|
99
|
+
- lib/vagrant/hostmaster/command/root.rb
|
100
|
+
- lib/vagrant/hostmaster/command/update.rb
|
101
|
+
- lib/vagrant/hostmaster/config.rb
|
102
|
+
- lib/vagrant/hostmaster/middleware/remove.rb
|
103
|
+
- lib/vagrant/hostmaster/middleware/update.rb
|
104
|
+
- lib/vagrant/hostmaster/version.rb
|
105
|
+
- lib/vagrant/hostmaster/vm.rb
|
106
|
+
- lib/vagrant_init.rb
|
107
|
+
- test/vagrant/hostmaster/command_tests/list_test.rb
|
108
|
+
- test/vagrant/hostmaster/command_tests/remove_test.rb
|
109
|
+
- test/vagrant/hostmaster/command_tests/root_test.rb
|
110
|
+
- test/vagrant/hostmaster/command_tests/update_test.rb
|
111
|
+
- test/vagrant/hostmaster/config_test.rb
|
112
|
+
- test/vagrant/hostmaster/middleware_tests/remove_test.rb
|
113
|
+
- test/vagrant/hostmaster/middleware_tests/update_test.rb
|
114
|
+
- test/vagrant/hostmaster/multiple_vm_test.rb
|
115
|
+
- test/vagrant/hostmaster/simple_vm_test.rb
|
116
|
+
- test/vagrant/hostmaster/test_helpers.rb
|
117
|
+
- test/vagrant/hostmaster/ui/capture.rb
|
118
|
+
- vagrant-hostmaster.gemspec
|
119
|
+
homepage: https://github.com/mosaicxm/vagrant-hostmaster
|
120
|
+
licenses: []
|
121
|
+
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
hash: 3
|
133
|
+
segments:
|
134
|
+
- 0
|
135
|
+
version: "0"
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
hash: 3
|
142
|
+
segments:
|
143
|
+
- 0
|
144
|
+
version: "0"
|
145
|
+
requirements: []
|
146
|
+
|
147
|
+
rubyforge_project:
|
148
|
+
rubygems_version: 1.8.25
|
149
|
+
signing_key:
|
150
|
+
specification_version: 3
|
151
|
+
summary: Vagrant plugin to manage /etc/hosts entries.
|
152
|
+
test_files:
|
153
|
+
- test/vagrant/hostmaster/command_tests/list_test.rb
|
154
|
+
- test/vagrant/hostmaster/command_tests/remove_test.rb
|
155
|
+
- test/vagrant/hostmaster/command_tests/root_test.rb
|
156
|
+
- test/vagrant/hostmaster/command_tests/update_test.rb
|
157
|
+
- test/vagrant/hostmaster/config_test.rb
|
158
|
+
- test/vagrant/hostmaster/middleware_tests/remove_test.rb
|
159
|
+
- test/vagrant/hostmaster/middleware_tests/update_test.rb
|
160
|
+
- test/vagrant/hostmaster/multiple_vm_test.rb
|
161
|
+
- test/vagrant/hostmaster/simple_vm_test.rb
|
162
|
+
- test/vagrant/hostmaster/test_helpers.rb
|
163
|
+
- test/vagrant/hostmaster/ui/capture.rb
|