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.
@@ -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