kitchen-vcenter 2.11.12 → 2.12.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/kitchen/driver/vcenter.rb +15 -2
- data/lib/kitchen-vcenter/version.rb +1 -1
- data/lib/support/clone_vm.rb +65 -30
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e78c67ec9092a28c7a0c4ca7c58f480c8f712b6c8cefcbd6e114fbe337d6ea15
|
|
4
|
+
data.tar.gz: 0bd6b279c05a22f489c0fb5a7c7dde3de1c06aeaa0b0eb08793c756e59aaa8bf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a636d115b71f1fb65dbc607c41b20c09f39b975d3b6c8ce2d60fd2aaa93f5c98a0f0f058ba1b8179e5e7db0f6dca8812c141438469430e2ee5e00edb7e827719
|
|
7
|
+
data.tar.gz: dbe33aabab07e01a092da7215e25a718a4c74cdeba037c59a5164ef552221b2df69f45a053e17d4e8b53c88cafad0ff95fc3743d446973a4d8fb782350d94858
|
|
@@ -56,6 +56,7 @@ module Kitchen
|
|
|
56
56
|
default_config :clone_type, :full
|
|
57
57
|
default_config :cluster, nil
|
|
58
58
|
default_config :network_name, nil
|
|
59
|
+
default_config :networks, []
|
|
59
60
|
default_config :tags, nil
|
|
60
61
|
default_config :vm_wait_timeout, 90
|
|
61
62
|
default_config :vm_wait_interval, 2.0
|
|
@@ -94,6 +95,11 @@ module Kitchen
|
|
|
94
95
|
The `customize` setting was renamed to `vm_customization` and will
|
|
95
96
|
be removed in future versions.
|
|
96
97
|
MSG
|
|
98
|
+
deprecate_config_for :network_name, Util.outdent!(<<-MSG)
|
|
99
|
+
The `network_name` setting is deprecated and will be removed in the
|
|
100
|
+
future version. Please use the new settings `networks` and refer
|
|
101
|
+
documentation for the usage.
|
|
102
|
+
MSG
|
|
97
103
|
|
|
98
104
|
# The main create method
|
|
99
105
|
#
|
|
@@ -145,7 +151,7 @@ module Kitchen
|
|
|
145
151
|
config[:targethost] = get_host(config[:targethost], datacenter, cluster_id)
|
|
146
152
|
|
|
147
153
|
# Check if network exists, if to be changed
|
|
148
|
-
|
|
154
|
+
config[:networks].each { |network| network_exists?(network[:name]) }
|
|
149
155
|
|
|
150
156
|
# Same thing needs to happen with the folder name if it has been set
|
|
151
157
|
unless config[:folder].nil?
|
|
@@ -172,7 +178,7 @@ module Kitchen
|
|
|
172
178
|
folder: config[:folder],
|
|
173
179
|
resource_pool: config[:resource_pool],
|
|
174
180
|
clone_type: config[:clone_type].to_sym,
|
|
175
|
-
|
|
181
|
+
networks: config[:networks],
|
|
176
182
|
interface: config[:interface],
|
|
177
183
|
wait_timeout: config[:vm_wait_timeout],
|
|
178
184
|
wait_interval: config[:vm_wait_interval],
|
|
@@ -286,6 +292,13 @@ module Kitchen
|
|
|
286
292
|
config[:vm_username] = config[:aggressive_username] unless config[:aggressive_username].nil?
|
|
287
293
|
config[:vm_password] = config[:aggressive_password] unless config[:aggressive_password].nil?
|
|
288
294
|
config[:vm_customization] = config[:customize] unless config[:customize].nil?
|
|
295
|
+
validate_network_parameters
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def validate_network_parameters
|
|
299
|
+
return if config[:network_name].nil?
|
|
300
|
+
|
|
301
|
+
config[:networks] = [{ name: config[:network_name], operation: "edit" }]
|
|
289
302
|
end
|
|
290
303
|
|
|
291
304
|
# A helper method to validate the state
|
data/lib/support/clone_vm.rb
CHANGED
|
@@ -173,12 +173,37 @@ class Support
|
|
|
173
173
|
options[:vm_os].downcase.to_sym == :linux
|
|
174
174
|
end
|
|
175
175
|
|
|
176
|
+
# Network configured to update the existing one in the template
|
|
177
|
+
#
|
|
178
|
+
def networks_to_update
|
|
179
|
+
options[:networks].select { |n| n[:operation] == "edit" }
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# New networks that needs to be attached to newly created vm
|
|
183
|
+
#
|
|
184
|
+
def networks_to_add
|
|
185
|
+
options[:networks].select { |n| [nil, "add"].include?(n[:operation]) }
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# A network should update if there is a network_device available in the template
|
|
189
|
+
# and the user configured a new network with edit operation.
|
|
190
|
+
#
|
|
176
191
|
def update_network?(network_device)
|
|
177
|
-
|
|
192
|
+
networks_to_update.any? && network_device
|
|
178
193
|
end
|
|
179
194
|
|
|
180
|
-
|
|
181
|
-
|
|
195
|
+
# Checks whether any networks configured for addition
|
|
196
|
+
def add_network?
|
|
197
|
+
networks_to_add.any?
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# TODO: Remove this method and its invocations after the deprecation of `network_name` config
|
|
201
|
+
# For backward compatibility
|
|
202
|
+
# If the template doesn't have any NIC and the user use the old
|
|
203
|
+
# configuration(network_name), then that network should be attached to the vm.
|
|
204
|
+
#
|
|
205
|
+
def attach_new_network?(network_device)
|
|
206
|
+
network_device.nil? && networks_to_update.any?
|
|
182
207
|
end
|
|
183
208
|
|
|
184
209
|
def network_device(vm)
|
|
@@ -477,13 +502,13 @@ class Support
|
|
|
477
502
|
#
|
|
478
503
|
# @return Network object
|
|
479
504
|
#
|
|
480
|
-
def fetch_network(datacenter)
|
|
481
|
-
networks = datacenter.network.select { |n| n.name ==
|
|
482
|
-
raise Support::CloneError, format("Could not find network named %s",
|
|
505
|
+
def fetch_network(datacenter, network_name)
|
|
506
|
+
networks = datacenter.network.select { |n| n.name == network_name }
|
|
507
|
+
raise Support::CloneError, format("Could not find network named %s", network_name) if networks.empty?
|
|
483
508
|
|
|
484
509
|
if networks.count > 1
|
|
485
510
|
Kitchen.logger.warn(
|
|
486
|
-
format("Found %d networks named %s, picking first one", networks.count,
|
|
511
|
+
format("Found %d networks named %s, picking first one", networks.count, network_name)
|
|
487
512
|
)
|
|
488
513
|
end
|
|
489
514
|
networks.first
|
|
@@ -493,7 +518,7 @@ class Support
|
|
|
493
518
|
# to add a new network device or update the existing network device
|
|
494
519
|
#
|
|
495
520
|
# The network_obj will be used as a backing for the network_device.
|
|
496
|
-
def network_change_spec(network_device, network_obj, operation: :edit)
|
|
521
|
+
def network_change_spec(network_device, network_obj, network_name, operation: :edit)
|
|
497
522
|
if network_obj.is_a? RbVmomi::VIM::DistributedVirtualPortgroup
|
|
498
523
|
Kitchen.logger.info format("Assigning network %s...", network_obj.pretty_path)
|
|
499
524
|
|
|
@@ -507,39 +532,42 @@ class Support
|
|
|
507
532
|
)
|
|
508
533
|
)
|
|
509
534
|
elsif network_obj.is_a? RbVmomi::VIM::Network
|
|
510
|
-
Kitchen.logger.info format("Assigning network %s...",
|
|
535
|
+
Kitchen.logger.info format("Assigning network %s...", network_name)
|
|
511
536
|
|
|
512
537
|
network_device.backing = RbVmomi::VIM.VirtualEthernetCardNetworkBackingInfo(
|
|
513
|
-
deviceName:
|
|
538
|
+
deviceName: network_name
|
|
514
539
|
)
|
|
515
540
|
else
|
|
516
|
-
raise Support::CloneError, format("Unknown network type %s for network name %s", network_obj.class.to_s,
|
|
541
|
+
raise Support::CloneError, format("Unknown network type %s for network name %s", network_obj.class.to_s, network_name)
|
|
517
542
|
end
|
|
518
543
|
|
|
519
|
-
|
|
520
|
-
RbVmomi::VIM
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
),
|
|
524
|
-
]
|
|
544
|
+
RbVmomi::VIM.VirtualDeviceConfigSpec(
|
|
545
|
+
operation: RbVmomi::VIM::VirtualDeviceConfigSpecOperation(operation),
|
|
546
|
+
device: network_device
|
|
547
|
+
)
|
|
525
548
|
end
|
|
526
549
|
|
|
527
550
|
# This method can be used to add new network device to the target vm
|
|
528
551
|
# This fill find the network which defined in kitchen.yml in network_name configuration
|
|
529
552
|
# and attach that to the target vm.
|
|
530
|
-
def add_new_network_device(datacenter)
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
553
|
+
def add_new_network_device(datacenter, networks)
|
|
554
|
+
device_change = []
|
|
555
|
+
networks.each do |network|
|
|
556
|
+
network_obj = fetch_network(datacenter, network[:name])
|
|
557
|
+
network_device = RbVmomi::VIM.VirtualVmxnet3(
|
|
558
|
+
key: 0,
|
|
559
|
+
deviceInfo: {
|
|
560
|
+
label: network[:name],
|
|
561
|
+
summary: network[:name],
|
|
562
|
+
}
|
|
563
|
+
)
|
|
564
|
+
|
|
565
|
+
device_change << network_change_spec(network_device, network_obj, network[:name], operation: :add)
|
|
566
|
+
end
|
|
539
567
|
|
|
540
568
|
config_spec = RbVmomi::VIM.VirtualMachineConfigSpec(
|
|
541
569
|
{
|
|
542
|
-
deviceChange:
|
|
570
|
+
deviceChange: device_change,
|
|
543
571
|
}
|
|
544
572
|
)
|
|
545
573
|
|
|
@@ -592,8 +620,12 @@ class Support
|
|
|
592
620
|
Kitchen.logger.warn format("Source VM/template does not have any network device (use VMware IPPools and vsphere-gom transport or govc to access)") unless network_device
|
|
593
621
|
|
|
594
622
|
if update_network?(network_device)
|
|
595
|
-
|
|
596
|
-
|
|
623
|
+
network_spec = []
|
|
624
|
+
networks_to_update.each do |network|
|
|
625
|
+
network_obj = fetch_network(dc, network[:name])
|
|
626
|
+
network_spec << network_change_spec(network_device, network_obj, network[:name])
|
|
627
|
+
end
|
|
628
|
+
relocate_spec.deviceChange = network_spec
|
|
597
629
|
end
|
|
598
630
|
|
|
599
631
|
# Set the folder to use
|
|
@@ -678,7 +710,10 @@ class Support
|
|
|
678
710
|
|
|
679
711
|
vm_customization if options[:vm_customization]
|
|
680
712
|
|
|
681
|
-
|
|
713
|
+
# TODO: Remove this line after the deprecation of `network_name` config
|
|
714
|
+
add_new_network_device(dc, networks_to_update) if attach_new_network?(network_device)
|
|
715
|
+
|
|
716
|
+
add_new_network_device(dc, networks_to_add) if add_network?
|
|
682
717
|
|
|
683
718
|
# Start only if specified or customizations wanted; no need for instant clones as they start in running state
|
|
684
719
|
if options[:poweron] && !options[:vm_customization].nil? && !instant_clone?
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kitchen-vcenter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.12.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chef Software
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-01-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: net-ping
|
|
@@ -31,12 +31,12 @@ dependencies:
|
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: '3.0'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
|
-
name:
|
|
34
|
+
name: rbvmomi2
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
39
|
+
version: 3.5.0
|
|
40
40
|
- - "<"
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
42
|
version: '4.0'
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
requirements:
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version:
|
|
49
|
+
version: 3.5.0
|
|
50
50
|
- - "<"
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: '4.0'
|
|
@@ -109,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
109
109
|
requirements:
|
|
110
110
|
- - ">="
|
|
111
111
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: '2.
|
|
112
|
+
version: '2.7'
|
|
113
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
115
|
- - ">="
|