vagrant-vmware-desktop 3.0.4 → 3.0.5

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
  SHA256:
3
- metadata.gz: faa4d46aabdc2dfaf78c6c69cf57c3fd2b447192b78495333a1f73e1190d3ddc
4
- data.tar.gz: 9113eb7729d89bfaf3bb288f6fed490297d117ab20e196f0ea55b86c36f84211
3
+ metadata.gz: 9dd285ae1a9f79d6f50dd355d0c60754a313a78b37e3043da5ab92798a83d6d5
4
+ data.tar.gz: 9adb28da0c78efbd6b568354b576970cd4345674335525cd3018c3bc34299286
5
5
  SHA512:
6
- metadata.gz: 061b173c5a4d767ec3e8c27144487e85f79b538fa6828443c3068564c1886d2ec750a5cfad57e8e397c41c08cc86a894092462f0e6b0443ff8d3dd5ec5d00b4b
7
- data.tar.gz: 6e749f952549f49419af194a2e889d2c22861d254ea9cdefb0544c5450bb57f111e6f447a54427802815420875d923a4c5bebf6eb0c331dc42002eec8bac9f91
6
+ metadata.gz: 7ae03876f39b3d05f9aac2e1c1a6c1def94a8bb43a125c0352addb4883aa26efa1400d82066949c70bb781ab833cface015bd784a497e94c0f6256623f137a66
7
+ data.tar.gz: 66f3645377f66995c29354efb70876b8f78732ad530d8d6eaac1cdf4a02ce7d3a9e4d0d26f3e74e77ef41f899c3388c4909e21eef005698c942fbc2175b19cab
@@ -0,0 +1,72 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module HashiCorp
5
+ module VagrantVMwareDesktop
6
+ module Action
7
+ # This inspects the Vagrantfile provided by the
8
+ # box (if one was provided) and checks if it
9
+ # set the `base_mac` value. If it did, a warning
10
+ # will be generated to the user.
11
+ #
12
+ # NOTE: This action is merely a "best effort" at
13
+ # providing the warning. It is using non-public
14
+ # Vagrant internals to inspect box Vagrantfile.
15
+ # As such, any errors encountered will be ignored
16
+ # with only a debug log.
17
+ class BaseMacConfigWarning
18
+ include Common
19
+
20
+ def initialize(app, env)
21
+ @app = app
22
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::basemacwarning")
23
+ end
24
+
25
+ def call(env)
26
+ catch(:complete) do
27
+ begin
28
+ # Attempt to extract the vagrantfile loader
29
+ loader = env[:machine].vagrantfile.instance_variable_get(:@loader)
30
+ if !loader
31
+ @logger.debug("base_mac check in box vagrantfile failed - cannot access loader")
32
+ throw :complete
33
+ end
34
+
35
+ # Attempt to get the Vagrantfile source for the box
36
+ # provided Vagrantfile
37
+ source = loader.instance_variable_get(:@sources)&.keys&.last
38
+ if !source
39
+ @logger.debug("base_mac check in box vagrantfile failed - cannot get box source")
40
+ throw :complete
41
+ end
42
+
43
+ begin
44
+ # Attempt to load the partial config
45
+ partial = loader.partial_load(source)
46
+
47
+ # Only proceed to display warning if the base_mac value
48
+ # in the partial load matches the base_mac in the final
49
+ # config
50
+ throw :complete if partial.vm.base_mac != env[:machine].config.vm.base_mac
51
+
52
+ # Display the warning message
53
+ env[:ui].warn(
54
+ I18n.t(
55
+ "hashicorp.vagrant_vmware_desktop.box_base_mac_warning",
56
+ base_mac: env[:machine].config.vm.base_mac
57
+ )
58
+ )
59
+ rescue KeyError => err
60
+ @logger.debug("base_mac check in box vagrantfile failed - partial load failure #{err.class}: #{err}")
61
+ end
62
+ rescue => err
63
+ @logger.debug("base_mac check in box vagrantfile failed - #{err.class}: #{err}")
64
+ end
65
+ end
66
+
67
+ @app.call(env)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -16,6 +16,7 @@ module HashiCorp
16
16
  include Vagrant::Action::Builtin
17
17
  include Vagrant::Action::General
18
18
 
19
+ autoload :BaseMacConfigWarning, "vagrant-vmware-desktop/action/base_mac_config_warning"
19
20
  autoload :BaseMacToIp, "vagrant-vmware-desktop/action/base_mac_to_ip"
20
21
  autoload :Boot, "vagrant-vmware-desktop/action/boot"
21
22
  autoload :CheckExistingNetwork, "vagrant-vmware-desktop/action/check_existing_network"
@@ -329,7 +330,7 @@ module HashiCorp
329
330
 
330
331
  b.use Call, Running do |env, b2|
331
332
  if env[:result]
332
- b2.use MessageAlreadyRunning
333
+ b2.use action_provision
333
334
  next
334
335
  end
335
336
 
@@ -433,6 +434,8 @@ module HashiCorp
433
434
  b2.use SetDisplayName
434
435
  end
435
436
 
437
+ b2.use BaseMacConfigWarning
438
+
436
439
  b2.use action_start
437
440
  end
438
441
  b.use Checkpoint
@@ -17,7 +17,7 @@ module HashiCorp
17
17
  DEFAULT_DVD_BUS = "ide".freeze
18
18
  DEFAULT_DVD_DEVICE_TYPE = "cdrom-image"
19
19
  # Adapter types (from vmware-vdiskmanager -h)
20
- DISK_ADAPTER_TYPES = ["ide", "buslogic", "lsilogic"].map(&:freeze).freeze
20
+ DISK_ADAPTER_TYPES = ["ide", "buslogic", "lsilogic", "pvscsi"].map(&:freeze).freeze
21
21
  DEFAULT_ADAPTER_TYPE = "lsilogic".freeze
22
22
  # Disk types (from vmware-vdiskmanager -h)
23
23
  # 0 : single growable virtual disk
@@ -28,7 +28,7 @@ module HashiCorp
28
28
  # 5 : compressed disk optimized for streaming
29
29
  # 6 : thin provisioned virtual disk - ESX 3.x and above
30
30
  DEFAULT_DISK_TYPE = 0.freeze
31
- PRIMARY_DISK_SLOTS = ["scsi0:0", "sata0:0", "ide0:0"].map(&:freeze).freeze
31
+ PRIMARY_DISK_SLOTS = ["nvme0:0", "scsi0:0", "sata0:0", "ide0:0"].map(&:freeze).freeze
32
32
 
33
33
  def self.set_default_disk_ext(machine)
34
34
  DEFAULT_DISK_EXT
@@ -114,9 +114,13 @@ module HashiCorp
114
114
  if disk.primary
115
115
  PRIMARY_DISK_SLOTS.each do |primary_slot|
116
116
  disk_info = all_disks[primary_slot]
117
- @@logger.debug("disk info for primary slot #{primary_slot} - #{disk_info}")
118
- return disk_info if disk_info["present"].to_s.upcase == "TRUE"
117
+ if disk_info
118
+ @@logger.debug("disk info for primary slot #{primary_slot} - #{disk_info}")
119
+ return disk_info if disk_info["present"].to_s.upcase == "TRUE"
120
+ end
119
121
  end
122
+
123
+ nil
120
124
  else
121
125
  if disk.type == :dvd
122
126
  all_disks.values.detect { |v| v["filename"] == disk.file }
@@ -142,6 +146,8 @@ module HashiCorp
142
146
  current_disk = get_disk(disk, attached_disks)
143
147
 
144
148
  if current_disk.nil?
149
+ raise Errors::DiskPrimaryMissing if disk.primary
150
+
145
151
  disk_path = create_disk(machine, disk, attached_disks)
146
152
  else
147
153
  # If the path matches the disk name + some extra characters then
@@ -184,9 +190,9 @@ module HashiCorp
184
190
  if disk.provider_config && disk.provider_config.key?(:vmware_desktop)
185
191
  disk_provider_config = disk.provider_config[:vmware_desktop]
186
192
  if !BUS_TYPES.include?(disk_provider_config[:bus_type])
193
+ @@logger.warn("#{disk_provider_config[:bus_type]} is not valid. Should be one of " \
194
+ "#{BUS_TYPES.join(', ')}. Setting bus type to #{DEFAULT_DVD_BUS}")
187
195
  disk_provider_config[:bus_type] = DEFAULT_DVD_BUS
188
- @@logger.warn("#{disk_provider_config[:bus_type]} is not a valid. Should be one of " \
189
- "#{BUS_TYPES.join(', ')}! Setting adapter type to #{DEFAULT_DVD_BUS}")
190
196
  end
191
197
  end
192
198
 
@@ -213,18 +219,18 @@ module HashiCorp
213
219
  # Create a new disk if a file is not provided, or that path does not exist
214
220
  disk_filename = "#{disk_config.name}.#{disk_config.disk_ext}"
215
221
  disk_provider_config = {}
216
-
217
222
  if disk_config.provider_config && disk_config.provider_config.key?(:vmware_desktop)
218
223
  disk_provider_config = disk_config.provider_config[:vmware_desktop]
224
+
219
225
  if !DISK_ADAPTER_TYPES.include?(disk_provider_config[:adapter_type])
226
+ @@logger.warn("#{disk_provider_config[:adapter_type]} is not valid. Should be one " \
227
+ "of #{DISK_ADAPTER_TYPES.join(', ')}. Setting adapter type to #{DEFAULT_ADAPTER_TYPE}")
220
228
  disk_provider_config[:adapter_type] = DEFAULT_ADAPTER_TYPE
221
- @@logger.warn("#{disk_provider_config[:adapter_type]} is not a valid. Should be one " \
222
- "of #{DISK_ADAPTER_TYPES.join(', ')}! Setting adapter type to #{DEFAULT_ADAPTER_TYPE}")
223
229
  end
224
230
  if !BUS_TYPES.include?(disk_provider_config[:bus_type])
231
+ @@logger.warn("#{disk_provider_config[:bus_type]} is not valid. Should be one of " \
232
+ "#{BUS_TYPES.join(', ')}. Setting bus type to #{DEFAULT_BUS}")
225
233
  disk_provider_config[:bus_type] = DEFAULT_BUS
226
- @@logger.warn("#{disk_provider_config[:bus_type]} is not a valid. Should be one of " \
227
- "#{BUS_TYPES.join(', ')}! Setting adapter type to #{DEFAULT_BUS}")
228
234
  end
229
235
  end
230
236
  disk_type = DEFAULT_DISK_TYPE
@@ -0,0 +1,12 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module HashiCorp
5
+ module VagrantVMwareDesktop
6
+ module Cap
7
+ autoload :Disk, "vagrant-vmware-desktop/cap/disk"
8
+ autoload :Provider, "vagrant-vmware-desktop/cap/provider"
9
+ autoload :Snapshot, "vagrant-vmware-desktop/cap/snapshot"
10
+ end
11
+ end
12
+ end
@@ -33,6 +33,10 @@ module HashiCorp
33
33
  # Number of bytes in disk sector
34
34
  SECTOR_TO_BYTES = 512.freeze
35
35
 
36
+ # Number of seconds to allow the vmrun start command
37
+ # to complete
38
+ VMRUN_START_TIMEOUT = 300.freeze
39
+
36
40
  # Vagrant utility version requirement which must be satisfied to properly
37
41
  # work with this version of the plugin. This should be used when new API
38
42
  # end points are added to the utility to ensure expected functionality.
@@ -944,10 +948,10 @@ module HashiCorp
944
948
  # This will start the VMware machine.
945
949
  def start(gui=false)
946
950
  gui_arg = gui ? "gui" : "nogui"
947
- vmrun("start", host_vmx_path, gui_arg, retryable: true, timeout: 45)
951
+ vmrun("start", host_vmx_path, gui_arg, retryable: true, timeout: VMRUN_START_TIMEOUT)
948
952
  rescue Vagrant::Util::Subprocess::TimeoutExceeded
949
953
  # Sometimes vmrun just hangs. We give it a generous timeout
950
- # of 45 seconds, and then throw this.
954
+ # and then throw this.
951
955
  raise Errors::StartTimeout
952
956
  end
953
957
 
@@ -1,13 +1,11 @@
1
1
  # Copyright (c) HashiCorp, Inc.
2
2
  # SPDX-License-Identifier: MPL-2.0
3
3
 
4
- require "vagrant/util/platform"
5
-
6
- require "vagrant-vmware-desktop/driver/base"
7
-
8
4
  module HashiCorp
9
5
  module VagrantVMwareDesktop
10
6
  module Driver
7
+ autoload :Base, "vagrant-vmware-desktop/driver/base"
8
+
11
9
  # This returns a new driver for the given VM directory, using the
12
10
  # proper underlying platform driver.
13
11
  def self.create(vm_dir, config)
@@ -47,6 +47,10 @@ module HashiCorp
47
47
  error_key(:disk_not_resized_snapshot)
48
48
  end
49
49
 
50
+ class DiskPrimaryMissing < Base
51
+ error_key(:disk_primary_missing)
52
+ end
53
+
50
54
  class MissingNATDevice < Base
51
55
  error_key(:missing_nat_device)
52
56
  end
@@ -0,0 +1,13 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module HashiCorp
5
+ module VagrantVMwareDesktop
6
+ module GuestCap
7
+ module Linux
8
+ autoload :VerifyVMwareHGFS, "vagrant-vmware-desktop/guest_cap/linux/verify_vmware_hgfs"
9
+ autoload :MountVMwareSharedFolder, "vagrant-vmware-desktop/guest_cap/linux/mount_vmware_shared_folder"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: MPL-2.0
3
+
4
+ module HashiCorp
5
+ module VagrantVMwareDesktop
6
+ module GuestCap
7
+ autoload :Linux, "vagrant-vmware-desktop/guest_cap/linux"
8
+ end
9
+ end
10
+ end
@@ -179,6 +179,7 @@ module HashiCorp
179
179
  rescue Net::HTTPServiceUnavailable
180
180
  raise Errors::DriverAPIConnectionFailed
181
181
  rescue => err
182
+ @logger.debug("unexpected error - #{err.class}: #{err}")
182
183
  raise Errors::DriverAPIRequestUnexpectedError, error: err
183
184
  end
184
185
  end
@@ -19,11 +19,15 @@ module HashiCorp
19
19
  "vagrant-vmware-workstation"
20
20
  ].map(&:freeze).freeze
21
21
 
22
- lib_path = Pathname.new(File.expand_path("../vagrant-vmware-desktop", __FILE__))
23
- autoload :Action, lib_path.join("action")
24
- autoload :Driver, lib_path.join("driver")
25
- autoload :Errors, lib_path.join("errors")
26
- autoload :SudoHelper, lib_path.join("sudo_helper")
22
+ autoload :Action, "vagrant-vmware-desktop/action"
23
+ autoload :Cap, "vagrant-vmware-desktop/cap"
24
+ autoload :CheckpointClient, "vagrant-vmware-desktop/checkpoint_client"
25
+ autoload :Config, "vagrant-vmware-desktop/config"
26
+ autoload :Driver, "vagrant-vmware-desktop/driver"
27
+ autoload :Errors, "vagrant-vmware-desktop/errors"
28
+ autoload :Provider, "vagrant-vmware-desktop/provider"
29
+ autoload :SetupPlugin, "vagrant-vmware-desktop/setup_plugin"
30
+ autoload :SyncedFolder, "vagrant-vmware-desktop/synced_folder"
27
31
 
28
32
  # This initializes the i18n load path so that the plugin-specific
29
33
  # translations work.
data/locales/en.yml CHANGED
@@ -4,6 +4,20 @@
4
4
  en:
5
5
  hashicorp:
6
6
  vagrant_vmware_desktop:
7
+ box_base_mac_warning: |-
8
+ Detected guest `base_mac` value set within the Vagrantfile
9
+ included with this box. Having the `base_mac` value set
10
+ for VMware guests may cause issues properly identifying
11
+ the guest IP address due to MAC collisions.
12
+
13
+ Current value: %{base_mac}
14
+
15
+ To disable the `base_mac` value so it will be randomly
16
+ generated, set the value to nil in the Vagrantfile:
17
+
18
+ config.vm.base_mac = nil
19
+
20
+ https://www.vagrantup.com/docs/vagrantfile/machine_settings#config-vm-base_mac
7
21
  already_running: |-
8
22
  Machine is already running.
9
23
  booted_and_ready: |-
@@ -192,6 +206,8 @@ en:
192
206
  disk please remove snapshots associated with the VM.
193
207
 
194
208
  Path: %{path}
209
+ disk_primary_missing: |-
210
+ Failed to locate the primary disk for the guest.
195
211
  destroy_invalid_state: |-
196
212
  The VMware machine cannot be destroyed beacuse it is still
197
213
  running. Please make sure the machine is properly halted before
@@ -609,6 +625,8 @@ en:
609
625
  again. If this error persists, please open a new issue at:
610
626
 
611
627
  https://github.com/hashicorp/vagrant-vmware-desktop/issues
628
+
629
+ Encountered error: %{error}
612
630
  driver_api_invalid_response: |-
613
631
  Vagrant failed to properly process a result from the Vagrant VMware
614
632
  Utility driver. Please try to run the command again. If this error
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-vmware-desktop
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vagrant Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-13 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2025-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.13'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-its
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.25'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.25'
13
69
  description: Enables Vagrant to power VMware Workstation/Fusion machines.
14
70
  email: vagrant@hashicorp.com
15
71
  executables: []
@@ -18,6 +74,7 @@ extra_rdoc_files: []
18
74
  files:
19
75
  - lib/vagrant-vmware-desktop.rb
20
76
  - lib/vagrant-vmware-desktop/action.rb
77
+ - lib/vagrant-vmware-desktop/action/base_mac_config_warning.rb
21
78
  - lib/vagrant-vmware-desktop/action/base_mac_to_ip.rb
22
79
  - lib/vagrant-vmware-desktop/action/boot.rb
23
80
  - lib/vagrant-vmware-desktop/action/check_existing_network.rb
@@ -57,6 +114,7 @@ files:
57
114
  - lib/vagrant-vmware-desktop/action/wait_for_address.rb
58
115
  - lib/vagrant-vmware-desktop/action/wait_for_communicator_compat.rb
59
116
  - lib/vagrant-vmware-desktop/action/wait_for_vmx_halt.rb
117
+ - lib/vagrant-vmware-desktop/cap.rb
60
118
  - lib/vagrant-vmware-desktop/cap/disk.rb
61
119
  - lib/vagrant-vmware-desktop/cap/provider.rb
62
120
  - lib/vagrant-vmware-desktop/cap/snapshot.rb
@@ -66,6 +124,8 @@ files:
66
124
  - lib/vagrant-vmware-desktop/driver.rb
67
125
  - lib/vagrant-vmware-desktop/driver/base.rb
68
126
  - lib/vagrant-vmware-desktop/errors.rb
127
+ - lib/vagrant-vmware-desktop/guest_cap.rb
128
+ - lib/vagrant-vmware-desktop/guest_cap/linux.rb
69
129
  - lib/vagrant-vmware-desktop/guest_cap/linux/mount_vmware_shared_folder.rb
70
130
  - lib/vagrant-vmware-desktop/guest_cap/linux/verify_vmware_hgfs.rb
71
131
  - lib/vagrant-vmware-desktop/helper/lock.rb
@@ -80,7 +140,19 @@ homepage: http://www.vagrantup.com
80
140
  licenses:
81
141
  - MPL-2.0
82
142
  metadata: {}
83
- post_install_message:
143
+ post_install_message: |
144
+ Thank you for installing the Vagrant VMware Desktop
145
+ plugin. This plugin requires the Vagrant VMware
146
+ Utility to be installed. To learn more about the
147
+ Vagrant VMware Utility, please visit:
148
+
149
+ https://www.vagrantup.com/docs/providers/vmware/vagrant-vmware-utility
150
+
151
+ To install the Vagrant VMware Utility, please
152
+ download the appropriate installer for your
153
+ system from:
154
+
155
+ https://www.vagrantup.com/downloads/vmware
84
156
  rdoc_options: []
85
157
  require_paths:
86
158
  - lib