Merge sevos pull/15 into master
Merge branch 'enable_using_private_ips_from_aws' of https://github.com/sevos/vagrant-hostmanager into master. Conflicts: lib/vagrant-hostmanager/config.rb lib/vagrant-hostmanager/hosts_file.rb
This commit is contained in:
commit
3abecb0088
19
README.md
19
README.md
|
@ -72,6 +72,25 @@ Use:
|
||||||
config.vm.provision :hostmanager
|
config.vm.provision :hostmanager
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Custom IP resolver
|
||||||
|
------------------
|
||||||
|
|
||||||
|
You can customize way, how host manager resolves IP address
|
||||||
|
for each machine. This might be handy in case of aws provider,
|
||||||
|
where host name is stored in ssh_info hash of each machine.
|
||||||
|
This causes generation of invalid /etc/hosts file.
|
||||||
|
|
||||||
|
Custom IP resolver gives you oportunity to calculate IP address
|
||||||
|
for each machine by yourself. For example:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
config.hostmanager.ip_resolver = proc do |vm|
|
||||||
|
if hostname = (vm.ssh_info && vm.ssh_info[:host])
|
||||||
|
`host #{hostname}`.split("\n").last[/(\d+\.\d+\.\d+\.\d+)/, 1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
Contribute
|
Contribute
|
||||||
----------
|
----------
|
||||||
Contributions are welcome.
|
Contributions are welcome.
|
||||||
|
|
|
@ -6,6 +6,7 @@ module VagrantPlugins
|
||||||
attr_accessor :ignore_private_ip
|
attr_accessor :ignore_private_ip
|
||||||
attr_accessor :aliases
|
attr_accessor :aliases
|
||||||
attr_accessor :include_offline
|
attr_accessor :include_offline
|
||||||
|
attr_accessor :ip_resolver
|
||||||
|
|
||||||
alias_method :enabled?, :enabled
|
alias_method :enabled?, :enabled
|
||||||
alias_method :include_offline?, :include_offline
|
alias_method :include_offline?, :include_offline
|
||||||
|
@ -17,6 +18,9 @@ module VagrantPlugins
|
||||||
@ignore_private_ip = UNSET_VALUE
|
@ignore_private_ip = UNSET_VALUE
|
||||||
@include_offline = UNSET_VALUE
|
@include_offline = UNSET_VALUE
|
||||||
@aliases = []
|
@aliases = []
|
||||||
|
@aliases = Array.new
|
||||||
|
@include_offline = false
|
||||||
|
@ip_resolver = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def finalize!
|
def finalize!
|
||||||
|
@ -35,7 +39,8 @@ module VagrantPlugins
|
||||||
errors << validate_bool('hostmanager.include_offline', @include_offline)
|
errors << validate_bool('hostmanager.include_offline', @include_offline)
|
||||||
errors.compact!
|
errors.compact!
|
||||||
|
|
||||||
if !machine.config.hostmanager.aliases.kind_of?(Array) and
|
# check if aliases option is an Array
|
||||||
|
if !machine.config.hostmanager.aliases.kind_of?(Array) &&
|
||||||
!machine.config.hostmanager.aliases.kind_of?(String)
|
!machine.config.hostmanager.aliases.kind_of?(String)
|
||||||
errors << I18n.t('vagrant_hostmanager.config.not_an_array_or_string', {
|
errors << I18n.t('vagrant_hostmanager.config.not_an_array_or_string', {
|
||||||
:config_key => 'hostmanager.aliases',
|
:config_key => 'hostmanager.aliases',
|
||||||
|
@ -43,7 +48,16 @@ module VagrantPlugins
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
{ 'HostManager configuration' => errors }
|
if !machine.config.hostmanager.ip_resolver.nil? &&
|
||||||
|
!machine.config.hostmanager.ip_resolver.kind_of?(Proc)
|
||||||
|
errors << I18n.t('vagrant_hostmanager.config.not_a_proc', {
|
||||||
|
:config_key => 'hostmanager.ip_resolver',
|
||||||
|
:is_class => ip_resolver.class.to_s,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
errors.compact!
|
||||||
|
{ "HostManager configuration" => errors }
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -91,12 +91,17 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_ip_address(machine)
|
def get_ip_address(machine)
|
||||||
ip = nil
|
custom_ip_resolver = machine.config.hostmanager.ip_resolver
|
||||||
if machine.config.hostmanager.ignore_private_ip != true
|
if custom_ip_resolver
|
||||||
machine.config.vm.networks.each do |network|
|
custom_ip_resolver.call(machine)
|
||||||
key, options = network[0], network[1]
|
else
|
||||||
ip = options[:ip] if key == :private_network
|
ip = nil
|
||||||
next if ip
|
if machine.config.hostmanager.ignore_private_ip != true
|
||||||
|
machine.config.vm.networks.each do |network|
|
||||||
|
key, options = network[0], network[1]
|
||||||
|
ip = options[:ip] if key == :private_network
|
||||||
|
next if ip
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ip || (machine.ssh_info ? machine.ssh_info[:host] : nil)
|
ip || (machine.ssh_info ? machine.ssh_info[:host] : nil)
|
||||||
|
|
|
@ -7,3 +7,4 @@ en:
|
||||||
config:
|
config:
|
||||||
not_a_bool: "A value for %{config_key} can only be true or false, not type '%{value}'"
|
not_a_bool: "A value for %{config_key} can only be true or false, not type '%{value}'"
|
||||||
not_an_array_or_string: "A value for %{config_key} must be an Array or String, not type '%{is_class}'"
|
not_an_array_or_string: "A value for %{config_key} must be an Array or String, not type '%{is_class}'"
|
||||||
|
not_a_proc: "A value for %{config_key} must be a Proc, not type '%{is_class}'"
|
||||||
|
|
Loading…
Reference in New Issue