vagrant-hostmanager 0.4.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -1
- data/README.md +13 -18
- data/lib/vagrant-hostmanager/action.rb +31 -0
- data/lib/vagrant-hostmanager/action/update_all.rb +47 -0
- data/lib/vagrant-hostmanager/action/update_guest.rb +28 -0
- data/lib/vagrant-hostmanager/action/update_host.rb +28 -0
- data/lib/vagrant-hostmanager/command.rb +11 -5
- data/lib/vagrant-hostmanager/config.rb +19 -20
- data/lib/vagrant-hostmanager/hosts_file.rb +67 -63
- data/lib/vagrant-hostmanager/plugin.rb +5 -5
- data/lib/vagrant-hostmanager/provisioner.rb +10 -2
- data/lib/vagrant-hostmanager/version.rb +1 -1
- data/locales/en.yml +3 -3
- data/test/Vagrantfile +4 -2
- data/vagrant-hostmanager.gemspec +4 -0
- metadata +39 -4
- data/lib/vagrant-hostmanager/action/update_hosts_file.rb +0 -33
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,17 +1,9 @@
|
|
1
1
|
Vagrant Host Manager
|
2
2
|
====================
|
3
3
|
`vagrant-hostmanager` is a Vagrant 1.1+ plugin that manages the `/etc/hosts`
|
4
|
-
file on guest machines. Its goal is to enable
|
5
|
-
environments deployed with a cloud provider
|
6
|
-
in advance.
|
7
|
-
|
8
|
-
Status
|
9
|
-
------
|
10
|
-
The current implementation is a proof-of-concept supporting the larger
|
11
|
-
objective of using Vagrant as a cloud management interface for development
|
12
|
-
and production environments.
|
13
|
-
|
14
|
-
The plugin has been tested with Vagrant 1.1.5.
|
4
|
+
file on guest machines (and optionally the host). Its goal is to enable
|
5
|
+
resolution of multi-machine environments deployed with a cloud provider
|
6
|
+
where IP addresses are not known in advance.
|
15
7
|
|
16
8
|
Installation
|
17
9
|
------------
|
@@ -32,6 +24,9 @@ machines with the same provider will have their `/etc/hosts` file updated
|
|
32
24
|
accordingly. Set the `hostmanager.enabled` attribute to `true` in the
|
33
25
|
Vagrantfile to activate this behavior.
|
34
26
|
|
27
|
+
To update the host's `/etc/hosts` file, set the `hostmanager.manage_host`
|
28
|
+
attribute to `true`.
|
29
|
+
|
35
30
|
A machine's IP address is defined by either the static IP for a private
|
36
31
|
network configuration or by the SSH host configuration. To disable
|
37
32
|
using the private network IP address, set `config.hostmanger.ignore_private_ip`
|
@@ -40,9 +35,8 @@ to true.
|
|
40
35
|
A machine's host name is defined by `config.vm.hostname`. If this is not
|
41
36
|
set, it falls back to the symbol defining the machine in the Vagrantfile.
|
42
37
|
|
43
|
-
|
44
|
-
private ip configured will be added to the hosts file.
|
45
|
-
warning on skipped boxes.
|
38
|
+
If the `hostmanager.include_offline` attribute is set to `true`, boxes that are
|
39
|
+
up or have a private ip configured will be added to the hosts file.
|
46
40
|
|
47
41
|
In addition, the `hostmanager.aliases` configuration attribute can be used
|
48
42
|
to provide aliases for your host names.
|
@@ -52,17 +46,18 @@ Example configuration:
|
|
52
46
|
```ruby
|
53
47
|
Vagrant.configure("2") do |config|
|
54
48
|
config.hostmanager.enabled = true
|
49
|
+
config.hostmanager.manage_host = true
|
55
50
|
config.hostmanager.ignore_private_ip = false
|
56
51
|
config.hostmanager.include_offline = true
|
57
|
-
config.vm.define
|
58
|
-
node.vm.hostname =
|
59
|
-
node.vm.network :private_network, ip:
|
52
|
+
config.vm.define 'example-box' do |node|
|
53
|
+
node.vm.hostname = 'example-box-hostname'
|
54
|
+
node.vm.network :private_network, ip: '192.168.42.42'
|
60
55
|
node.hostmanager.aliases = %w(example-box.localdomain example-box-alias)
|
61
56
|
end
|
62
57
|
end
|
63
58
|
```
|
64
59
|
|
65
|
-
As a last option, you can
|
60
|
+
As a last option, you can use hostmanager as a provisioner.
|
66
61
|
This allows you to use the provisioning order to ensure that hostmanager
|
67
62
|
runs before or after provisioning. The provisioner will collect hosts from
|
68
63
|
boxes with the same provider as the running box.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'vagrant-hostmanager/action/update_all'
|
2
|
+
require 'vagrant-hostmanager/action/update_guest'
|
3
|
+
require 'vagrant-hostmanager/action/update_host'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module HostManager
|
7
|
+
module Action
|
8
|
+
include Vagrant::Action::Builtin
|
9
|
+
|
10
|
+
def self.update_all
|
11
|
+
Vagrant::Action::Builder.new.tap do |builder|
|
12
|
+
builder.use ConfigValidate
|
13
|
+
builder.use UpdateAll
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.update_guest
|
18
|
+
Vagrant::Action::Builder.new.tap do |builder|
|
19
|
+
builder.use ConfigValidate
|
20
|
+
builder.use UpdateGuest
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.update_host
|
25
|
+
Vagrant::Action::Builder.new.tap do |builder|
|
26
|
+
builder.use UpdateHost
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'vagrant-hostmanager/hosts_file'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module HostManager
|
5
|
+
module Action
|
6
|
+
class UpdateAll
|
7
|
+
include HostsFile
|
8
|
+
|
9
|
+
def initialize(app, env)
|
10
|
+
@app = app
|
11
|
+
@machine = env[:machine]
|
12
|
+
@global_env = @machine.env
|
13
|
+
@provider = @machine.provider_name
|
14
|
+
@logger = Log4r::Logger.new('vagrant::hostmanager::update_all')
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
# skip if machine is already active on up action
|
19
|
+
return @app.call(env) if @machine.id && env[:machine_action] == :up
|
20
|
+
# skip if machine is not active on destroy action
|
21
|
+
return @app.call(env) if !@machine.id && env[:machine_action] == :destroy
|
22
|
+
|
23
|
+
# check config to see if the hosts file should be update automatically
|
24
|
+
return @app.call(env) unless @machine.config.hostmanager.enabled?
|
25
|
+
@logger.info 'Updating /etc/hosts file automatically'
|
26
|
+
|
27
|
+
@app.call(env)
|
28
|
+
|
29
|
+
# update /etc/hosts file on active machines
|
30
|
+
env[:ui].info I18n.t('vagrant_hostmanager.action.update_guests')
|
31
|
+
@global_env.active_machines.each do |name, p|
|
32
|
+
if p == @provider
|
33
|
+
machine = @global_env.machine(name, p)
|
34
|
+
update_guest(machine)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# update /etc/hosts files on host if enabled
|
39
|
+
if @machine.config.hostmanager.manage_host?
|
40
|
+
env[:ui].info I18n.t('vagrant_hostmanager.action.update_host')
|
41
|
+
update_host
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'vagrant-hostmanager/hosts_file'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module HostManager
|
5
|
+
module Action
|
6
|
+
class UpdateGuest
|
7
|
+
include HostsFile
|
8
|
+
|
9
|
+
def initialize(app, env)
|
10
|
+
@app = app
|
11
|
+
@machine = env[:machine]
|
12
|
+
@global_env = @machine.env
|
13
|
+
@provider = env[:provider]
|
14
|
+
@logger = Log4r::Logger.new('vagrant::hostmanager::update_guest')
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
env[:ui].info I18n.t('vagrant_hostmanager.action.update_guest', {
|
19
|
+
:name => @machine.name
|
20
|
+
})
|
21
|
+
update_guest(@machine)
|
22
|
+
|
23
|
+
@app.call(env)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'vagrant-hostmanager/hosts_file'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module HostManager
|
5
|
+
module Action
|
6
|
+
class UpdateHost
|
7
|
+
include HostsFile
|
8
|
+
|
9
|
+
def initialize(app, env)
|
10
|
+
@app = app
|
11
|
+
@global_env = env[:global_env]
|
12
|
+
@provider = env[:provider]
|
13
|
+
@logger = Log4r::Logger.new('vagrant::hostmanager::update_host')
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
if @global_env.config_global.hostmanager.manage_host?
|
18
|
+
env[:ui].info I18n.t('vagrant_hostmanager.action.update_host')
|
19
|
+
update_host
|
20
|
+
end
|
21
|
+
|
22
|
+
@app.call(env)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -18,15 +18,21 @@ module VagrantPlugins
|
|
18
18
|
end
|
19
19
|
|
20
20
|
argv = parse_options(opts)
|
21
|
-
return if !argv
|
22
|
-
|
23
21
|
options[:provider] ||= @env.default_provider
|
24
22
|
|
25
|
-
|
26
|
-
|
23
|
+
# update /etc/hosts file for specified guest machines
|
27
24
|
with_target_vms(argv, options) do |machine|
|
28
|
-
|
25
|
+
@env.action_runner.run(Action.update_guest, {
|
26
|
+
:machine => machine,
|
27
|
+
:provider => options[:provider]
|
28
|
+
})
|
29
29
|
end
|
30
|
+
|
31
|
+
# update /etc/hosts file for host
|
32
|
+
@env.action_runner.run(Action.update_host, {
|
33
|
+
:global_env => @env,
|
34
|
+
:provider => options[:provider]
|
35
|
+
})
|
30
36
|
end
|
31
37
|
end
|
32
38
|
end
|
@@ -2,41 +2,41 @@ module VagrantPlugins
|
|
2
2
|
module HostManager
|
3
3
|
class Config < Vagrant.plugin('2', :config)
|
4
4
|
attr_accessor :enabled
|
5
|
+
attr_accessor :manage_host
|
5
6
|
attr_accessor :ignore_private_ip
|
6
7
|
attr_accessor :aliases
|
7
8
|
attr_accessor :include_offline
|
8
9
|
|
9
10
|
alias_method :enabled?, :enabled
|
10
11
|
alias_method :include_offline?, :include_offline
|
12
|
+
alias_method :manage_host?, :manage_host
|
11
13
|
|
12
14
|
def initialize
|
13
|
-
@enabled =
|
15
|
+
@enabled = UNSET_VALUE
|
16
|
+
@manage_host = UNSET_VALUE
|
14
17
|
@ignore_private_ip = UNSET_VALUE
|
15
|
-
@
|
16
|
-
@
|
18
|
+
@include_offline = UNSET_VALUE
|
19
|
+
@aliases = []
|
17
20
|
end
|
18
21
|
|
19
22
|
def finalize!
|
23
|
+
@enabled = false if @enabled == UNSET_VALUE
|
24
|
+
@manage_host = false if @managed_host == UNSET_VALUE
|
20
25
|
@ignore_private_ip = false if @ignore_private_ip == UNSET_VALUE
|
26
|
+
@include_offline = false if @include_offline == UNSET_VALUE
|
21
27
|
@aliases = [ @aliases ].flatten
|
22
28
|
end
|
23
29
|
|
24
30
|
def validate(machine)
|
25
|
-
errors =
|
31
|
+
errors = []
|
26
32
|
|
27
|
-
|
28
|
-
errors << validate_bool('hostmanager.
|
29
|
-
|
30
|
-
|
31
|
-
errors
|
32
|
-
|
33
|
-
# check if ignore_private_ip option is either true or false (or UNSET_VALUE)
|
34
|
-
if @ignore_private_ip != UNSET_VALUE
|
35
|
-
errors << validate_bool('hostmanager.ignore_private_ip', ignore_private_ip)
|
36
|
-
end
|
33
|
+
errors << validate_bool('hostmanager.enabled', @enabled)
|
34
|
+
errors << validate_bool('hostmanager.manage_host', @manage_host)
|
35
|
+
errors << validate_bool('hostmanager.ignore_private_ip', @ignore_private_ip)
|
36
|
+
errors << validate_bool('hostmanager.include_offline', @include_offline)
|
37
|
+
errors.compact!
|
37
38
|
|
38
|
-
|
39
|
-
if !machine.config.hostmanager.aliases.kind_of?(Array) and
|
39
|
+
if !machine.config.hostmanager.aliases.kind_of?(Array) and
|
40
40
|
!machine.config.hostmanager.aliases.kind_of?(String)
|
41
41
|
errors << I18n.t('vagrant_hostmanager.config.not_an_array_or_string', {
|
42
42
|
:config_key => 'hostmanager.aliases',
|
@@ -44,22 +44,21 @@ module VagrantPlugins
|
|
44
44
|
})
|
45
45
|
end
|
46
46
|
|
47
|
-
errors
|
48
|
-
{ "HostManager configuration" => errors }
|
47
|
+
{ 'HostManager configuration' => errors }
|
49
48
|
end
|
50
49
|
|
51
50
|
private
|
51
|
+
|
52
52
|
def validate_bool(key, value)
|
53
53
|
if ![TrueClass, FalseClass].include?(value.class)
|
54
54
|
I18n.t('vagrant_hostmanager.config.not_a_bool', {
|
55
55
|
:config_key => key,
|
56
|
-
:value => value.class.to_s
|
56
|
+
:value => value.class.to_s
|
57
57
|
})
|
58
58
|
else
|
59
59
|
nil
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
63
62
|
end
|
64
63
|
end
|
65
64
|
end
|
@@ -1,86 +1,90 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
1
3
|
module VagrantPlugins
|
2
4
|
module HostManager
|
3
5
|
module HostsFile
|
4
|
-
|
5
|
-
|
6
|
-
# The file is written to the Vagrant temporary path.
|
7
|
-
def generate(env, provider)
|
8
|
-
machines = []
|
6
|
+
def update_guest(machine)
|
7
|
+
return unless machine.communicate.ready?
|
9
8
|
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
# download and modify file with Vagrant-managed entries
|
10
|
+
file = @global_env.tmp_path.join("hosts.#{machine.name}")
|
11
|
+
machine.communicate.download('/etc/hosts', file)
|
12
|
+
update_file(file)
|
13
|
+
|
14
|
+
# upload modified file and remove temporary file
|
15
|
+
machine.communicate.upload(file, '/tmp/hosts')
|
16
|
+
machine.communicate.sudo('mv /tmp/hosts /etc/hosts')
|
17
|
+
FileUtils.rm(file)
|
18
|
+
end
|
19
|
+
|
20
|
+
def update_host
|
21
|
+
# copy and modify hosts file on host with Vagrant-managed entries
|
22
|
+
file = @global_env.tmp_path.join('hosts.local')
|
23
|
+
FileUtils.cp('/etc/hosts', file)
|
24
|
+
update_file(file)
|
25
|
+
|
26
|
+
# copy modified file using sudo for permission
|
27
|
+
`sudo cp #{file} /etc/hosts`
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def update_file(file)
|
33
|
+
# build array of host file entries from Vagrant configuration
|
34
|
+
entries = []
|
35
|
+
get_machines.each do |name, p|
|
36
|
+
if @provider == p
|
37
|
+
machine = @global_env.machine(name, p)
|
38
|
+
host = machine.config.vm.hostname || name
|
39
|
+
id = machine.id
|
40
|
+
ip = get_ip_address(machine)
|
41
|
+
aliases = machine.config.hostmanager.aliases.join(' ').chomp
|
42
|
+
entries << "#{ip}\t#{host} #{aliases}\t# VAGRANT ID: #{id}\n"
|
19
43
|
end
|
20
|
-
ip || (machine.ssh_info ? machine.ssh_info[:host] : nil)
|
21
44
|
end
|
22
45
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
file
|
27
|
-
|
28
|
-
if provider == p
|
29
|
-
machines << machine = env.machine(name, provider)
|
30
|
-
host = machine.config.vm.hostname || name
|
31
|
-
ip = get_ip_address.call(machine)
|
32
|
-
if ip
|
33
|
-
host_aliases = machine.config.hostmanager.aliases.join("\s").chomp
|
34
|
-
machine.env.ui.info I18n.t('vagrant_hostmanager.action.add_host', {
|
35
|
-
:ip => ip,
|
36
|
-
:host => host,
|
37
|
-
:aliases => host_aliases,
|
38
|
-
})
|
39
|
-
file << "#{ip}\t#{host}\s#{host_aliases}\n"
|
40
|
-
else
|
41
|
-
machine.env.ui.warn I18n.t('vagrant_hostmanager.action.host_no_ip', {
|
42
|
-
:name => name,
|
43
|
-
})
|
44
|
-
end
|
45
|
-
end
|
46
|
+
tmp_file = Tempfile.open('hostmanager', @global_env.tmp_path, 'a')
|
47
|
+
begin
|
48
|
+
# copy each line not managed by Vagrant
|
49
|
+
File.open(file).each_line do |line|
|
50
|
+
tmp_file << line unless line =~ /# VAGRANT ID:/
|
46
51
|
end
|
52
|
+
|
53
|
+
# write a line for each Vagrant-managed entry
|
54
|
+
entries.each { |entry| tmp_file << entry }
|
55
|
+
ensure
|
56
|
+
tmp_file.close
|
57
|
+
FileUtils.cp(tmp_file, file)
|
58
|
+
tmp_file.unlink
|
47
59
|
end
|
48
|
-
machines
|
49
60
|
end
|
50
61
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
machine.communicate.upload(path, '/tmp/hosts')
|
60
|
-
machine.communicate.sudo("mv /tmp/hosts /etc/hosts")
|
62
|
+
def get_ip_address(machine)
|
63
|
+
ip = nil
|
64
|
+
if machine.config.hostmanager.ignore_private_ip != true
|
65
|
+
machine.config.vm.networks.each do |network|
|
66
|
+
key, options = network[0], network[1]
|
67
|
+
ip = options[:ip] if key == :private_network
|
68
|
+
next if ip
|
69
|
+
end
|
61
70
|
end
|
71
|
+
ip || (machine.ssh_info ? machine.ssh_info[:host] : nil)
|
62
72
|
end
|
63
73
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
#
|
68
|
-
# Returns an array with the same structure as env.active_machines:
|
69
|
-
# [ [:machine, :virtualbox], [:foo, :virtualbox] ]
|
70
|
-
def get_machines(env, provider)
|
71
|
-
if env.config_global.hostmanager.include_offline?
|
74
|
+
def get_machines
|
75
|
+
# check if offline machines should be included in host entries
|
76
|
+
if @global_env.config_global.hostmanager.include_offline?
|
72
77
|
machines = []
|
73
|
-
|
78
|
+
@global_env.machine_names.each do |name|
|
74
79
|
begin
|
75
|
-
|
76
|
-
machines << [name, provider]
|
77
|
-
rescue Vagrant::Errors::MachineNotFound
|
78
|
-
# ignore this box.
|
80
|
+
@global_env.machine(name, @provider)
|
81
|
+
machines << [name, @provider]
|
82
|
+
rescue Vagrant::Errors::MachineNotFound
|
79
83
|
end
|
80
84
|
end
|
81
85
|
machines
|
82
86
|
else
|
83
|
-
|
87
|
+
@global_env.active_machines
|
84
88
|
end
|
85
89
|
end
|
86
90
|
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require 'vagrant-hostmanager/action
|
1
|
+
require 'vagrant-hostmanager/action'
|
2
2
|
|
3
3
|
module VagrantPlugins
|
4
4
|
module HostManager
|
5
5
|
class Plugin < Vagrant.plugin('2')
|
6
6
|
name 'HostManager'
|
7
7
|
description <<-DESC
|
8
|
-
This plugin manages the /etc/hosts file for guest machines.
|
9
|
-
created for each active machine using the hostname attribute.
|
8
|
+
This plugin manages the /etc/hosts file for the host and guest machines.
|
9
|
+
An entry is created for each active machine using the hostname attribute.
|
10
10
|
|
11
11
|
You can also use the hostmanager provisioner to update the hosts file.
|
12
12
|
DESC
|
@@ -17,11 +17,11 @@ module VagrantPlugins
|
|
17
17
|
end
|
18
18
|
|
19
19
|
action_hook(:hostmanager, :machine_action_up) do |hook|
|
20
|
-
hook.prepend(Action
|
20
|
+
hook.prepend(Action.update_all)
|
21
21
|
end
|
22
22
|
|
23
23
|
action_hook(:hostmanager, :machine_action_destroy) do |hook|
|
24
|
-
hook.
|
24
|
+
hook.prepend(Action.update_all)
|
25
25
|
end
|
26
26
|
|
27
27
|
provisioner(:hostmanager) do
|
@@ -3,9 +3,17 @@ module VagrantPlugins
|
|
3
3
|
class Provisioner < Vagrant.plugin('2', :provisioner)
|
4
4
|
include HostsFile
|
5
5
|
|
6
|
+
def initialize(machine, config)
|
7
|
+
super(machine, config)
|
8
|
+
@global_env = machine.env
|
9
|
+
@provider = machine.provider_name
|
10
|
+
end
|
11
|
+
|
6
12
|
def provision
|
7
|
-
|
8
|
-
|
13
|
+
update_guest(@machine)
|
14
|
+
if @global_env.config_global.hostmanager.manage_host?
|
15
|
+
update_host
|
16
|
+
end
|
9
17
|
end
|
10
18
|
end
|
11
19
|
end
|
data/locales/en.yml
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
en:
|
2
2
|
vagrant_hostmanager:
|
3
3
|
action:
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
update_guests: "Updating /etc/hosts file on active guest machines..."
|
5
|
+
update_guest: "[%{name}] Updating /etc/hosts file..."
|
6
|
+
update_host: "Updating /etc/hosts file on host machine (password may be required)..."
|
7
7
|
config:
|
8
8
|
not_a_bool: "A value for %{config_key} can only be true or false, not type '%{value}'"
|
9
9
|
not_an_array_or_string: "A value for %{config_key} must be an Array or String, not type '%{is_class}'"
|
data/test/Vagrantfile
CHANGED
@@ -4,14 +4,16 @@
|
|
4
4
|
Vagrant.require_plugin('vagrant-hostmanager')
|
5
5
|
|
6
6
|
Vagrant.configure('2') do |config|
|
7
|
-
config.vm.box = 'precise64
|
8
|
-
config.vm.box_url = '
|
7
|
+
config.vm.box = 'precise64'
|
8
|
+
config.vm.box_url = 'http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-amd64-disk1.box'
|
9
9
|
|
10
10
|
config.hostmanager.enabled = true
|
11
|
+
config.hostmanager.manage_host = true
|
11
12
|
|
12
13
|
config.vm.define :server1 do |server|
|
13
14
|
server.vm.hostname = 'fry'
|
14
15
|
server.vm.network :private_network, :ip => '10.0.5.2'
|
16
|
+
server.hostmanager.aliases = %w(test-alias)
|
15
17
|
end
|
16
18
|
|
17
19
|
config.vm.define :server2 do |server|
|
data/vagrant-hostmanager.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'vagrant-hostmanager/version'
|
@@ -14,4 +15,7 @@ Gem::Specification.new do |gem|
|
|
14
15
|
gem.files = `git ls-files`.split($/)
|
15
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
17
|
gem.require_paths = ['lib']
|
18
|
+
|
19
|
+
gem.add_development_dependency 'bundler', '~> 1.3'
|
20
|
+
gem.add_development_dependency 'rake'
|
17
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-hostmanager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
13
|
-
dependencies:
|
12
|
+
date: 2013-06-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
14
46
|
description: A Vagrant plugin that manages the /etc/hosts file within a multi-machine
|
15
47
|
environment
|
16
48
|
email:
|
@@ -25,7 +57,10 @@ files:
|
|
25
57
|
- README.md
|
26
58
|
- Rakefile
|
27
59
|
- lib/vagrant-hostmanager.rb
|
28
|
-
- lib/vagrant-hostmanager/action
|
60
|
+
- lib/vagrant-hostmanager/action.rb
|
61
|
+
- lib/vagrant-hostmanager/action/update_all.rb
|
62
|
+
- lib/vagrant-hostmanager/action/update_guest.rb
|
63
|
+
- lib/vagrant-hostmanager/action/update_host.rb
|
29
64
|
- lib/vagrant-hostmanager/command.rb
|
30
65
|
- lib/vagrant-hostmanager/config.rb
|
31
66
|
- lib/vagrant-hostmanager/errors.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'vagrant-hostmanager/hosts_file'
|
2
|
-
|
3
|
-
module VagrantPlugins
|
4
|
-
module HostManager
|
5
|
-
module Action
|
6
|
-
class UpdateHostsFile
|
7
|
-
include HostsFile
|
8
|
-
|
9
|
-
def initialize(app, env)
|
10
|
-
@app = app
|
11
|
-
@machine = env[:machine]
|
12
|
-
@logger = Log4r::Logger.new('vagrant::hostmanager::update_hosts_file')
|
13
|
-
end
|
14
|
-
|
15
|
-
def call(env)
|
16
|
-
# check if machine is already active
|
17
|
-
return @app.call(env) if @machine.id
|
18
|
-
|
19
|
-
# check config to see if the hosts file should be update automatically
|
20
|
-
return @app.call(env) unless @machine.config.hostmanager.enabled?
|
21
|
-
@logger.info 'Updating /etc/hosts file automatically'
|
22
|
-
|
23
|
-
# continue the action stack so the machine will be created
|
24
|
-
@app.call(env)
|
25
|
-
|
26
|
-
# update /etc/hosts file on each active machine
|
27
|
-
machines = generate(@machine.env, @machine.provider_name)
|
28
|
-
machines.each { |machine| update(machine) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|