vagrant-hosts 2.7.1 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ed8d9542bf42223218d3104999aab673b9bcfcfc
4
- data.tar.gz: 2e5169054451f44ccd3fba4827f095b0a72f3aa0
3
+ metadata.gz: bc25e420c49e7f62fdb74de109d2d297bbcd04ef
4
+ data.tar.gz: 84dc84eaf30ba2d749dd691568aabd97fe1bc8bb
5
5
  SHA512:
6
- metadata.gz: a689909a174f55a824b8d0f3653b52f1fcc7e999788f9b6e30aa9a1880c347936eccf2526df53ea2cc18b8d926e99b136aaffa24ecf03b11623fe4f85c5156b3
7
- data.tar.gz: c08d0e02d031e9f0995688b0c05b1a08e80c105a61dbdbb49bc221f2b04b6814c246036702721ff22c7786b18f803d03c9e5407b21124a221f4d4f41a8b0c9c2
6
+ metadata.gz: f5fa318724084c3ad5ba7323330ab0550cef794a8bedbde25eed798648a3987de7289e4d90f2d98a6542368bce6cb211326aef1d55120b04e9cf70b1fbde0a78
7
+ data.tar.gz: 5576b69d80d8ea0c2f7338aead65a83142ccb3afb5d4782dda9555e50972dee7c310206ff8096a54fe6cefdea4bf2b768f7231010c8f3fb381fe7037a6b07065
data/CHANGELOG CHANGED
@@ -1,6 +1,18 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ 2.8.0
5
+ -----
6
+
7
+ 2016-04-18
8
+
9
+ This is a backwards compatible feature release.
10
+
11
+ * (GH-56) Added a special value, `@facter_ipaddress`, for host entries that
12
+ will be replaced with the IPv4 address assigned to the default
13
+ network interface.
14
+
15
+
4
16
  2.7.1
5
17
  -----
6
18
 
@@ -21,7 +21,7 @@ behaviors of each provisioner instance.
21
21
  * Description: An array of tuples containing:
22
22
  - An IP address
23
23
  - A list of hostnames match with that address.
24
- These entries may use special eys as described in the next section.
24
+ These entries may use special keys as described in the next section.
25
25
  * Default: `[]`
26
26
  * `exports`
27
27
  * Description: A hash containing named lists of `[address, [aliases]]`
@@ -54,6 +54,9 @@ data determined from the VM.
54
54
 
55
55
  For `address`, the following special keys may be used:
56
56
 
57
+ - `@facter_ipaddress`: Expands to the IPv4 address assigned to the
58
+ default network interface of the guest VM.
59
+
57
60
  - `@vagrant_private_networks`: Expands to create one host entry with the given
58
61
  `aliases` for each private network attached to a VM that has an explicitly
59
62
  configured `ip` address. This is similar to the `autoconfigure` setting, but
@@ -162,6 +162,8 @@ module VagrantHosts::Addresses
162
162
  else
163
163
  []
164
164
  end
165
+ when '@facter_ipaddress'
166
+ machine.guest.capability(:network_facts)['networking']['ip']
165
167
  else
166
168
  address
167
169
  end
@@ -1,15 +1,14 @@
1
1
  module VagrantHosts
2
2
  module Cap
3
3
  module SyncHosts
4
-
5
- class UnknownVersion < Vagrant::Errors::VagrantError
6
- error_key(:unknown_version, 'vagrant_hosts.cap.sync_hosts')
7
- end
8
-
9
4
  require 'vagrant-hosts/cap/sync_hosts/base'
10
5
  require 'vagrant-hosts/cap/sync_hosts/posix'
11
6
  require 'vagrant-hosts/cap/sync_hosts/windows'
7
+ end
12
8
 
9
+ module Facts
10
+ require_relative 'cap/facts/posix'
11
+ require_relative 'cap/facts/windows'
13
12
  end
14
13
  end
15
14
  end
@@ -0,0 +1,43 @@
1
+ # Base class for retrieving network facts from guest VMs
2
+ #
3
+ # @since 2.8.0
4
+ class VagrantHosts::Cap::Facts::Base
5
+
6
+ # Retrieve facts from a guest VM
7
+ #
8
+ # See {#load_facts} for implementation details.
9
+ #
10
+ # @return [Hash] A hash of facts.
11
+ def self.network_facts(machine)
12
+ new(machine).load_facts
13
+ end
14
+
15
+ attr_reader :machine
16
+
17
+ def initialize(machine)
18
+ @machine = machine
19
+ end
20
+
21
+ def load_facts
22
+ raise NotImplementedError
23
+ end
24
+
25
+ private
26
+
27
+ # TODO: Split this out into a shared module.
28
+ def sudo(cmd)
29
+ stdout = ''
30
+ stderr = ''
31
+
32
+ retval = machine.communicate.sudo(cmd) do |type, data|
33
+ if type == :stderr
34
+ stderr << data.chomp
35
+ else
36
+ stdout << data.chomp
37
+ end
38
+ end
39
+
40
+ {:stdout => stdout, :stderr => stderr, :retval => retval}
41
+ end
42
+
43
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'base'
2
+
3
+ # Base class for retrieving network facts from POSIX
4
+ #
5
+ # @since 2.8.0
6
+ class VagrantHosts::Cap::Facts::POSIX < VagrantHosts::Cap::Facts::Base
7
+
8
+ def load_facts
9
+ facts = {}
10
+ facts['networking'] = {}
11
+ facts['networking']['interfaces'] = parse_ifconfig
12
+
13
+ iface = get_default_iface
14
+ facts['networking']['ip'] = facts['networking']['interfaces'][iface]['ip']
15
+
16
+ facts
17
+ end
18
+
19
+ private
20
+
21
+ def ifconfig
22
+ ifconfig_output = sudo('ifconfig -a')[:stdout]
23
+ # Group output by interface.
24
+ ifconfig_output.split(/^([[:alnum:]]+[:]?\s)/).drop(1).each_slice(2).map(&:join)
25
+ end
26
+
27
+ def parse_ifconfig
28
+ results = ifconfig.map do |i|
29
+ i.match(/^([[:alnum:]]+)[:]?\s.*inet (?:addr:)?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/m)
30
+ end.compact.map do |r|
31
+ name, ip = r.captures
32
+ [name, {'ip' => ip}]
33
+ end
34
+
35
+ Hash[results]
36
+ end
37
+
38
+ def get_default_iface
39
+ route_table = sudo('netstat -rn')[:stdout]
40
+ default = route_table.lines.find {|e| e.start_with?('default') || e.start_with?('0.0.0.0')}
41
+
42
+ default.split.last.chomp
43
+ end
44
+ end
@@ -0,0 +1,42 @@
1
+ require_relative 'base'
2
+
3
+ # Base class for retrieving network facts from Windows
4
+ #
5
+ # @since 2.8.0
6
+ class VagrantHosts::Cap::Facts::Windows < VagrantHosts::Cap::Facts::Base
7
+
8
+ def load_facts
9
+ facts = {}
10
+ facts['networking'] = {}
11
+ facts['networking']['interfaces'] = parse_ifconfig
12
+
13
+ iface = get_default_iface
14
+ facts['networking']['ip'] = iface
15
+
16
+ facts
17
+ end
18
+
19
+ private
20
+
21
+ def parse_ifconfig
22
+ # Imagine a call to Get-WmiObject -Query that returns a combined dataset
23
+ # built from Win32_NetworkAdapter (interface names) and
24
+ # Win32_NetworkAdapterConfiguration (everything else, like ipaddress).
25
+ #
26
+ # TODO: Implement said query.
27
+
28
+ Hash.new
29
+ end
30
+
31
+ def get_default_iface
32
+ route_table = sudo('netstat -rn')[:stdout]
33
+
34
+ default = route_table.lines.find do |e|
35
+ e.lstrip.start_with?('default') ||
36
+ e.lstrip.start_with?('0.0.0.0')
37
+ end
38
+
39
+ default.split[-2].chomp
40
+ end
41
+
42
+ end
@@ -14,6 +14,12 @@ class VagrantHosts::Cap::SyncHosts::Base
14
14
  end
15
15
 
16
16
  def sync!
17
+ # This ensures that a default hostname is created from the macine name
18
+ # if the VM wasn't configured with a hostname.
19
+ #
20
+ # FIXME: Write tests for this behavior.
21
+ # TODO: Move this behavior into a config block on the hosts provisioner
22
+ # so that this capability can remain focused on updating /etc/hosts.
17
23
  hostname = @machine.config.vm.hostname || @machine.name.to_s
18
24
  change_host_name(hostname)
19
25
 
@@ -34,6 +34,19 @@ class VagrantHosts::Plugin < Vagrant.plugin(2)
34
34
  VagrantHosts::Cap::SyncHosts::Windows
35
35
  end
36
36
 
37
+
38
+ [:darwin, :linux, :solaris, :solaris11].each do |os|
39
+ guest_capability(os, 'network_facts') do
40
+ require_relative 'cap'
41
+ VagrantHosts::Cap::Facts::POSIX
42
+ end
43
+ end
44
+
45
+ guest_capability(:windows, 'network_facts') do
46
+ require_relative 'cap'
47
+ VagrantHosts::Cap::Facts::Windows
48
+ end
49
+
37
50
  command(:hosts) do
38
51
  require_relative 'command'
39
52
  VagrantHosts::Command
@@ -1,3 +1,3 @@
1
1
  module VagrantHosts
2
- VERSION = '2.7.1'
2
+ VERSION = '2.8.0'
3
3
  end
@@ -1,8 +1,3 @@
1
1
  ---
2
2
  en:
3
- vagrant_hosts:
4
- cap:
5
- sync_hosts:
6
- unknown_version: |-
7
- %{vagrant_version} isn't a recognized Vagrant version, vagrant-hosts can't reliably
8
- detect the `change_host_name` method.
3
+ vagrant_hosts: {}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-hosts
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.1
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Thebo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-29 00:00:00.000000000 Z
11
+ date: 2016-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -57,6 +57,9 @@ files:
57
57
  - lib/vagrant-hosts.rb
58
58
  - lib/vagrant-hosts/addresses.rb
59
59
  - lib/vagrant-hosts/cap.rb
60
+ - lib/vagrant-hosts/cap/facts/base.rb
61
+ - lib/vagrant-hosts/cap/facts/posix.rb
62
+ - lib/vagrant-hosts/cap/facts/windows.rb
60
63
  - lib/vagrant-hosts/cap/sync_hosts/base.rb
61
64
  - lib/vagrant-hosts/cap/sync_hosts/posix.rb
62
65
  - lib/vagrant-hosts/cap/sync_hosts/windows.rb