vagrant-hosts 2.8.3 → 2.9.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: 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