vagrant-windows-hyperv 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +22 -11
  4. data/lib/vagrant-windows-hyperv.rb +4 -1
  5. data/lib/vagrant-windows-hyperv/action.rb +0 -19
  6. data/lib/vagrant-windows-hyperv/communication/powershell.rb +7 -3
  7. data/lib/vagrant-windows-hyperv/errors.rb +20 -0
  8. data/lib/vagrant-windows-hyperv/monkey_patch/action.rb +45 -0
  9. data/lib/vagrant-windows-hyperv/monkey_patch/action/customize.rb +167 -0
  10. data/lib/vagrant-windows-hyperv/monkey_patch/action/import.rb +72 -0
  11. data/lib/vagrant-windows-hyperv/monkey_patch/action/provision.rb +5 -1
  12. data/lib/vagrant-windows-hyperv/monkey_patch/config.rb +51 -0
  13. data/lib/vagrant-windows-hyperv/monkey_patch/driver.rb +52 -0
  14. data/lib/vagrant-windows-hyperv/monkey_patch/machine.rb +3 -3
  15. data/lib/vagrant-windows-hyperv/monkey_patch/plugins/synced_folders/smb/synced_folders.rb +3 -0
  16. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/add_switch_to_vm.ps1 +38 -0
  17. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/create_switch.ps1 +75 -0
  18. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/find_vm_switch_name.ps1 +29 -0
  19. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/get_adapters.ps1 +17 -0
  20. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/import_vm.ps1 +136 -0
  21. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/switch_exist.ps1 +54 -0
  22. data/lib/vagrant-windows-hyperv/monkey_patch/scripts/utils/write_messages.ps1 +20 -0
  23. data/lib/vagrant-windows-hyperv/provisioner/puppet.rb +2 -2
  24. data/lib/vagrant-windows-hyperv/scripts/check_winrm.ps1 +7 -3
  25. data/lib/vagrant-windows-hyperv/scripts/upload_file.ps1 +29 -3
  26. data/lib/vagrant-windows-hyperv/scripts/utils/create_session.ps1 +19 -5
  27. data/lib/vagrant-windows-hyperv/version.rb +1 -1
  28. data/locales/en.yml +60 -3
  29. metadata +15 -3
  30. data/lib/vagrant-windows-hyperv/monkey_patch/util/powershell.rb +0 -37
@@ -0,0 +1,54 @@
1
+ #-------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Open Technologies, Inc.
3
+ # All Rights Reserved. Licensed under the MIT License.
4
+ #--------------------------------------------------------------------------
5
+
6
+ param (
7
+ [Parameter(Mandatory=$true)]
8
+ [string]$type,
9
+ [Parameter(Mandatory=$true)]
10
+ [string]$name
11
+ )
12
+
13
+ # Include the following modules
14
+ $Dir = Split-Path $script:MyInvocation.MyCommand.Path
15
+ . ([System.IO.Path]::Combine($Dir, "utils\write_messages.ps1"))
16
+
17
+ try {
18
+ if ($type -eq "external") {
19
+ $switch_exist = Get-VMSwitch -SwitchType "$type"
20
+ if ($switch_exist) {
21
+ $switch_name = $switch_exist.name
22
+ $resptHash = @{
23
+ message = "switch exist"
24
+ switch_name = "$switch_name"
25
+ }
26
+ Write-Output-Message $(ConvertTo-JSON $resptHash)
27
+ return
28
+ }
29
+ }
30
+
31
+ $switch_exist = (Get-VMSwitch -SwitchType "$type" `
32
+ | Select-Object Name `
33
+ | Where-Object { $_.name -eq $name })
34
+ if ($switch_exist) {
35
+ $switch_name = $switch_exist.name
36
+ $resptHash = @{
37
+ message = "switch exist"
38
+ switch_name = "$switch_name"
39
+ }
40
+ } else {
41
+ $resptHash = @{
42
+ message = "switch not exist"
43
+ switch_name = "$name"
44
+ }
45
+ }
46
+ Write-Output-Message $(ConvertTo-JSON $resptHash)
47
+ return
48
+ } catch {
49
+ $errortHash = @{
50
+ type = "PowerShellError"
51
+ error = "$_"
52
+ }
53
+ Write-Error-Message $(ConvertTo-JSON $errortHash)
54
+ }
@@ -0,0 +1,20 @@
1
+ #-------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Open Technologies, Inc.
3
+ # All Rights Reserved. Licensed under the MIT License.
4
+ #--------------------------------------------------------------------------
5
+
6
+ function Write-Error-Message($message) {
7
+ $error_message = @{
8
+ error = "$message"
9
+ }
10
+ Write-Host "===Begin-Error==="
11
+ $result = ConvertTo-json $error_message
12
+ Write-Host $result
13
+ Write-Host "===End-Error==="
14
+ }
15
+
16
+ function Write-Output-Message($message) {
17
+ Write-Host "===Begin-Output==="
18
+ Write-Host $message
19
+ Write-Host "===End-Output==="
20
+ }
@@ -42,7 +42,7 @@ module VagrantPlugins
42
42
  module_paths.unshift("/ProgramData/PuppetLabs/puppet/etc/modules")
43
43
 
44
44
  # Add the command line switch to add the module path
45
- options << "--modulepath \"#{module_paths.join(':')}\""
45
+ options << "--modulepath \"#{module_paths.join(';')}\""
46
46
  end
47
47
 
48
48
  if @hiera_config_path
@@ -64,7 +64,7 @@ module VagrantPlugins
64
64
  if !config.facter.empty?
65
65
  facts = []
66
66
  config.facter.each do |key, value|
67
- facts << "FACTER_#{key}='#{value}'"
67
+ facts << "FACTER_#{key}=\"#{value}\""
68
68
  end
69
69
 
70
70
  facter = "#{facts.join(" ")} "
@@ -16,8 +16,12 @@ $presentDir = Split-Path -parent $PSCommandPath
16
16
  try {
17
17
  $response = Create-Remote-Session $guest_ip $username $password
18
18
  if (!$response["session"] -and $response["error"]) {
19
- Write-Host $response["error"]
20
- return
19
+ $session_message = $response['error']
20
+ $resultHash = @{
21
+ message = "$session_message"
22
+ }
23
+ Write-Output-Message $resultHash
24
+ return
21
25
  }
22
26
  function Remote-Execute() {
23
27
  $winrm_state = ""
@@ -34,7 +38,7 @@ try {
34
38
  } catch {
35
39
  $errortHash = @{
36
40
  type = "PowerShellError"
37
- error ="Failed to copy file $_"
41
+ error ="$_"
38
42
  }
39
43
  Write-Error-Message $errortHash
40
44
  return
@@ -20,9 +20,35 @@ $presentDir = Split-Path -parent $PSCommandPath
20
20
  try {
21
21
  # Enable Guest Service Interface if they are disabled
22
22
  try {
23
- Get-VM -Id $vm_id | Get-VMIntegrationService -Name "Guest Service Interface" | Enable-VMIntegrationService -Passthru
23
+ $Operational = $null
24
+ $maxAttempt = 5
25
+ do {
26
+ $maxAttempt = $maxAttempt - 1
27
+ $Operational = Get-VM -Id $vm_id | Get-VMIntegrationService -Name "Guest Service Interface"
28
+ if (-not $Operational.Enabled) {
29
+ Get-VM -Id $vm_id | Get-VMIntegrationService -Name "Guest Service Interface" | Enable-VMIntegrationService -Passthru
30
+ sleep 1
31
+ }
32
+ }
33
+ While ( !$Operational.Enabled -and $maxAttempt -gt 0 )
34
+ }
35
+ catch {
36
+ $errortHash = @{
37
+ type = "PowerShellError"
38
+ error = "$_"
39
+ }
40
+ Write-Error-Message $errortHash
41
+ return
42
+ }
43
+
44
+ if (!$Operational -or !$Operational.ENabled) {
45
+ $errortHash = @{
46
+ type = "PowerShellError"
47
+ error = "Could not enable Guest Service Interface."
24
48
  }
25
- catch { }
49
+ Write-Error-Message $errortHash
50
+ return
51
+ }
26
52
 
27
53
  function Upload-FIle-To-VM($host_path, $guest_path, $machine) {
28
54
  Write-Host $host_path
@@ -35,7 +61,7 @@ try {
35
61
  if (!$response["session"] -and $response["error"]) {
36
62
  $errortHash = @{
37
63
  type = "PowerShellError"
38
- message = $response["error"]
64
+ error = $response["error"]
39
65
  }
40
66
  Write-Error-Message $errorResult
41
67
  return
@@ -13,6 +13,8 @@ function Create-Remote-Session($guest_ip, $username, $password) {
13
13
  $count = 0
14
14
  $session_error = ""
15
15
  $session = ""
16
+ $max_attempts = 5
17
+ $sleep_for_sec = 5
16
18
  do {
17
19
  $count++
18
20
  try {
@@ -20,15 +22,27 @@ function Create-Remote-Session($guest_ip, $username, $password) {
20
22
  $session_error = ""
21
23
  }
22
24
  catch {
23
- Start-Sleep -s 1
24
- $session_error = $_
25
- $session = ""
25
+ $session_error = $_.Exception.message
26
+ if ($_.FullyQualifiedErrorID -eq "AccessDenied,PSSessionOpenFailed") {
27
+ $count = $max_attempts
28
+ }
29
+ elseif ($_FullyQualifiedErrorID -eq "CannotUseIPAddress,PSSessionOpenFailed") {
30
+ $count = $max_attempts
31
+ }
32
+ elseif ( $_.FullyQualifiedErrorID -eq "WinRMOperationTimeout,PSSessionOpenFailed") {
33
+ Start-Sleep -s $sleep_for_sec
34
+ $session = ""
35
+ }
36
+ else {
37
+ Start-Sleep -s $sleep_for_sec
38
+ $session = ""
39
+ }
26
40
  }
27
41
  }
28
- while (!$session -and $count -lt 20)
42
+ while (!$session -and $count -lt $max_attempts)
29
43
 
30
44
  return @{
31
45
  session = $session
32
- error = $session_error
46
+ error = "$session_error"
33
47
  }
34
48
  }
@@ -5,6 +5,6 @@
5
5
 
6
6
  module VagrantPlugins
7
7
  module VagrantHyperV
8
- VERSION = "1.0.2"
8
+ VERSION = "1.0.3"
9
9
  end
10
10
  end
@@ -5,11 +5,68 @@ en:
5
5
  RDP session and enter the Virtual Machine's password.
6
6
  message_rdp_not_ready: |-
7
7
  Hyper-V machine isn't running. Can't RDP in!
8
+ choose_adapter: |-
9
+ Please select a adapter from the available network adapters.
10
+ choose_switch: |-
11
+ Please choose a switch to attach to your Hyper-V instance.
12
+ If none of these are appropriate, please open the Hyper-V manager
13
+ to create a new virtual switch.
14
+ virtual_switch_info: |-
15
+ Vagrant works well with Hyper-V's External Switch. If you are using an Internal switch
16
+ please make sure that this switch is properly configured for network connection.
17
+ The virtual machine must be reachable from the host for Vagrant to work.
18
+ no_private_switch: |-
19
+ Vagrant cannot work with Hyper-V's private switch, since this configuration
20
+ will not allow the host to communicate with the VM. Please refer to Hyper-V's
21
+ virtual switch configuration for more information.
22
+ external_switch_exists: |-
23
+ Hyper-V allows to have only one external switch. There is one already available.
24
+ Please check the Virtual Switch Manager in Hyper-V Manager.
25
+ Ignoring the customization and moving on.
26
+ private_switch_not_allowed: |-
27
+ Vagrant cannot work with Hyper-V's private switch, since this configuration
28
+ will not allow the host to communicate with the VM. Please refer to Hyper-V's
29
+ virtual switch configuration for more information.
30
+ internal_switch_warn: |-
31
+ Vagrant works best with Hyper-V's External Switch. If you are using an
32
+ Internal switch please make sure that this switch is properly configured
33
+ for network connection. The virtual machine must be reachable from the
34
+ host for Vagrant to work.
35
+ net_adapter_warn: |-
36
+ You seems to have provided an invalid adapter, please choose one from
37
+ the available list of adapters.
38
+ creating_switch: |-
39
+ Creating a virtual switch of type "%{type}" with name "%{name}"
40
+ add_switch_to_vm: |-
41
+ Setting the VM to use a Virtual switch of type "%{type}" with name "%{name}"
42
+
8
43
  errors:
9
44
  ssh_not_available: |-
10
45
  SSH is available for non windows guest. Vagrant detected guest to be %{guest}
11
46
  rdp_not_available: |-
12
47
  RDP is available for windows guest. Vagrant detected guest to be %{guest}
13
- win_rm_not_ready: |-
14
- WinRM is not enabled in the remot guest. Vagrant-Windows-HyperV uses remote PowerShell scripts
15
- to communicate to the remote machine. Please check the same and try again.
48
+ win_rm_not_available: |-
49
+ Vagrant failed to communicate to the VM using powershell. The operation failed
50
+ with the following message.
51
+ %{message}
52
+ no_network_adapter: |-
53
+ No Network adapter is connected to this VM. Please use the HyperV Manage to add a network adapter.
54
+ no_switches: |-
55
+ There are no virtual switches created for Hyper-V! Please open
56
+ the Hyper-V Manager, go to the "Virtual Switch Manager", and create
57
+ at least one virtual switch.
58
+ A virtual switch is required for Vagrant to create a Hyper-V
59
+ machine that is connected to a network so it can access it.
60
+ You can also use the customize option to add a virtual switch to this VM.
61
+ For more help, please see the documentation on the Vagrant website
62
+ for Hyper-V.
63
+ network_down: |-
64
+ The host network seems to be down, this generally happens while creating an
65
+ external network, it looked like Hyper-V manager took a long time to bring back
66
+ the network. Please check the network connection and try again.
67
+ switch_not_found: |-
68
+ A Virtual switch of type "%{type}" and name "%{name}" is not found, please
69
+ create the same using Hyper-V "Virtual Switch Manager".
70
+ external_switch_exist: |-
71
+ Hyper-V allows to have only one external switch. There already exist one
72
+ with name "%{name}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-windows-hyperv
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - MSOpenTech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-02 00:00:00.000000000 Z
11
+ date: 2014-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -100,6 +100,7 @@ executables: []
100
100
  extensions: []
101
101
  extra_rdoc_files: []
102
102
  files:
103
+ - CHANGELOG.md
103
104
  - example_box/metadata.json
104
105
  - Gemfile
105
106
  - lib/vagrant-windows-hyperv/action/export.rb
@@ -113,10 +114,21 @@ files:
113
114
  - lib/vagrant-windows-hyperv/errors.rb
114
115
  - lib/vagrant-windows-hyperv/guest/cap/halt.rb
115
116
  - lib/vagrant-windows-hyperv/guest/windows.rb
117
+ - lib/vagrant-windows-hyperv/monkey_patch/action/customize.rb
118
+ - lib/vagrant-windows-hyperv/monkey_patch/action/import.rb
116
119
  - lib/vagrant-windows-hyperv/monkey_patch/action/provision.rb
120
+ - lib/vagrant-windows-hyperv/monkey_patch/action.rb
121
+ - lib/vagrant-windows-hyperv/monkey_patch/config.rb
122
+ - lib/vagrant-windows-hyperv/monkey_patch/driver.rb
117
123
  - lib/vagrant-windows-hyperv/monkey_patch/machine.rb
118
124
  - lib/vagrant-windows-hyperv/monkey_patch/plugins/synced_folders/smb/synced_folders.rb
119
- - lib/vagrant-windows-hyperv/monkey_patch/util/powershell.rb
125
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/add_switch_to_vm.ps1
126
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/create_switch.ps1
127
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/find_vm_switch_name.ps1
128
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/get_adapters.ps1
129
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/import_vm.ps1
130
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/switch_exist.ps1
131
+ - lib/vagrant-windows-hyperv/monkey_patch/scripts/utils/write_messages.ps1
120
132
  - lib/vagrant-windows-hyperv/plugin.rb
121
133
  - lib/vagrant-windows-hyperv/provider.rb
122
134
  - lib/vagrant-windows-hyperv/provisioner/chef_solo.rb
@@ -1,37 +0,0 @@
1
- #-------------------------------------------------------------------------
2
- # Copyright (c) Microsoft Open Technologies, Inc.
3
- # All Rights Reserved. Licensed under the Apache 2.0 License.
4
- #--------------------------------------------------------------------------
5
-
6
- require "#{Vagrant::source_root}/lib/vagrant/util/which"
7
- require "#{Vagrant::source_root}/lib/vagrant/util/subprocess"
8
-
9
- module Vagrant
10
- module Util
11
- # Executes PowerShell scripts.
12
- #
13
- # This is primarily a convenience wrapper around Subprocess that
14
- # properly sets powershell flags for you.
15
- class PowerShell
16
- # Monkey patch to fix a bug with Vagrant 1.5.1.
17
- # https://github.com/mitchellh/vagrant/issues/3192.
18
- # This has been fixed in 1.5.2. by
19
- # https://github.com/jyggen/vagrant/commit/d7320399e2497aae9b9c3fa83d94b7210d21bfb5
20
- def self.execute(path, *args, **opts, &block)
21
- command = [
22
- "powershell",
23
- "-NoProfile",
24
- "-ExecutionPolicy", "Bypass",
25
- "&('#{path}')",
26
- args
27
- ].flatten
28
-
29
- # Append on the options hash since Subprocess doesn't use
30
- # Ruby 2.0 style options yet.
31
- command << opts
32
-
33
- Subprocess.execute(*command, &block)
34
- end
35
- end
36
- end
37
- end