vmpooler-provider-vsphere 3.3.4 → 3.4.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.
- checksums.yaml +4 -4
- data/lib/vmpooler/providers/vsphere.rb +131 -92
- data/lib/vmpooler-provider-vsphere/version.rb +1 -1
- metadata +25 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 70ae81e3cc10136212e98b959de197cd6fd9f77aad9a52374e4b0716020c52f8
|
|
4
|
+
data.tar.gz: beca8a851c0df498f726e7441bf3bc9cafc01cc703004832212af3eeadab2e14
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c6844c6c213111ba9c4a5b7f29c4fc5805e0cc9bc5e0da5201c7e4b0a54813d738542ad2ba4704c705e6f471aa20dbeffd9d4faf8d5d111477a22bdd052c8bf3
|
|
7
|
+
data.tar.gz: 2bb2b9d136a389e528eaa0f6af3160d269462a676a0431f78f7e066862c053e83c7cf2a5828dd6605ca3a7add47e113fae1a9b1e0bf84876d2e417bcd45f3f83
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require 'bigdecimal'
|
|
4
4
|
require 'bigdecimal/util'
|
|
5
5
|
require 'rbvmomi'
|
|
6
|
+
require 'timeout'
|
|
6
7
|
require 'vmpooler/providers/base'
|
|
7
8
|
|
|
8
9
|
module Vmpooler
|
|
@@ -74,7 +75,7 @@ module Vmpooler
|
|
|
74
75
|
transaction.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now.to_s)
|
|
75
76
|
|
|
76
77
|
# Auto-expire metadata key
|
|
77
|
-
transaction.expire("vmpooler__vm__#{vm_name}",
|
|
78
|
+
transaction.expire("vmpooler__vm__#{vm_name}", data_ttl * 60 * 60)
|
|
78
79
|
end
|
|
79
80
|
end
|
|
80
81
|
|
|
@@ -186,14 +187,18 @@ module Vmpooler
|
|
|
186
187
|
|
|
187
188
|
def vms_in_pool(pool_name)
|
|
188
189
|
vms = []
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
with_circuit_breaker do
|
|
191
|
+
Timeout.timeout(vsphere_connection_timeout) do
|
|
192
|
+
@connection_pool.with_metrics do |pool_object|
|
|
193
|
+
connection = ensured_vsphere_connection(pool_object)
|
|
194
|
+
folder_object = find_vm_folder(pool_name, connection)
|
|
192
195
|
|
|
193
|
-
|
|
196
|
+
next if folder_object.nil?
|
|
194
197
|
|
|
195
|
-
|
|
196
|
-
|
|
198
|
+
folder_object.childEntity.each do |vm|
|
|
199
|
+
vms << { 'name' => vm.name } if vm.is_a? RbVmomi::VIM::VirtualMachine
|
|
200
|
+
end
|
|
201
|
+
end
|
|
197
202
|
end
|
|
198
203
|
end
|
|
199
204
|
vms
|
|
@@ -305,12 +310,16 @@ module Vmpooler
|
|
|
305
310
|
|
|
306
311
|
def get_vm(pool_name, vm_name)
|
|
307
312
|
vm_hash = nil
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
313
|
+
with_circuit_breaker do
|
|
314
|
+
Timeout.timeout(vsphere_connection_timeout) do
|
|
315
|
+
@connection_pool.with_metrics do |pool_object|
|
|
316
|
+
connection = ensured_vsphere_connection(pool_object)
|
|
317
|
+
vm_object = find_vm(pool_name, vm_name, connection)
|
|
318
|
+
next if vm_object.nil?
|
|
319
|
+
|
|
320
|
+
vm_hash = generate_vm_hash(vm_object, pool_name)
|
|
321
|
+
end
|
|
322
|
+
end
|
|
314
323
|
end
|
|
315
324
|
vm_hash
|
|
316
325
|
end
|
|
@@ -320,86 +329,94 @@ module Vmpooler
|
|
|
320
329
|
raise("Pool #{pool_name} does not exist for the provider #{name}") if pool.nil?
|
|
321
330
|
|
|
322
331
|
vm_hash = nil
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
332
|
+
with_circuit_breaker do
|
|
333
|
+
@connection_pool.with_metrics do |pool_object|
|
|
334
|
+
connection = ensured_vsphere_connection(pool_object)
|
|
335
|
+
# Assume all pool config is valid i.e. not missing
|
|
336
|
+
template_path = pool['template']
|
|
337
|
+
target_folder_path = pool['folder']
|
|
338
|
+
target_datastore = pool['datastore']
|
|
339
|
+
target_datacenter_name = get_target_datacenter_from_config(pool_name)
|
|
340
|
+
|
|
341
|
+
# Get the template VM object
|
|
342
|
+
raise("Pool #{pool_name} did not specify a full path for the template for the provider #{name}") unless valid_template_path? template_path
|
|
343
|
+
|
|
344
|
+
template_vm_object = find_template_vm(pool, connection)
|
|
345
|
+
|
|
346
|
+
extra_config = [
|
|
347
|
+
{ key: 'guestinfo.hostname', value: new_vmname }
|
|
348
|
+
]
|
|
349
|
+
|
|
350
|
+
if pool.key?('snapshot_mainMem_ioBlockPages')
|
|
351
|
+
ioblockpages = pool['snapshot_mainMem_ioBlockPages']
|
|
352
|
+
extra_config.push(
|
|
353
|
+
{ key: 'mainMem.ioBlockPages', value: ioblockpages }
|
|
354
|
+
)
|
|
355
|
+
end
|
|
356
|
+
if pool.key?('snapshot_mainMem_iowait')
|
|
357
|
+
iowait = pool['snapshot_mainMem_iowait']
|
|
358
|
+
extra_config.push(
|
|
359
|
+
{ key: 'mainMem.iowait', value: iowait }
|
|
360
|
+
)
|
|
361
|
+
end
|
|
352
362
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
363
|
+
# Annotate with creation time, origin template, etc.
|
|
364
|
+
# Add extraconfig options that can be queried by vmtools
|
|
365
|
+
config_spec = create_config_spec(new_vmname, template_path, extra_config)
|
|
356
366
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
367
|
+
# Check if alternate network configuration is specified and add configuration
|
|
368
|
+
if pool.key?('network')
|
|
369
|
+
template_vm_network_device = template_vm_object.config.hardware.device.grep(RbVmomi::VIM::VirtualEthernetCard).first
|
|
370
|
+
network_name = pool['network']
|
|
371
|
+
network_device = set_network_device(target_datacenter_name, template_vm_network_device, network_name, connection)
|
|
372
|
+
config_spec.deviceChange = [{ operation: 'edit', device: network_device }]
|
|
373
|
+
end
|
|
364
374
|
|
|
365
|
-
|
|
366
|
-
|
|
375
|
+
# Put the VM in the specified folder and resource pool
|
|
376
|
+
relocate_spec = create_relocate_spec(target_datastore, target_datacenter_name, pool_name, connection)
|
|
367
377
|
|
|
368
|
-
|
|
369
|
-
|
|
378
|
+
# Create a clone spec
|
|
379
|
+
clone_spec = create_clone_spec(relocate_spec, config_spec)
|
|
370
380
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
381
|
+
begin
|
|
382
|
+
vm_target_folder = find_vm_folder(pool_name, connection)
|
|
383
|
+
vm_target_folder ||= create_folder(connection, target_folder_path, target_datacenter_name) if @config[:config].key?('create_folders') && (@config[:config]['create_folders'] == true)
|
|
384
|
+
rescue StandardError
|
|
385
|
+
if @config[:config].key?('create_folders') && (@config[:config]['create_folders'] == true)
|
|
386
|
+
vm_target_folder = create_folder(connection, target_folder_path, target_datacenter_name)
|
|
387
|
+
else
|
|
388
|
+
raise
|
|
389
|
+
end
|
|
379
390
|
end
|
|
380
|
-
|
|
381
|
-
raise ArgumentError, "Cannot find the configured folder for #{pool_name} #{target_folder_path}" unless vm_target_folder
|
|
391
|
+
raise ArgumentError, "Cannot find the configured folder for #{pool_name} #{target_folder_path}" unless vm_target_folder
|
|
382
392
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
393
|
+
# Create the new VM
|
|
394
|
+
new_vm_object = template_vm_object.CloneVM_Task(
|
|
395
|
+
folder: vm_target_folder,
|
|
396
|
+
name: new_vmname,
|
|
397
|
+
spec: clone_spec
|
|
398
|
+
).wait_for_completion
|
|
389
399
|
|
|
390
|
-
|
|
400
|
+
vm_hash = generate_vm_hash(new_vm_object, pool_name)
|
|
401
|
+
end
|
|
391
402
|
end
|
|
392
403
|
vm_hash
|
|
393
404
|
end
|
|
394
405
|
|
|
395
406
|
# The inner method requires vmware tools running in the guest os
|
|
396
407
|
def get_vm_ip_address(vm_name, pool_name)
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
408
|
+
ip = nil
|
|
409
|
+
with_circuit_breaker do
|
|
410
|
+
Timeout.timeout(vsphere_connection_timeout) do
|
|
411
|
+
@connection_pool.with_metrics do |pool_object|
|
|
412
|
+
connection = ensured_vsphere_connection(pool_object)
|
|
413
|
+
vm_object = find_vm(pool_name, vm_name, connection)
|
|
414
|
+
vm_hash = generate_vm_hash(vm_object, pool_name)
|
|
415
|
+
ip = vm_hash['ip']
|
|
416
|
+
end
|
|
417
|
+
end
|
|
402
418
|
end
|
|
419
|
+
ip
|
|
403
420
|
end
|
|
404
421
|
|
|
405
422
|
def create_config_spec(vm_name, template_name, extra_config)
|
|
@@ -540,17 +557,19 @@ module Vmpooler
|
|
|
540
557
|
end
|
|
541
558
|
|
|
542
559
|
def destroy_vm(pool_name, vm_name)
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
560
|
+
with_circuit_breaker do
|
|
561
|
+
@connection_pool.with_metrics do |pool_object|
|
|
562
|
+
connection = ensured_vsphere_connection(pool_object)
|
|
563
|
+
vm_object = find_vm(pool_name, vm_name, connection)
|
|
564
|
+
# If a VM doesn't exist then it is effectively deleted
|
|
565
|
+
next if vm_object.nil?
|
|
548
566
|
|
|
549
|
-
|
|
550
|
-
|
|
567
|
+
# Poweroff the VM if it's running
|
|
568
|
+
vm_object.PowerOffVM_Task.wait_for_completion if vm_object.runtime&.powerState && vm_object.runtime.powerState == 'poweredOn'
|
|
551
569
|
|
|
552
|
-
|
|
553
|
-
|
|
570
|
+
# Kill it with fire
|
|
571
|
+
vm_object.Destroy_Task.wait_for_completion
|
|
572
|
+
end
|
|
554
573
|
end
|
|
555
574
|
true
|
|
556
575
|
end
|
|
@@ -595,7 +614,7 @@ module Vmpooler
|
|
|
595
614
|
pool_configuration = pool_config(pool_name)
|
|
596
615
|
return nil if pool_configuration.nil?
|
|
597
616
|
|
|
598
|
-
hostname = vm_object.summary.guest.hostName if vm_object.summary&.guest
|
|
617
|
+
hostname = vm_object.summary.guest.hostName if vm_object.summary&.guest&.hostName
|
|
599
618
|
boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime
|
|
600
619
|
powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState
|
|
601
620
|
|
|
@@ -631,6 +650,14 @@ module Vmpooler
|
|
|
631
650
|
DISK_TYPE = 'thin'
|
|
632
651
|
DISK_MODE = 'persistent'
|
|
633
652
|
|
|
653
|
+
def with_circuit_breaker(&block)
|
|
654
|
+
if circuit_breaker
|
|
655
|
+
circuit_breaker.call(&block)
|
|
656
|
+
else
|
|
657
|
+
yield
|
|
658
|
+
end
|
|
659
|
+
end
|
|
660
|
+
|
|
634
661
|
def ensured_vsphere_connection(connection_pool_object)
|
|
635
662
|
connection_pool_object[:connection] = connect_to_vsphere unless vsphere_connection_ok?(connection_pool_object[:connection])
|
|
636
663
|
connection_pool_object[:connection]
|
|
@@ -651,7 +678,9 @@ module Vmpooler
|
|
|
651
678
|
connection = RbVmomi::VIM.connect host: provider_config['server'],
|
|
652
679
|
user: provider_config['username'],
|
|
653
680
|
password: provider_config['password'],
|
|
654
|
-
insecure: provider_config['insecure'] || false
|
|
681
|
+
insecure: provider_config['insecure'] || false,
|
|
682
|
+
read_timeout: vsphere_connection_timeout,
|
|
683
|
+
open_timeout: vsphere_connection_timeout
|
|
655
684
|
metrics.increment('connect.open')
|
|
656
685
|
connection
|
|
657
686
|
rescue StandardError => e
|
|
@@ -664,6 +693,12 @@ module Vmpooler
|
|
|
664
693
|
end
|
|
665
694
|
end
|
|
666
695
|
|
|
696
|
+
def vsphere_connection_timeout
|
|
697
|
+
timeout = provider_config['vsphere_timeout'] ||
|
|
698
|
+
global_config&.dig(:config, 'vsphere_timeout') || 60
|
|
699
|
+
timeout.to_i
|
|
700
|
+
end
|
|
701
|
+
|
|
667
702
|
# This should supercede the open_socket method in the Pool Manager
|
|
668
703
|
def open_socket(host, domain = nil, timeout = 5, port = 22, &_block)
|
|
669
704
|
target_host = host
|
|
@@ -697,7 +732,7 @@ module Vmpooler
|
|
|
697
732
|
|
|
698
733
|
# Reverse the array back to normal and
|
|
699
734
|
# then convert the array of paths into a '/' seperated string
|
|
700
|
-
|
|
735
|
+
full_path.reverse.map { |p| p[1] }.join('/')
|
|
701
736
|
end
|
|
702
737
|
|
|
703
738
|
def add_disk(vm, size, datastore, connection, datacentername)
|
|
@@ -1078,7 +1113,7 @@ module Vmpooler
|
|
|
1078
1113
|
vm_object = find_vm(pool_name, vm_name, connection)
|
|
1079
1114
|
return nil if vm_object.nil?
|
|
1080
1115
|
|
|
1081
|
-
parent_host_object = vm_object.summary.runtime.host if vm_object.summary&.runtime
|
|
1116
|
+
parent_host_object = vm_object.summary.runtime.host if vm_object.summary&.runtime&.host
|
|
1082
1117
|
raise('Unable to determine which host the VM is running on') if parent_host_object.nil?
|
|
1083
1118
|
|
|
1084
1119
|
parent_host = parent_host_object.name
|
|
@@ -1103,6 +1138,9 @@ module Vmpooler
|
|
|
1103
1138
|
begin
|
|
1104
1139
|
connection = ensured_vsphere_connection(pool_object)
|
|
1105
1140
|
vm_hash = get_vm_details(pool_name, vm_name, connection)
|
|
1141
|
+
|
|
1142
|
+
raise StandardError, 'failed to get vm details. vm is unreachable or no longer exists' if vm_hash.nil?
|
|
1143
|
+
|
|
1106
1144
|
@redis.with_metrics do |redis|
|
|
1107
1145
|
redis.hset("vmpooler__vm__#{vm_name}", 'host', vm_hash['host_name'])
|
|
1108
1146
|
migration_count = redis.scard('vmpooler__migration')
|
|
@@ -1220,7 +1258,8 @@ module Vmpooler
|
|
|
1220
1258
|
def linked_clone?(pool)
|
|
1221
1259
|
return if pool['create_linked_clone'] == false
|
|
1222
1260
|
return true if pool['create_linked_clone']
|
|
1223
|
-
|
|
1261
|
+
|
|
1262
|
+
true if @config[:config]['create_linked_clones']
|
|
1224
1263
|
end
|
|
1225
1264
|
end
|
|
1226
1265
|
end
|
metadata
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vmpooler-provider-vsphere
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Puppet
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2026-03-17 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rbvmomi2
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
@@ -19,9 +19,8 @@ dependencies:
|
|
|
19
19
|
- - "<"
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
21
|
version: '4.0'
|
|
22
|
-
name: rbvmomi2
|
|
23
|
-
prerelease: false
|
|
24
22
|
type: :runtime
|
|
23
|
+
prerelease: false
|
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
25
|
requirements:
|
|
27
26
|
- - ">="
|
|
@@ -31,118 +30,119 @@ dependencies:
|
|
|
31
30
|
- !ruby/object:Gem::Version
|
|
32
31
|
version: '4.0'
|
|
33
32
|
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: vmpooler
|
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
|
35
35
|
requirements:
|
|
36
36
|
- - "~>"
|
|
37
37
|
- !ruby/object:Gem::Version
|
|
38
38
|
version: '3.0'
|
|
39
|
-
name: vmpooler
|
|
40
|
-
prerelease: false
|
|
41
39
|
type: :runtime
|
|
40
|
+
prerelease: false
|
|
42
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
42
|
requirements:
|
|
44
43
|
- - "~>"
|
|
45
44
|
- !ruby/object:Gem::Version
|
|
46
45
|
version: '3.0'
|
|
47
46
|
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: climate_control
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
|
49
49
|
requirements:
|
|
50
50
|
- - ">="
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: 0.2.0
|
|
53
|
-
name: climate_control
|
|
54
|
-
prerelease: false
|
|
55
53
|
type: :development
|
|
54
|
+
prerelease: false
|
|
56
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
56
|
requirements:
|
|
58
57
|
- - ">="
|
|
59
58
|
- !ruby/object:Gem::Version
|
|
60
59
|
version: 0.2.0
|
|
61
60
|
- !ruby/object:Gem::Dependency
|
|
61
|
+
name: mock_redis
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements:
|
|
64
64
|
- - ">="
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
66
|
version: 0.17.0
|
|
67
|
-
name: mock_redis
|
|
68
|
-
prerelease: false
|
|
69
67
|
type: :development
|
|
68
|
+
prerelease: false
|
|
70
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
70
|
requirements:
|
|
72
71
|
- - ">="
|
|
73
72
|
- !ruby/object:Gem::Version
|
|
74
73
|
version: 0.17.0
|
|
75
74
|
- !ruby/object:Gem::Dependency
|
|
75
|
+
name: pry
|
|
76
76
|
requirement: !ruby/object:Gem::Requirement
|
|
77
77
|
requirements:
|
|
78
78
|
- - ">="
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
80
|
version: '0'
|
|
81
|
-
name: pry
|
|
82
|
-
prerelease: false
|
|
83
81
|
type: :development
|
|
82
|
+
prerelease: false
|
|
84
83
|
version_requirements: !ruby/object:Gem::Requirement
|
|
85
84
|
requirements:
|
|
86
85
|
- - ">="
|
|
87
86
|
- !ruby/object:Gem::Version
|
|
88
87
|
version: '0'
|
|
89
88
|
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: rack-test
|
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
|
91
91
|
requirements:
|
|
92
92
|
- - ">="
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
94
|
version: '0.6'
|
|
95
|
-
name: rack-test
|
|
96
|
-
prerelease: false
|
|
97
95
|
type: :development
|
|
96
|
+
prerelease: false
|
|
98
97
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
98
|
requirements:
|
|
100
99
|
- - ">="
|
|
101
100
|
- !ruby/object:Gem::Version
|
|
102
101
|
version: '0.6'
|
|
103
102
|
- !ruby/object:Gem::Dependency
|
|
103
|
+
name: rspec
|
|
104
104
|
requirement: !ruby/object:Gem::Requirement
|
|
105
105
|
requirements:
|
|
106
106
|
- - ">="
|
|
107
107
|
- !ruby/object:Gem::Version
|
|
108
108
|
version: '3.2'
|
|
109
|
-
name: rspec
|
|
110
|
-
prerelease: false
|
|
111
109
|
type: :development
|
|
110
|
+
prerelease: false
|
|
112
111
|
version_requirements: !ruby/object:Gem::Requirement
|
|
113
112
|
requirements:
|
|
114
113
|
- - ">="
|
|
115
114
|
- !ruby/object:Gem::Version
|
|
116
115
|
version: '3.2'
|
|
117
116
|
- !ruby/object:Gem::Dependency
|
|
117
|
+
name: rubocop
|
|
118
118
|
requirement: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
|
120
120
|
- - "~>"
|
|
121
121
|
- !ruby/object:Gem::Version
|
|
122
122
|
version: 1.28.2
|
|
123
|
-
name: rubocop
|
|
124
|
-
prerelease: false
|
|
125
123
|
type: :development
|
|
124
|
+
prerelease: false
|
|
126
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
127
126
|
requirements:
|
|
128
127
|
- - "~>"
|
|
129
128
|
- !ruby/object:Gem::Version
|
|
130
129
|
version: 1.28.2
|
|
131
130
|
- !ruby/object:Gem::Dependency
|
|
131
|
+
name: simplecov
|
|
132
132
|
requirement: !ruby/object:Gem::Requirement
|
|
133
133
|
requirements:
|
|
134
134
|
- - ">="
|
|
135
135
|
- !ruby/object:Gem::Version
|
|
136
136
|
version: 0.11.2
|
|
137
|
-
name: simplecov
|
|
138
|
-
prerelease: false
|
|
139
137
|
type: :development
|
|
138
|
+
prerelease: false
|
|
140
139
|
version_requirements: !ruby/object:Gem::Requirement
|
|
141
140
|
requirements:
|
|
142
141
|
- - ">="
|
|
143
142
|
- !ruby/object:Gem::Version
|
|
144
143
|
version: 0.11.2
|
|
145
144
|
- !ruby/object:Gem::Dependency
|
|
145
|
+
name: thor
|
|
146
146
|
requirement: !ruby/object:Gem::Requirement
|
|
147
147
|
requirements:
|
|
148
148
|
- - "~>"
|
|
@@ -151,9 +151,8 @@ dependencies:
|
|
|
151
151
|
- - ">="
|
|
152
152
|
- !ruby/object:Gem::Version
|
|
153
153
|
version: 1.0.1
|
|
154
|
-
name: thor
|
|
155
|
-
prerelease: false
|
|
156
154
|
type: :development
|
|
155
|
+
prerelease: false
|
|
157
156
|
version_requirements: !ruby/object:Gem::Requirement
|
|
158
157
|
requirements:
|
|
159
158
|
- - "~>"
|
|
@@ -163,20 +162,19 @@ dependencies:
|
|
|
163
162
|
- !ruby/object:Gem::Version
|
|
164
163
|
version: 1.0.1
|
|
165
164
|
- !ruby/object:Gem::Dependency
|
|
165
|
+
name: yarjuf
|
|
166
166
|
requirement: !ruby/object:Gem::Requirement
|
|
167
167
|
requirements:
|
|
168
168
|
- - ">="
|
|
169
169
|
- !ruby/object:Gem::Version
|
|
170
170
|
version: '2.0'
|
|
171
|
-
name: yarjuf
|
|
172
|
-
prerelease: false
|
|
173
171
|
type: :development
|
|
172
|
+
prerelease: false
|
|
174
173
|
version_requirements: !ruby/object:Gem::Requirement
|
|
175
174
|
requirements:
|
|
176
175
|
- - ">="
|
|
177
176
|
- !ruby/object:Gem::Version
|
|
178
177
|
version: '2.0'
|
|
179
|
-
description:
|
|
180
178
|
email:
|
|
181
179
|
- support@puppet.com
|
|
182
180
|
executables: []
|
|
@@ -189,7 +187,6 @@ homepage: https://github.com/puppetlabs/vmpooler-provider-vsphere
|
|
|
189
187
|
licenses:
|
|
190
188
|
- Apache-2.0
|
|
191
189
|
metadata: {}
|
|
192
|
-
post_install_message:
|
|
193
190
|
rdoc_options: []
|
|
194
191
|
require_paths:
|
|
195
192
|
- lib
|
|
@@ -204,8 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
204
201
|
- !ruby/object:Gem::Version
|
|
205
202
|
version: '0'
|
|
206
203
|
requirements: []
|
|
207
|
-
rubygems_version: 3.3
|
|
208
|
-
signing_key:
|
|
204
|
+
rubygems_version: 3.6.3
|
|
209
205
|
specification_version: 4
|
|
210
206
|
summary: VMware provider for VMPooler
|
|
211
207
|
test_files: []
|