vagrant-hosts 2.8.3 → 2.9.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 17835dd36d0ddc4a0c5f81f689524b27f631a948
4
- data.tar.gz: c00d66d9f43d293eaeaa25f65f32d917fb4140f2
3
+ metadata.gz: 322a1b0f577132bf7a26d7e6cf30dbbd4b534cae
4
+ data.tar.gz: 808c7e2296002dcacd7986f3a026fca00e726175
5
5
  SHA512:
6
- metadata.gz: 17f0584cd999d50b1fc17b26724c25423a79240a69da295af12cf8cc107bf47975b22bc363373d93b16d9ca1bb1fd83b2c5b21f5be4e8f735ec52a8bb121fafd
7
- data.tar.gz: bf34838c4b82a6bf5de3dbad2a53b03f02ec65271db839c032e9e879f2959d90349a192c845e0504cfe4fdd3aefc785c8cbfce9a03479912bcc75340c566b1a3
6
+ metadata.gz: 5bc7ab2fd9c7531111315349d6630bb9fbc913f199b8fe52f3aa6e1e508da0b53156e25e9a86d5ed006cd7bb616e20a9093d5cb28d987a5cb11673d8c8bd09d2
7
+ data.tar.gz: 160746015fcf52be6d95f6334fbbe35d6ce1ce3ae70bc70ab5e34b9222c64a09e221bed3165b1064991c9392caae7ed084eeae4f17c5c5975eebde6a04c557c7
@@ -20,8 +20,6 @@ env:
20
20
 
21
21
  matrix:
22
22
  include:
23
- - rvm: 2.0.0
24
- env: TEST_VAGRANT_VERSION=v1.7.4 BUNDLER_VERSION=1.10.5
25
23
  - rvm: 2.2.5
26
24
  env: TEST_VAGRANT_VERSION=v1.8.7 BUNDLER_VERSION=1.12.5
27
25
  - rvm: 2.3.4
@@ -29,6 +27,8 @@ matrix:
29
27
  - rvm: 2.4.4
30
28
  env: TEST_VAGRANT_VERSION=v2.0.4 BUNDLER_VERSION=1.16.1
31
29
  - rvm: 2.4.4
32
- env: TEST_VAGRANT_VERSION=v2.1.2 BUNDLER_VERSION=1.16.1
30
+ env: TEST_VAGRANT_VERSION=v2.1.5 BUNDLER_VERSION=1.16.1
31
+ - rvm: 2.4.4
32
+ env: TEST_VAGRANT_VERSION=v2.2.2 BUNDLER_VERSION=1.16.1
33
33
  - rvm: 2.4.4
34
34
  env: TEST_VAGRANT_VERSION=HEAD BUNDLER_VERSION=1.16.1
data/CHANGELOG CHANGED
@@ -1,6 +1,25 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ 2.9.0
5
+ -----
6
+
7
+ 2019-01-03
8
+
9
+ This is a backwards compatible feature and bugfix release.
10
+
11
+ ### Added
12
+
13
+ * New `change_hostname` config setting that controls whether the provisioner
14
+ will attempt to set the hostname of the VM.
15
+
16
+ ### Fixed
17
+
18
+ * Hostnames can now be removed from Windows VMs.
19
+
20
+ * Provisioning hostnames on Windows VMs will no longer fail when a large
21
+ number of names is added.
22
+
4
23
  2.8.2
5
24
  -----
6
25
 
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
  require 'rubygems/version'
3
3
 
4
- vagrant_branch = ENV['TEST_VAGRANT_VERSION'] || 'v2.1.2'
4
+ vagrant_branch = ENV['TEST_VAGRANT_VERSION'] || 'v2.2.2'
5
5
  vagrant_version = nil
6
6
 
7
7
  # Wrapping gemspec in the :plugins group causes Vagrant 1.5 and newer to
@@ -38,6 +38,9 @@ behaviors of each provisioner instance.
38
38
  * `add_localhost_hostnames`
39
39
  * Description: A boolean which controls whether the hostname of the machine is added as an alias for `127.0.1.1`
40
40
  * Default: `true`
41
+ * `change_hostname`
42
+ * Description: A boolean which controls whether the hostname of the machine will be set during provisioning.
43
+ * Default: `true`
41
44
  * `sync_hosts`
42
45
  * Description: A boolean which controls whether running the hosts provisioner causes an update on all other running machines.
43
46
  This also happens during machine destruction.
@@ -1,7 +1,10 @@
1
- # Provide an abstract base class for syncing hosts entries
2
- class VagrantHosts::Cap::SyncHosts::Base
1
+ require 'vagrant-hosts/addresses'
3
2
 
4
- require 'vagrant-hosts/addresses'
3
+ # Abstract guest capability for syncing host resources
4
+ #
5
+ # @abstract
6
+ # @since 2.0.0
7
+ class VagrantHosts::Cap::SyncHosts::Base
5
8
  include VagrantHosts::Addresses
6
9
 
7
10
  def self.sync_hosts(machine, config)
@@ -20,15 +23,37 @@ class VagrantHosts::Cap::SyncHosts::Base
20
23
  # FIXME: Write tests for this behavior.
21
24
  # TODO: Move this behavior into a config block on the hosts provisioner
22
25
  # so that this capability can remain focused on updating /etc/hosts.
23
- hostname = @machine.config.vm.hostname || @machine.name.to_s
24
- change_host_name(hostname)
26
+ if @config.change_hostname
27
+ hostname = @machine.config.vm.hostname || @machine.name.to_s
28
+ change_host_name(hostname)
29
+ end
25
30
 
26
- # call to method not implemented by abstract base class
27
31
  update_hosts
28
32
  end
29
33
 
30
34
  private
31
35
 
36
+ # Upload /etc/hosts content to a temporary file on the guest
37
+ def upload_temphosts(hosts_content, dest_path = '/tmp/vagrant-hosts.txt')
38
+ temp_file = nil
39
+
40
+ temp_file = Tempfile.new('vagrant-hosts')
41
+ temp_file.binmode # Don't convert line endings.
42
+
43
+ temp_file.write(hosts_content)
44
+ temp_file.flush
45
+ @machine.communicate.upload(temp_file.path, dest_path)
46
+ ensure
47
+ temp_file.close unless temp_file.nil?
48
+ end
49
+
50
+ # Update the hosts file on a machine
51
+ #
52
+ # Subclasses should implement this method with OS-specific logic.
53
+ def update_hosts
54
+ raise NotImplementedError
55
+ end
56
+
32
57
  # @param name [String] The new hostname to apply on the guest
33
58
  def change_host_name(name)
34
59
  case Vagrant::VERSION
@@ -38,5 +63,4 @@ class VagrantHosts::Cap::SyncHosts::Base
38
63
  @machine.guest.capability(:change_host_name, name)
39
64
  end
40
65
  end
41
-
42
66
  end
@@ -1,20 +1,15 @@
1
- # Provide a base class for syncing hosts entries on POSIX systems.
2
-
3
1
  require 'tempfile'
4
2
 
3
+ # Guest capability for syncing /etc/hosts on POSIX systems
4
+ #
5
+ # @since 2.0.0
5
6
  class VagrantHosts::Cap::SyncHosts::POSIX < VagrantHosts::Cap::SyncHosts::Base
6
7
 
7
8
  private
8
9
 
9
- def upload_tmphosts
10
- cache = Tempfile.new('tmp-hosts')
11
- cache.write(format_hosts)
12
- cache.flush
13
- @machine.communicate.upload(cache.path, '/tmp/hosts')
14
- end
15
-
16
10
  def update_hosts
17
- upload_tmphosts
11
+ hosts_content = format_hosts
12
+ upload_temphosts(hosts_content, '/tmp/vagrant-hosts.txt')
18
13
 
19
14
  # Switch to PTY mode as this provider may execute across multiple machines
20
15
  # which may not have requiretty set to false (i.e. because they're still
@@ -24,7 +19,10 @@ class VagrantHosts::Cap::SyncHosts::POSIX < VagrantHosts::Cap::SyncHosts::Base
24
19
  old_pty_setting = @machine.config.ssh.pty
25
20
  @machine.config.ssh.pty = true
26
21
 
27
- @machine.communicate.sudo('cat /tmp/hosts > /etc/hosts')
22
+ # NOTE: cat is used here instead of mv to work around issues with
23
+ # Docker filesystem layers not allowing the creation of a
24
+ # new file.
25
+ @machine.communicate.sudo('cat /tmp/vagrant-hosts.txt > /etc/hosts')
28
26
  ensure
29
27
  @machine.config.ssh.pty = old_pty_setting
30
28
  end
@@ -37,5 +35,4 @@ class VagrantHosts::Cap::SyncHosts::POSIX < VagrantHosts::Cap::SyncHosts::Base
37
35
  str << "#{address} #{aliases.join(' ')}\n"
38
36
  end
39
37
  end
40
-
41
38
  end
@@ -1,22 +1,39 @@
1
- # Provide a base class for syncing hosts entries on Windows systems.
1
+ # Guest capability for updating System32/drivers/etc/hosts on Windows
2
+ #
3
+ # @see https://docs.microsoft.com/en-us/previous-versions//bb727005(v=technet.10)#EDAA
4
+ # Microsoft docs on hostname resolution.
5
+ # @since 2.0.0
2
6
  class VagrantHosts::Cap::SyncHosts::Windows < VagrantHosts::Cap::SyncHosts::Base
3
7
 
8
+ private
9
+
4
10
  def update_hosts
5
- host_entries = []
6
- all_hosts(@config).each do |(address, aliases)|
7
- aliases.each do |name|
8
- host_entries << "#{address} #{name}"
9
- end
10
- end
11
+ hosts_content = format_hosts
12
+ temp_file = [get_tempdir, 'vagrant-hosts.txt'].join('/')
13
+ upload_temphosts(hosts_content, temp_file)
14
+
15
+ @machine.communicate.sudo(<<-EOS)
16
+ Copy-Item `
17
+ -Path "#{temp_file}" `
18
+ -Destination "${Env:WINDIR}/System32/drivers/etc/hosts"
19
+ EOS
20
+ end
11
21
 
12
- script = []
13
- script << '$HostsPath = "$env:windir\\System32\\drivers\\etc\\hosts"'
14
- script << '$Hosts = gc $HostsPath'
22
+ # Return the path of the Windows temporary directory
23
+ def get_tempdir
24
+ sudo('Write-Host -Object $Env:TEMP')[:stdout].chomp.gsub("\\", '/')
25
+ end
15
26
 
16
- host_defs = "'" + host_entries.join('\', \'') + "'"
17
- script << "@(#{host_defs}) | % { if (\$Hosts -notcontains \$_) { Add-Content -Path \$HostsPath -Value \$_ }}"
27
+ def format_hosts
28
+ all_hosts(@config).inject('') do |str, (address, aliases)|
29
+ # Unlike UNIXy systems, Windows limits the number of host aliases
30
+ # that can appear on a line to 9.
31
+ aliases.each_slice(9) do |slice|
32
+ str << "#{address} #{slice.join(' ')}\r\n"
33
+ end
18
34
 
19
- @machine.communicate.sudo(script.join("; "))
35
+ str
36
+ end
20
37
  end
21
38
 
22
39
  # Windows needs a modification of the base method because Windows guest names
@@ -81,4 +98,19 @@ if ($success -eq $True) {exit 0} else {exit 1}
81
98
  @machine.communicate.sudo(powershell)
82
99
  end
83
100
 
101
+ # FIXME: de-duplicate with the facts implementation.
102
+ def sudo(cmd)
103
+ stdout = ''
104
+ stderr = ''
105
+
106
+ retval = @machine.communicate.sudo(cmd) do |type, data|
107
+ if type == :stderr
108
+ stderr << data
109
+ else
110
+ stdout << data
111
+ end
112
+ end
113
+
114
+ {:stdout => stdout, :stderr => stderr, :retval => retval}
115
+ end
84
116
  end
@@ -41,6 +41,15 @@ module VagrantHosts
41
41
  # @since 2.7.0
42
42
  attr_accessor :imports
43
43
 
44
+ # @!attribute [rw] change_hostname
45
+ # @return [TrueClass, FalseClass] When set to true, running the hosts
46
+ # provisioner on this VM will change the hostname of the machine to be
47
+ # the hostname configured or the name of the machine.
48
+ # Defaults to 'true'.
49
+ #
50
+ # @since 2.9.0
51
+ attr_accessor :change_hostname
52
+
44
53
  def initialize
45
54
  @hosts = []
46
55
  @exports = {}
@@ -48,6 +57,7 @@ module VagrantHosts
48
57
  @autoconfigure = UNSET_VALUE
49
58
  @add_localhost_hostnames = UNSET_VALUE
50
59
  @sync_hosts = UNSET_VALUE
60
+ @change_hostname = UNSET_VALUE
51
61
  end
52
62
 
53
63
  # Register a host for entry
@@ -81,6 +91,7 @@ module VagrantHosts
81
91
  end
82
92
 
83
93
  @sync_hosts = false if @sync_hosts == UNSET_VALUE
94
+ @change_hostname = true if @change_hostname == UNSET_VALUE
84
95
  end
85
96
 
86
97
  # @param other [VagrantHosts::Config]
@@ -19,6 +19,8 @@ module VagrantHosts
19
19
  def_model_attribute :exports
20
20
  # @!attribute [rw] exports
21
21
  def_model_attribute :imports
22
+ # @!attribute [rw] change_hostname
23
+ def_model_attribute :change_hostname
22
24
 
23
25
  # @private
24
26
  def configure_exports(config, val)
@@ -1,3 +1,3 @@
1
1
  module VagrantHosts
2
- VERSION = '2.8.3'.freeze
2
+ VERSION = '2.9.0'.freeze
3
3
  end
@@ -16,7 +16,6 @@ Gem::Specification.new do |gem|
16
16
  gem.email = ['adrien@somethingsinistral.net', 'source@sharpsteen.net']
17
17
  gem.homepage = 'https://github.com/oscar-stack/vagrant-hosts'
18
18
 
19
- gem.has_rdoc = true
20
19
  gem.license = 'Apache 2.0'
21
20
 
22
21
  gem.files = %x{git ls-files -z}.split("\0")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-hosts
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.3
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Thebo
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-08-16 00:00:00.000000000 Z
12
+ date: 2019-01-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -39,8 +39,7 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 2.14.0
42
- description: |2
43
- Manage static DNS entries and configuration for Vagrant guests.
42
+ description: " Manage static DNS entries and configuration for Vagrant guests.\n"
44
43
  email:
45
44
  - adrien@somethingsinistral.net
46
45
  - source@sharpsteen.net
@@ -105,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
104
  version: '0'
106
105
  requirements: []
107
106
  rubyforge_project:
108
- rubygems_version: 2.6.13
107
+ rubygems_version: 2.6.14.1
109
108
  signing_key:
110
109
  specification_version: 4
111
110
  summary: Manage static DNS on vagrant guests