Merge branch 'sevos-enable_using_private_ips_from_aws'

This commit is contained in:
Bryan Cribbs 2013-11-15 20:17:14 -06:00
commit 9bc81fc318
4 changed files with 47 additions and 8 deletions

View File

@ -72,6 +72,25 @@ Use:
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
----------
Contributions are welcome.

View File

@ -6,6 +6,7 @@ module VagrantPlugins
attr_accessor :ignore_private_ip
attr_accessor :aliases
attr_accessor :include_offline
attr_accessor :ip_resolver
alias_method :enabled?, :enabled
alias_method :include_offline?, :include_offline
@ -17,6 +18,9 @@ module VagrantPlugins
@ignore_private_ip = UNSET_VALUE
@include_offline = UNSET_VALUE
@aliases = []
@aliases = Array.new
@include_offline = false
@ip_resolver = nil
end
def finalize!
@ -35,7 +39,8 @@ module VagrantPlugins
errors << validate_bool('hostmanager.include_offline', @include_offline)
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)
errors << I18n.t('vagrant_hostmanager.config.not_an_array_or_string', {
:config_key => 'hostmanager.aliases',
@ -43,7 +48,16 @@ module VagrantPlugins
})
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
private

View File

@ -91,12 +91,17 @@ module VagrantPlugins
end
def get_ip_address(machine)
ip = nil
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
custom_ip_resolver = machine.config.hostmanager.ip_resolver
if custom_ip_resolver
custom_ip_resolver.call(machine)
else
ip = nil
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
ip || (machine.ssh_info ? machine.ssh_info[:host] : nil)

View File

@ -7,3 +7,4 @@ en:
config:
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_a_proc: "A value for %{config_key} must be a Proc, not type '%{is_class}'"