kitchen-hyperv 0.1.7 → 0.1.8
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +15 -0
- data/lib/kitchen/driver/hyperv.rb +24 -2
- data/lib/kitchen/driver/hyperv_version.rb +1 -1
- data/lib/kitchen/driver/powershell.rb +38 -0
- data/support/hyperv.ps1 +114 -63
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 00ebbd881261a4c181dd20609af6dbe637e31a9f
|
|
4
|
+
data.tar.gz: f72840dd9fe7aa7656f587a308f2083ad367f3be
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3570223eaed7e14b5de2d3882e5c92db9ed7794253c5fcece900cd5285cd4a623188fe493342201431961a6e8742406f59c92015a61843ae35bb257ab0095e86
|
|
7
|
+
data.tar.gz: 96186575c571efaae757e730d5eb6c674cdd6414264bdd386a97d66a1a0220dca8a361541976028d96e7e791cae85f2649232b25e73c4f5d767998a76d384d57
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# 0.1.8 / 12-03-2015
|
|
2
|
+
|
|
3
|
+
* [PR #15](https://github.com/test-kitchen/kitchen-hyperv/pull/15) : Dynamic Memory support
|
|
4
|
+
* [PR #17](https://github.com/test-kitchen/kitchen-hyperv/pull/17) : File copy support
|
|
5
|
+
* [PR #19](https://github.com/test-kitchen/kitchen-hyperv/pull/19) : Explict import of hyper-v module and delay in getting ip (wait for DHCP)
|
|
6
|
+
* [PR #20](https://github.com/test-kitchen/kitchen-hyperv/pull/20) : Doc the required WinRM Settings
|
|
7
|
+
|
|
1
8
|
# 0.1.7 / 07-14-2015
|
|
2
9
|
|
|
3
10
|
* [PR #8](https://github.com/test-kitchen/kitchen-hyperv/pull/8) : Add support for 64 bit ruby
|
data/README.md
CHANGED
|
@@ -33,6 +33,10 @@ driver:
|
|
|
33
33
|
* amount of RAM to assign to each virtual machine. Defaults to 536,870,912.
|
|
34
34
|
* processor_count
|
|
35
35
|
* number of virtual processors to assign to each virtual machine. Defaults to 2.
|
|
36
|
+
* dynamic_memory
|
|
37
|
+
* if true, the amount of memory allocated to a virtual machine is adjusted by Hyper-V dynamically. Defaults to false.
|
|
38
|
+
* dynamic_memory_min_bytes / dynamic_memory_max_bytes
|
|
39
|
+
* The minimum and maximum amount of memory Hyper-V will allocate to a virtual machine if dynamic_memory is enabled. Defaults to 536,870,912 and 2,147,483,648 (512MB-2GB)
|
|
36
40
|
* ip_address
|
|
37
41
|
* IP address for the virtual machine. If the VM is not on a network with DHCP, this can be used to assign an IP that can be reached from the host machine.
|
|
38
42
|
* vm_switch
|
|
@@ -44,6 +48,17 @@ driver:
|
|
|
44
48
|
* disk_type
|
|
45
49
|
* The type of virtual disk to create, .VHD or .VHDX. Defaults to the file extension of the parent virtual hard drive.
|
|
46
50
|
|
|
51
|
+
## Image Configuration
|
|
52
|
+
|
|
53
|
+
The following changes need to be made to a Windows image that is going to be used for testing. This is not an exhaustive list and, your milage may vary.
|
|
54
|
+
|
|
55
|
+
#### WinRM
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
winrm set winrm/config/client/auth @{Basic="true"}
|
|
59
|
+
winrm set winrm/config/service/auth @{Basic="true"}
|
|
60
|
+
winrm set winrm/config/service @{AllowUnencrypted="true"}
|
|
61
|
+
```
|
|
47
62
|
## Contributing
|
|
48
63
|
|
|
49
64
|
1. Fork it ( https://github.com/[my-github-username]/kitchen-hyperv/fork )
|
|
@@ -37,12 +37,15 @@ module Kitchen
|
|
|
37
37
|
default_config :parent_vhd_folder
|
|
38
38
|
default_config :parent_vhd_name
|
|
39
39
|
default_config :memory_startup_bytes, 536_870_912
|
|
40
|
+
default_config :dynamic_memory_min_bytes, 536_870_912
|
|
41
|
+
default_config :dynamic_memory_max_bytes, 2_147_483_648
|
|
42
|
+
default_config :dynamic_memory, false
|
|
40
43
|
default_config :processor_count, 2
|
|
41
44
|
default_config :ip_address
|
|
42
45
|
default_config :vm_switch
|
|
43
46
|
default_config :iso_path
|
|
44
47
|
default_config :vm_generation, 1
|
|
45
|
-
default_config :disk_type do |driver|
|
|
48
|
+
default_config :disk_type do |driver|
|
|
46
49
|
File.extname(driver[:parent_vhd_name])
|
|
47
50
|
end
|
|
48
51
|
|
|
@@ -56,6 +59,7 @@ module Kitchen
|
|
|
56
59
|
update_state
|
|
57
60
|
mount_virtual_machine_iso
|
|
58
61
|
instance.transport.connection(@state).wait_until_ready
|
|
62
|
+
copy_vm_files
|
|
59
63
|
info("Hyper-V instance #{instance.to_str} created.")
|
|
60
64
|
end
|
|
61
65
|
|
|
@@ -80,6 +84,13 @@ module Kitchen
|
|
|
80
84
|
def validate_vm_settings
|
|
81
85
|
raise "Missing parent_vhd_folder" unless config[:parent_vhd_folder]
|
|
82
86
|
raise "Missing parent_vhd_name" unless config[:parent_vhd_name]
|
|
87
|
+
if config[:dynamic_memory]
|
|
88
|
+
startup_bytes = config[:memory_startup_bytes]
|
|
89
|
+
min = config[:dynamic_memory_min_bytes]
|
|
90
|
+
max = config[:dynamic_memory_max_bytes]
|
|
91
|
+
memory_valid = startup_bytes.between?(min, max)
|
|
92
|
+
raise "memory_startup_bytes (#{startup_bytes}) must fall within dynamic memory range (#{min}-#{max})" unless memory_valid
|
|
93
|
+
end
|
|
83
94
|
return if config[:vm_switch]
|
|
84
95
|
config[:vm_switch] = (run_ps vm_default_switch_ps)['Name']
|
|
85
96
|
end
|
|
@@ -100,8 +111,9 @@ module Kitchen
|
|
|
100
111
|
info('Checking for existing virtual machine.')
|
|
101
112
|
return false unless @state.key?(:id) && !@state[:id].nil?
|
|
102
113
|
existing_vm = run_ps ensure_vm_running_ps
|
|
114
|
+
return false if existing_vm.nil? || existing_vm['Id'].nil?
|
|
103
115
|
info("Found an exising VM with an ID: #{existing_vm['Id']}")
|
|
104
|
-
return true
|
|
116
|
+
return true
|
|
105
117
|
#fail('Failed to start existing VM.')
|
|
106
118
|
end
|
|
107
119
|
|
|
@@ -131,6 +143,16 @@ module Kitchen
|
|
|
131
143
|
@state[:id] = new_vm_object['Id']
|
|
132
144
|
info("Created virtual machine for #{instance.name}.")
|
|
133
145
|
end
|
|
146
|
+
|
|
147
|
+
def copy_vm_files
|
|
148
|
+
|
|
149
|
+
return if config[:copy_vm_files].nil?
|
|
150
|
+
info("Copying files to virtual machine")
|
|
151
|
+
config[:copy_vm_files].each do |file_info|
|
|
152
|
+
run_ps copy_vm_file_ps(file_info[:source], file_info[:dest])
|
|
153
|
+
end
|
|
154
|
+
info("Copied files to virtual machine")
|
|
155
|
+
end
|
|
134
156
|
|
|
135
157
|
def update_state
|
|
136
158
|
vm_details
|
|
@@ -99,6 +99,9 @@ module Kitchen
|
|
|
99
99
|
VHDPath = "#{differencing_disk_path}"
|
|
100
100
|
SwitchName = "#{config[:vm_switch]}"
|
|
101
101
|
ProcessorCount = #{config[:processor_count]}
|
|
102
|
+
UseDynamicMemory = "#{config[:dynamic_memory]}"
|
|
103
|
+
DynamicMemoryMinBytes = #{config[:dynamic_memory_min_bytes]}
|
|
104
|
+
DynamicMemoryMaxBytes = #{config[:dynamic_memory_max_bytes]}
|
|
102
105
|
}
|
|
103
106
|
New-KitchenVM @NewVMParams | ConvertTo-Json
|
|
104
107
|
NEWVM
|
|
@@ -141,6 +144,41 @@ module Kitchen
|
|
|
141
144
|
mount-vmiso -id "#{@state[:id]}" -Path #{config[:iso_path]}
|
|
142
145
|
MOUNTISO
|
|
143
146
|
end
|
|
147
|
+
|
|
148
|
+
def copy_vm_file_ps(source, dest)
|
|
149
|
+
<<-FILECOPY
|
|
150
|
+
Function CopyFile ($VM, [string]$SourcePath, [string]$DestPath) {
|
|
151
|
+
#Write-Host "Copying file to VM - Source: $SourcePath Destination $DestPath"
|
|
152
|
+
$VM | Copy-VMFile -SourcePath $SourcePath -DestinationPath $DestPath -CreateFullPath -FileSource Host -Force
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
$sourceLocation = '#{source}'
|
|
156
|
+
$destinationLocation = '#{dest}'
|
|
157
|
+
$vmId = '#{@state[:id]}'
|
|
158
|
+
If (Test-Path $sourceLocation) {
|
|
159
|
+
$vm = Get-VM -ID $vmId
|
|
160
|
+
$service = 'Guest Service Interface'
|
|
161
|
+
|
|
162
|
+
If ((Get-VMIntegrationService -Name $service -VM $vm).Enabled -ne $true) {
|
|
163
|
+
Enable-VMIntegrationService -Name $service -VM $vm
|
|
164
|
+
Start-Sleep -Seconds 3
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
If ((Get-Item $sourceLocation) -is [System.IO.DirectoryInfo]) {
|
|
168
|
+
ForEach ($item in (Get-ChildItem -Path $sourceLocation -File)) {
|
|
169
|
+
$destFullPath = (Join-Path $destinationLocation $item.Name)
|
|
170
|
+
CopyFile $vm $item.FullName $destFullPath
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
Else {
|
|
174
|
+
CopyFile $vm $sourceLocation $destinationLocation
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
Write-Error "Source file path does not exist: $sourceLocation"
|
|
179
|
+
}
|
|
180
|
+
FILECOPY
|
|
181
|
+
end
|
|
144
182
|
end
|
|
145
183
|
end
|
|
146
184
|
end
|
data/support/hyperv.ps1
CHANGED
|
@@ -1,60 +1,90 @@
|
|
|
1
|
+
#requires -Version 2 -Modules Hyper-V
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
#implicitly import hyperv module to avoid powercli cmdlets
|
|
4
|
+
if((Get-Module -Name hyperv) -ne $null)
|
|
5
|
+
{
|
|
6
|
+
Remove-Module -Name hyperv
|
|
7
|
+
Import-Module -Name hyperv
|
|
8
|
+
}
|
|
9
|
+
else
|
|
10
|
+
{
|
|
11
|
+
Import-Module -Name hyperv
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
$ProgressPreference = 'SilentlyContinue'
|
|
3
15
|
|
|
4
16
|
|
|
5
17
|
function New-DifferencingDisk
|
|
6
18
|
{
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
19
|
+
[cmdletbinding()]
|
|
20
|
+
param ([string[]]$Path, [string]$ParentPath)
|
|
21
|
+
if (-not (Test-Path $Path))
|
|
10
22
|
{
|
|
11
|
-
|
|
23
|
+
$null = new-vhd @psboundparameters -Differencing
|
|
12
24
|
}
|
|
13
25
|
}
|
|
14
26
|
|
|
15
27
|
function Assert-VmRunning
|
|
16
28
|
{
|
|
17
|
-
|
|
18
|
-
|
|
29
|
+
[cmdletbinding()]
|
|
30
|
+
param([string]$Id)
|
|
19
31
|
|
|
20
|
-
if ([string]::IsNullOrEmpty($
|
|
32
|
+
if ([string]::IsNullOrEmpty($Id))
|
|
21
33
|
{
|
|
22
|
-
|
|
34
|
+
$Output = [pscustomobject]@{
|
|
35
|
+
Name = ''
|
|
36
|
+
State = ''
|
|
37
|
+
}
|
|
23
38
|
}
|
|
24
39
|
else
|
|
25
40
|
{
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
$Output = Get-VM -Id $Id |
|
|
42
|
+
ForEach-Object -Process {
|
|
43
|
+
if ($_.State -notlike 'Running')
|
|
44
|
+
{
|
|
45
|
+
$_ |
|
|
46
|
+
Start-VM -passthru
|
|
47
|
+
}
|
|
48
|
+
else
|
|
49
|
+
{
|
|
50
|
+
$_
|
|
51
|
+
}
|
|
36
52
|
} |
|
|
37
|
-
|
|
53
|
+
Select-Object -Property Name, Id, State
|
|
38
54
|
}
|
|
39
|
-
$
|
|
55
|
+
$Output
|
|
40
56
|
}
|
|
41
57
|
|
|
42
58
|
function New-KitchenVM
|
|
43
59
|
{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
60
|
+
[cmdletbinding()]
|
|
61
|
+
param (
|
|
62
|
+
$Generation = 1,
|
|
47
63
|
$MemoryStartupBytes,
|
|
48
64
|
$Name,
|
|
49
65
|
$Path,
|
|
50
66
|
$VHDPath,
|
|
51
67
|
$SwitchName,
|
|
52
|
-
$ProcessorCount
|
|
68
|
+
$ProcessorCount,
|
|
69
|
+
$UseDynamicMemory,
|
|
70
|
+
$DynamicMemoryMinBytes,
|
|
71
|
+
$DynamicMemoryMaxBytes
|
|
53
72
|
)
|
|
54
73
|
$null = $psboundparameters.remove('ProcessorCount')
|
|
74
|
+
$null = $psboundparameters.remove('UseDynamicMemory')
|
|
75
|
+
$null = $psboundparameters.remove('DynamicMemoryMinBytes')
|
|
76
|
+
$null = $psboundparameters.remove('DynamicMemoryMaxBytes')
|
|
77
|
+
$UseDynamicMemory = [Convert]::ToBoolean($UseDynamicMemory)
|
|
78
|
+
|
|
55
79
|
$vm = new-vm @psboundparameters |
|
|
56
80
|
Set-Vm -ProcessorCount $ProcessorCount -passthru
|
|
57
|
-
|
|
81
|
+
if ($UseDynamicMemory) {
|
|
82
|
+
$vm | Set-VMMemory -DynamicMemoryEnabled $true -MinimumBytes $DynamicMemoryMinBytes -MaximumBytes $DynamicMemoryMaxBytes
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
$vm | Set-VMMemory -DynamicMemoryEnabled $false
|
|
86
|
+
}
|
|
87
|
+
|
|
58
88
|
$vm | Start-Vm -passthru |
|
|
59
89
|
foreach {
|
|
60
90
|
$vm = $_
|
|
@@ -68,9 +98,12 @@ function New-KitchenVM
|
|
|
68
98
|
|
|
69
99
|
function Get-VmIP($vm)
|
|
70
100
|
{
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
101
|
+
start-sleep -seconds 10
|
|
102
|
+
$vm.networkadapters.ipaddresses |
|
|
103
|
+
Where-Object {
|
|
104
|
+
$_ -match '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$'
|
|
105
|
+
} |
|
|
106
|
+
Select-Object -First 1
|
|
74
107
|
}
|
|
75
108
|
|
|
76
109
|
Function Set-VMNetworkConfiguration
|
|
@@ -79,18 +112,24 @@ Function Set-VMNetworkConfiguration
|
|
|
79
112
|
Param (
|
|
80
113
|
[parameter(valuefrompipeline)]
|
|
81
114
|
[object]$NetworkAdapter,
|
|
82
|
-
[String[]]$IPAddress
|
|
83
|
-
[String[]]$Subnet
|
|
115
|
+
[String[]]$IPAddress = @(),
|
|
116
|
+
[String[]]$Subnet = @()
|
|
84
117
|
)
|
|
85
118
|
|
|
86
|
-
$
|
|
87
|
-
|
|
119
|
+
$vm = Get-WmiObject -Namespace 'root\virtualization\v2' -Class 'Msvm_ComputerSystem' | Where-Object {
|
|
120
|
+
$_.ElementName -eq $NetworkAdapter.VMName
|
|
121
|
+
}
|
|
122
|
+
$VMSettings = $vm.GetRelated('Msvm_VirtualSystemSettingData') | Where-Object {
|
|
123
|
+
$_.VirtualSystemType -eq 'Microsoft:Hyper-V:System:Realized'
|
|
124
|
+
}
|
|
88
125
|
$VMNetAdapters = $VMSettings.GetRelated('Msvm_SyntheticEthernetPortSettingData')
|
|
89
126
|
|
|
90
127
|
$NetworkSettings = @()
|
|
91
|
-
foreach ($NetAdapter in $VMNetAdapters)
|
|
92
|
-
|
|
93
|
-
|
|
128
|
+
foreach ($NetAdapter in $VMNetAdapters)
|
|
129
|
+
{
|
|
130
|
+
if ($NetAdapter.Address -eq $NetworkAdapter.MacAddress)
|
|
131
|
+
{
|
|
132
|
+
$NetworkSettings = $NetworkSettings + $NetAdapter.GetRelated('Msvm_GuestNetworkAdapterConfiguration')
|
|
94
133
|
}
|
|
95
134
|
}
|
|
96
135
|
|
|
@@ -100,53 +139,65 @@ Function Set-VMNetworkConfiguration
|
|
|
100
139
|
$NetworkSettings[0].DHCPEnabled = $false
|
|
101
140
|
|
|
102
141
|
|
|
103
|
-
$Service = Get-WmiObject -Class
|
|
104
|
-
$setIP = $Service.SetGuestNetworkAdapterConfiguration($
|
|
142
|
+
$Service = Get-WmiObject -Class 'Msvm_VirtualSystemManagementService' -Namespace 'root\virtualization\v2'
|
|
143
|
+
$setIP = $Service.SetGuestNetworkAdapterConfiguration($vm, $NetworkSettings[0].GetText(1))
|
|
105
144
|
|
|
106
|
-
if ($
|
|
107
|
-
|
|
145
|
+
if ($setIP.ReturnValue -eq 4096)
|
|
146
|
+
{
|
|
147
|
+
$job = [WMI]$setIP.job
|
|
108
148
|
|
|
109
|
-
while ($job.JobState -eq 3 -or $job.JobState -eq 4)
|
|
110
|
-
|
|
111
|
-
|
|
149
|
+
while ($job.JobState -eq 3 -or $job.JobState -eq 4)
|
|
150
|
+
{
|
|
151
|
+
Start-Sleep 1
|
|
152
|
+
$job = [WMI]$setIP.job
|
|
112
153
|
}
|
|
113
154
|
|
|
114
|
-
if ($job.JobState -ne 7)
|
|
155
|
+
if ($job.JobState -ne 7)
|
|
156
|
+
{
|
|
115
157
|
$job.GetError()
|
|
116
158
|
}
|
|
117
159
|
}
|
|
118
|
-
(Get-VM -
|
|
160
|
+
(Get-VM -Id $NetworkAdapter.VmId).NetworkAdapter | Select-Object Name, IpAddress
|
|
119
161
|
}
|
|
120
162
|
|
|
121
163
|
function Get-VmDetail
|
|
122
164
|
{
|
|
123
|
-
|
|
124
|
-
|
|
165
|
+
[cmdletbinding()]
|
|
166
|
+
param($Id)
|
|
167
|
+
|
|
168
|
+
Get-VM -Id $Id |
|
|
169
|
+
ForEach-Object {
|
|
170
|
+
$vm = $_
|
|
171
|
+
do
|
|
172
|
+
{
|
|
173
|
+
Start-Sleep -Seconds 1
|
|
174
|
+
}
|
|
175
|
+
while (-not (Get-VmIP $vm))
|
|
125
176
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
[pscustomobject]@{
|
|
134
|
-
Name = $vm.name
|
|
135
|
-
Id = $vm.ID
|
|
136
|
-
IpAddress = (Get-VmIP $vm)
|
|
137
|
-
}
|
|
138
|
-
}
|
|
177
|
+
[pscustomobject]@{
|
|
178
|
+
Name = $vm.name
|
|
179
|
+
Id = $vm.ID
|
|
180
|
+
IpAddress = (Get-VmIP $vm)
|
|
181
|
+
}
|
|
182
|
+
}
|
|
139
183
|
}
|
|
140
184
|
|
|
141
185
|
function Get-DefaultVMSwitch
|
|
142
186
|
{
|
|
143
|
-
Get-VMSwitch |
|
|
187
|
+
Get-VMSwitch |
|
|
188
|
+
Select-Object -First 1 |
|
|
189
|
+
Select-Object Name, Id
|
|
144
190
|
}
|
|
145
191
|
|
|
146
|
-
function Mount-VMISO
|
|
192
|
+
function Mount-VMISO
|
|
193
|
+
{
|
|
147
194
|
[cmdletbinding()]
|
|
148
195
|
param($Id, $Path)
|
|
149
196
|
|
|
197
|
+
<<<<<<< HEAD
|
|
198
|
+
set-VMDvdDrive -VMName (Get-VM -Id $Id).Name -Path $Path
|
|
199
|
+
=======
|
|
150
200
|
set-VMDvdDrive -VMName (get-vm -id $Id).Name -Path $Path
|
|
151
201
|
|
|
152
|
-
|
|
202
|
+
>>>>>>> brantb/dynamic-memory
|
|
203
|
+
}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kitchen-hyperv
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Steven Murawski
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-12-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
165
165
|
version: '0'
|
|
166
166
|
requirements: []
|
|
167
167
|
rubyforge_project:
|
|
168
|
-
rubygems_version: 2.4.
|
|
168
|
+
rubygems_version: 2.4.8
|
|
169
169
|
signing_key:
|
|
170
170
|
specification_version: 4
|
|
171
171
|
summary: Hyper-V Driver for Test-Kitchen
|