vagrant-vmware-desktop 0.0.1 → 3.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vagrant-vmware-desktop.rb +190 -0
  3. data/lib/vagrant-vmware-desktop/action.rb +442 -0
  4. data/lib/vagrant-vmware-desktop/action/base_mac_to_ip.rb +55 -0
  5. data/lib/vagrant-vmware-desktop/action/boot.rb +26 -0
  6. data/lib/vagrant-vmware-desktop/action/check_existing_network.rb +35 -0
  7. data/lib/vagrant-vmware-desktop/action/check_vmware.rb +28 -0
  8. data/lib/vagrant-vmware-desktop/action/checkpoint.rb +86 -0
  9. data/lib/vagrant-vmware-desktop/action/clear_shared_folders.rb +25 -0
  10. data/lib/vagrant-vmware-desktop/action/common.rb +16 -0
  11. data/lib/vagrant-vmware-desktop/action/compatibility.rb +36 -0
  12. data/lib/vagrant-vmware-desktop/action/created.rb +20 -0
  13. data/lib/vagrant-vmware-desktop/action/destroy.rb +32 -0
  14. data/lib/vagrant-vmware-desktop/action/discard_suspended_state.rb +32 -0
  15. data/lib/vagrant-vmware-desktop/action/export.rb +29 -0
  16. data/lib/vagrant-vmware-desktop/action/fix_old_machine_id.rb +29 -0
  17. data/lib/vagrant-vmware-desktop/action/forward_ports.rb +110 -0
  18. data/lib/vagrant-vmware-desktop/action/halt.rb +27 -0
  19. data/lib/vagrant-vmware-desktop/action/import.rb +138 -0
  20. data/lib/vagrant-vmware-desktop/action/machine_lock.rb +26 -0
  21. data/lib/vagrant-vmware-desktop/action/message_already_running.rb +18 -0
  22. data/lib/vagrant-vmware-desktop/action/message_not_created.rb +18 -0
  23. data/lib/vagrant-vmware-desktop/action/message_not_running.rb +18 -0
  24. data/lib/vagrant-vmware-desktop/action/network.rb +339 -0
  25. data/lib/vagrant-vmware-desktop/action/package_vagrantfile.rb +46 -0
  26. data/lib/vagrant-vmware-desktop/action/prepare_forwarded_port_collision_params.rb +28 -0
  27. data/lib/vagrant-vmware-desktop/action/prepare_nfs_settings.rb +43 -0
  28. data/lib/vagrant-vmware-desktop/action/prepare_synced_folder_cleanup.rb +19 -0
  29. data/lib/vagrant-vmware-desktop/action/prune_forwarded_ports.rb +30 -0
  30. data/lib/vagrant-vmware-desktop/action/prune_nfs_exports.rb +22 -0
  31. data/lib/vagrant-vmware-desktop/action/running.rb +20 -0
  32. data/lib/vagrant-vmware-desktop/action/set_display_name.rb +37 -0
  33. data/lib/vagrant-vmware-desktop/action/share_folders.rb +97 -0
  34. data/lib/vagrant-vmware-desktop/action/snapshot_delete.rb +26 -0
  35. data/lib/vagrant-vmware-desktop/action/snapshot_restore.rb +26 -0
  36. data/lib/vagrant-vmware-desktop/action/snapshot_save.rb +26 -0
  37. data/lib/vagrant-vmware-desktop/action/suspend.rb +26 -0
  38. data/lib/vagrant-vmware-desktop/action/suspended.rb +24 -0
  39. data/lib/vagrant-vmware-desktop/action/vmx_modify.rb +39 -0
  40. data/lib/vagrant-vmware-desktop/action/wait_for_address.rb +31 -0
  41. data/lib/vagrant-vmware-desktop/action/wait_for_communicator_compat.rb +32 -0
  42. data/lib/vagrant-vmware-desktop/action/wait_for_vmx_halt.rb +35 -0
  43. data/lib/vagrant-vmware-desktop/cap/disk.rb +287 -0
  44. data/lib/vagrant-vmware-desktop/cap/provider.rb +37 -0
  45. data/lib/vagrant-vmware-desktop/cap/snapshot.rb +41 -0
  46. data/lib/vagrant-vmware-desktop/checkpoint_client.rb +203 -0
  47. data/lib/vagrant-vmware-desktop/config.rb +377 -0
  48. data/lib/vagrant-vmware-desktop/constants.rb +16 -0
  49. data/lib/vagrant-vmware-desktop/driver.rb +15 -0
  50. data/lib/vagrant-vmware-desktop/driver/base.rb +1356 -0
  51. data/lib/vagrant-vmware-desktop/errors.rb +342 -0
  52. data/lib/vagrant-vmware-desktop/guest_cap/linux/mount_vmware_shared_folder.rb +158 -0
  53. data/lib/vagrant-vmware-desktop/guest_cap/linux/verify_vmware_hgfs.rb +27 -0
  54. data/lib/vagrant-vmware-desktop/helper/lock.rb +26 -0
  55. data/lib/vagrant-vmware-desktop/helper/routing_table.rb +182 -0
  56. data/lib/vagrant-vmware-desktop/helper/vagrant_utility.rb +185 -0
  57. data/lib/vagrant-vmware-desktop/plugin.rb +148 -0
  58. data/lib/vagrant-vmware-desktop/provider.rb +96 -0
  59. data/lib/vagrant-vmware-desktop/setup_plugin.rb +24 -0
  60. data/lib/vagrant-vmware-desktop/synced_folder.rb +93 -0
  61. data/locales/en.yml +634 -0
  62. metadata +71 -17
@@ -0,0 +1,46 @@
1
+ require 'vagrant/util/template_renderer'
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ class PackageVagrantfile
7
+ # For TemplateRenderer
8
+ include Vagrant::Util
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ end
13
+
14
+ def call(env)
15
+ @env = env
16
+ create_metadata
17
+ @app.call(env)
18
+ end
19
+
20
+ # This method creates the auto-generated Vagrantfile at the root of the
21
+ # box. This Vagrantfile contains the MAC address so that the user doesn't
22
+ # have to worry about it.
23
+ #
24
+ # @note This is deprecated as the base mac is no longer required to be set.
25
+ # The method (and template) are preserved to easily allow enabling
26
+ # this functionality in the future for a different purpose if requried.
27
+ def create_vagrantfile
28
+ mac_addresses = @env[:machine].provider.driver.read_mac_addresses
29
+ base_mac = mac_addresses[mac_addresses.keys.min]
30
+ File.open(File.join(@env["export.temp_dir"], "Vagrantfile"), "w") do |f|
31
+ f.write(TemplateRenderer.render("package_Vagrantfile", {
32
+ base_mac: base_mac
33
+ }))
34
+ end
35
+ end
36
+
37
+ # Creates a metadata.json file which includes provider information
38
+ def create_metadata
39
+ File.open(File.join(@env["export.temp_dir"], "metadata.json"), "w") do |f|
40
+ f.write({provider: "vmware_desktop"}.to_json)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,28 @@
1
+ require "log4r"
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ # This prepares some variables for the environment hash so that
7
+ # forwarded port collision detection works properly with VMware.
8
+ class PrepareForwardedPortCollisionParams
9
+ include Common
10
+
11
+ def initialize(app, env)
12
+ @app = app
13
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::prepare_fp_collision")
14
+ end
15
+
16
+ def call(env)
17
+ # Get the forwared ports for all NAT devices and mark them as in use.
18
+ env[:port_collision_extra_in_use] = env[:machine].provider.driver.all_forwarded_ports
19
+
20
+ # Repair the forwarded port collisions
21
+ env[:port_collision_repair] = true
22
+
23
+ @app.call(env)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,43 @@
1
+ module HashiCorp
2
+ module VagrantVMwareDesktop
3
+ module Action
4
+ class PrepareNFSSettings
5
+ include Common
6
+
7
+ def initialize(app,env)
8
+ @app = app
9
+ @logger = Log4r::Logger.new("vagrant::action::vm::nfs")
10
+ end
11
+
12
+ def call(env)
13
+ @app.call(env)
14
+
15
+ env[:nfs_machine_ip] = env[:machine].provider.driver.read_ip(
16
+ env[:machine].provider_config.enable_vmrun_ip_lookup
17
+ )
18
+
19
+ # We just assume the machine IP is the first 3 octets
20
+ # with "1" for the last octet. Poor assumption but can
21
+ # be fixed later.
22
+ if env[:nfs_machine_ip]
23
+ host_ip = env[:nfs_machine_ip].split(".").map(&:to_i)
24
+ host_ip[3] = 1
25
+ env[:nfs_host_ip] = host_ip.join(".")
26
+ end
27
+
28
+ using_nfs = false
29
+ env[:machine].config.vm.synced_folders.each do |id, opts|
30
+ if opts[:nfs]
31
+ using_nfs = true
32
+ break
33
+ end
34
+ end
35
+
36
+ if using_nfs
37
+ raise Errors::NFSNoNetwork if !env[:nfs_machine_ip]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,19 @@
1
+ module HashiCorp
2
+ module VagrantVMwareDesktop
3
+ module Action
4
+ class PrepareSyncedFolderCleanup
5
+ include Common
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ env[:nfs_valid_ids] = env[:machine].provider.driver.read_running_vms
13
+
14
+ @app.call(env)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ require "log4r"
2
+
3
+ require "vagrant-vmware-desktop/helper/lock"
4
+
5
+ module HashiCorp
6
+ module VagrantVMwareDesktop
7
+ module Action
8
+ # This action prunes out forwarded ports that aren't in use any longer,
9
+ # usually by machines that don't exist anymore.
10
+ class PruneForwardedPorts
11
+ include Common
12
+
13
+ def initialize(app, env)
14
+ @app = app
15
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::prune_forwarded_ports")
16
+ end
17
+
18
+ def call(env)
19
+ @logger.info("Pruning forwarded ports...")
20
+ Helper::Lock.lock(env[:machine], "vmware-network") do
21
+ env[:machine].provider.driver.prune_forwarded_ports
22
+ end
23
+
24
+ # Carry on
25
+ @app.call(env)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ module HashiCorp
2
+ module VagrantVMwareDesktop
3
+ module Action
4
+ class PruneNFSExports
5
+ include Common
6
+
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ if env[:host]
13
+ vms = env[:machine].provider.driver.read_running_vms
14
+ env[:host].nfs_prune(vms)
15
+ end
16
+
17
+ @app.call(env)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ module HashiCorp
2
+ module VagrantVMwareDesktop
3
+ module Action
4
+ # This can be used with "Call" built-in to check if the machine
5
+ # is running.
6
+ class Running
7
+ include Common
8
+
9
+ def initialize(app, env)
10
+ @app = app
11
+ end
12
+
13
+ def call(env)
14
+ env[:result] = env[:machine].state.id == :running
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ require "log4r"
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ # This class sets the default displayName for the VM.
7
+ class SetDisplayName
8
+ include Common
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::vmx_modify")
13
+ end
14
+
15
+ def call(env)
16
+ default_name = "#{env[:root_path].basename.to_s}: #{env[:machine].name}"
17
+
18
+ @logger.info("Setting the default display name: #{default_name}")
19
+ env[:machine].provider.driver.vmx_modify do |vmx|
20
+ # Delete any alternate casings
21
+ vmx.keys.each do |key|
22
+ if key.downcase == "displayname"
23
+ vmx.delete(key)
24
+ end
25
+ end
26
+
27
+ # Set the displayName
28
+ vmx["displayname"] = default_name
29
+ end
30
+
31
+ # Carry on
32
+ @app.call(env)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,97 @@
1
+ require "log4r"
2
+
3
+ require "vagrant/util/scoped_hash_override"
4
+
5
+ module HashiCorp
6
+ module VagrantVMwareDesktop
7
+ module Action
8
+ # This takes the configured synced folders on the VM and shares them
9
+ # into the VMware guest.
10
+ class ShareFolders
11
+ include Common
12
+
13
+ include Vagrant::Util::ScopedHashOverride
14
+
15
+ def initialize(app, env)
16
+ @app = app
17
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::shared_folders")
18
+ end
19
+
20
+ def call(env)
21
+ # Move on first so that the machine is powered on
22
+ @app.call(env)
23
+
24
+ shared_folders = {}
25
+ env[:machine].config.vm.synced_folders.each do |id, data|
26
+ data = scoped_hash_override(data, :vmware)
27
+
28
+ # Ignore disabled shared folders
29
+ if data[:disabled]
30
+ @logger.info("Disabled shared folder, ignoring: #{id}")
31
+ next
32
+ end
33
+
34
+ # Ignore NFS shared folders as well
35
+ next if data[:nfs]
36
+
37
+ # Use it!
38
+ shared_folders[id] = data
39
+ end
40
+
41
+ if shared_folders.empty?
42
+ @logger.info("No shared folders. Doing nothing.")
43
+ return
44
+ end
45
+
46
+ # Verify that the machine can actually support sharing folders
47
+ # if we can.
48
+ if env[:machine].guest.capability?(:verify_vmware_hgfs)
49
+ @logger.info("Verifying HGFS is on the guest...")
50
+ if !env[:machine].guest.capability(:verify_vmware_hgfs)
51
+ raise Errors::GuestMissingHGFS
52
+ end
53
+ end
54
+
55
+ # Get the SSH info which we'll use later
56
+ ssh_info = env[:machine].ssh_info
57
+
58
+ # short guestpaths first, so we don't step on ourselves
59
+ shared_folders = shared_folders.dup.sort_by do |id, data|
60
+ if data[:guestpath]
61
+ data[:guestpath].length
62
+ else
63
+ # A long enough path to just do this at the end.
64
+ 10000
65
+ end
66
+ end
67
+
68
+ @logger.info("Preparing shared folders with VMX...")
69
+ env[:ui].info I18n.t("hashicorp.vagrant_vmware_desktop.sharing_folders")
70
+ env[:machine].provider.driver.enable_shared_folders
71
+ shared_folders.each do |id, data|
72
+ id = id.gsub('/', env[:machine].provider_config.shared_folder_special_char)
73
+ path = File.expand_path(data[:hostpath], env[:root_path])
74
+ guestpath = data[:guestpath]
75
+
76
+ env[:ui].info(I18n.t("hashicorp.vagrant_vmware_desktop.sharing_folder_single",
77
+ hostpath: path,
78
+ guestpath: guestpath))
79
+
80
+ env[:machine].provider.driver.share_folder(id, path)
81
+
82
+ # Remove trailing slashes
83
+ guestpath = guestpath.gsub(/\/+$/, "")
84
+
85
+ # Calculate the owner and group
86
+ data[:owner] ||= ssh_info[:username]
87
+ data[:group] ||= ssh_info[:username]
88
+
89
+ # Mount it!
90
+ env[:machine].guest.capability(
91
+ :mount_vmware_shared_folder, id, data[:guestpath], data)
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,26 @@
1
+ require "log4r"
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ # This snapshots the VMware machine.
7
+ class SnapshotDelete
8
+ include Common
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::snapshot_delete")
13
+ end
14
+
15
+ def call(env)
16
+ env[:ui].info(I18n.t(
17
+ "hashicorp.vagrant_vmware_desktop.snapshot_deleting",
18
+ name: env[:snapshot_name]))
19
+ env[:machine].provider.driver.snapshot_delete(env[:snapshot_name])
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require "log4r"
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ # This snapshots the VMware machine.
7
+ class SnapshotRestore
8
+ include Common
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::snapshot_restore")
13
+ end
14
+
15
+ def call(env)
16
+ env[:ui].info(I18n.t(
17
+ "hashicorp.vagrant_vmware_desktop.snapshot_restoring",
18
+ name: env[:snapshot_name]))
19
+ env[:machine].provider.driver.snapshot_revert(env[:snapshot_name])
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require "log4r"
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ # This snapshots the VMware machine.
7
+ class SnapshotSave
8
+ include Common
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::snapshot_save")
13
+ end
14
+
15
+ def call(env)
16
+ env[:ui].info(I18n.t(
17
+ "hashicorp.vagrant_vmware_desktop.snapshot_saving",
18
+ name: env[:snapshot_name]))
19
+ env[:machine].provider.driver.snapshot_take(env[:snapshot_name])
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require "log4r"
2
+
3
+ module HashiCorp
4
+ module VagrantVMwareDesktop
5
+ module Action
6
+ # This suspends the VMware machine.
7
+ class Suspend
8
+ include Common
9
+
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("hashicorp::provider::vmware::suspend")
13
+ end
14
+
15
+ def call(env)
16
+ if env[:machine].provider.state.id == :running
17
+ env[:ui].info(I18n.t("hashicorp.vagrant_vmware_desktop.suspending"))
18
+ env[:machine].provider.driver.suspend
19
+ end
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end