knife-vsphere 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1590f83d24583a54afdd8e0d20e6cebdbe68a16c
4
- data.tar.gz: 1ad17a8abad640718689b93a16879734c27f8250
3
+ metadata.gz: dc8369abb89134912a7e683ce60b1bbd0e8d484f
4
+ data.tar.gz: 813c2580d02825cd3d14376b5a4e18d982cb6cf7
5
5
  SHA512:
6
- metadata.gz: 6a220f46264fb88086e93bc61195e3c093048604f07eabeadbe4cabb78201dbc4671df728aa7372c3363ec176c0266b3fc267fb47065d5fd68eeedda1f0cdd61
7
- data.tar.gz: 344665daa9c9849c83d8ea1b2fa6e1872ca487424c691462f6b89ae7f53e2a7c51d74cfb6c77fc876c20b937bde297b3bb5695d4182c20e8186e4a98ca3460a1
6
+ metadata.gz: 46f01a944324a64476df295187ba4859ade28677c4a47c62c3e1603e1804150fa60d0db72fa2ac829e0f14e49cb8a4e05ff9646abd4f30674bbf727fbb088d61
7
+ data.tar.gz: ccaa4f2c5d8a44349ad90e36a56c041f10ecb9479062daa44fd63953c9f8b41440b3cc259571db7e76f5c55bba16d062f293a056c1cbc32441fce9e5a526d3f3
@@ -246,6 +246,19 @@ class Chef
246
246
  networks.first
247
247
  end
248
248
 
249
+ def find_pool_folder(folderName)
250
+ dc = datacenter
251
+ base_entity = dc.hostFolder
252
+ entity_array = folderName.split('/')
253
+ entity_array.each do |entityArrItem|
254
+ if entityArrItem != ''
255
+ base_entity = base_entity.childEntity.grep(RbVmomi::VIM::ManagedObject).find { |f| f.name == entityArrItem } ||
256
+ abort("no such folder #{folderName} while looking for #{entityArrItem}")
257
+ end
258
+ end
259
+ base_entity
260
+ end
261
+
249
262
  def find_pool(poolName)
250
263
  dc = datacenter
251
264
  base_entity = dc.hostFolder
@@ -25,19 +25,6 @@ class Chef::Knife::VspherePoolList < Chef::Knife::BaseVsphereCommand
25
25
  end
26
26
  end
27
27
 
28
- def find_pool_folder(folderName)
29
- dc = datacenter
30
- base_entity = dc.hostFolder
31
- entity_array = folderName.split('/')
32
- entity_array.each do |entityArrItem|
33
- if entityArrItem != ''
34
- base_entity = base_entity.childEntity.grep(RbVmomi::VIM::ManagedObject).find { |f| f.name == entityArrItem } ||
35
- abort("no such folder #{folderName} while looking for #{entityArrItem}")
36
- end
37
- end
38
- base_entity
39
- end
40
-
41
28
  def run
42
29
  vim_connection
43
30
  base_folder = find_pool_folder(get_config(:folder))
@@ -23,6 +23,8 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
23
23
  AUTO_MAC = 'auto'
24
24
  # A NO IP for you to use!
25
25
  NO_IPS = ''
26
+ # a linklayer origin is an actual nic
27
+ ORIGIN_IS_REAL_NIC = 'linklayer'.freeze
26
28
 
27
29
  include Chef::Knife::WinrmBase
28
30
  include CustomizationHelper
@@ -424,10 +426,15 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
424
426
  # Multiple reboots occur during guest customization in which a link-local
425
427
  # address is assigned. As such, we need to wait until a routable IP address
426
428
  # becomes available. This is most commonly an issue with Windows instances.
427
- sleep 2 while vm.guest.net[bootstrap_nic_index].ipConfig.ipAddress.detect { |addr| IPAddr.new(addr.ipAddress).ipv4? }.origin == 'linklayer'
429
+ sleep 2 while vm_is_waiting_for_ip?(vm)
428
430
  vm.guest.net[bootstrap_nic_index].ipAddress.detect { |addr| IPAddr.new(addr).ipv4? }
429
431
  end
430
432
 
433
+ def vm_is_waiting_for_ip?(vm)
434
+ first_ip_address = vm.guest.net[bootstrap_nic_index].ipConfig.ipAddress.detect { |addr| IPAddr.new(addr.ipAddress).ipv4? }
435
+ first_ip_address.nil? || first_ip_address.origin == ORIGIN_IS_REAL_NIC
436
+ end
437
+
431
438
  def guest_address(vm)
432
439
  puts 'Waiting for network interfaces to become available...'
433
440
  sleep 2 while vm.guest.net.empty? || !vm.guest.ipAddress
@@ -687,9 +694,8 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
687
694
  # We should get here with the customizations set, either by a plugin or a --cspec
688
695
  fatal_exit 'Windows clones need a customization identity. Try passing a --cspec or making a --cplugin' if cust_spec.identity.props.empty?
689
696
 
690
- identification = RbVmomi::VIM.CustomizationIdentification(
691
- joinWorkgroup: cust_spec.identity.identification.joinWorkgroup
692
- )
697
+ identification = identification_for_spec(cust_spec)
698
+
693
699
  license_file_print_data = RbVmomi::VIM.CustomizationLicenseFilePrintData(
694
700
  autoMode: cust_spec.identity.licenseFilePrintData.autoMode
695
701
  ) if cust_spec.identity.licenseFilePrintData # optional param
@@ -983,4 +989,21 @@ class Chef::Knife::VsphereVmClone < Chef::Knife::BaseVsphereCommand
983
989
  def bootstrap_nic_index
984
990
  Integer(get_config(:bootstrap_nic))
985
991
  end
992
+
993
+ def identification_for_spec(cust_spec)
994
+ # If --cdomain matches what is in --cspec then use identification from the --cspec, else use --cdomain
995
+ case domain = get_config(:customization_domain)
996
+ when nil?
997
+ # Fall back to original behavior of using joinWorkgroup from the --cspec
998
+ RbVmomi::VIM.CustomizationIdentification(
999
+ joinWorkgroup: cust_spec.identity.identification.joinWorkgroup
1000
+ )
1001
+ when cust_spec.identity.identification.joinDomain
1002
+ cust_spec.identity.identification
1003
+ else
1004
+ RbVmomi::VIM.CustomizationIdentification(
1005
+ joinDomain: domain
1006
+ )
1007
+ end
1008
+ end
986
1009
  end
@@ -27,8 +27,9 @@ class Chef::Knife::VsphereVmDiskList < Chef::Knife::BaseVsphereCommand
27
27
  end
28
28
 
29
29
  disks.each do |disk|
30
- puts '%3d %20s %s' % [disk.unitNumber,
30
+ puts '%3d %20s %20s %s' % [disk.unitNumber,
31
31
  disk.deviceInfo.label,
32
+ disk.backing.datastore.name,
32
33
  Filesize.from("#{disk.capacityInKB} KiB").pretty]
33
34
  end
34
35
  end
@@ -28,21 +28,13 @@ class Chef::Knife::VsphereVmMigrate < Chef::Knife::BaseVsphereCommand
28
28
  long: '--resource-pool POOL',
29
29
  description: 'The resource pool into which to put the VM'
30
30
 
31
- def traverse_folders_for_pool(folder, poolname)
32
- children = folder.children.find_all
33
- children.each do |child|
34
- if child.class == RbVmomi::VIM::ClusterComputeResource || child.class == RbVmomi::VIM::ComputeResource || child.class == RbVmomi::VIM::ResourcePool
35
- return child if child.name == poolname
36
- elsif child.class == RbVmomi::VIM::Folder
37
- pool = traverse_folders_for_pool(child, poolname)
38
- return pool if pool
31
+ def find_host_folder(folder, name)
32
+ folder.childEntity.each do |cluster|
33
+ cluster.host.each do |host|
34
+ return host if host.name == name
39
35
  end
40
36
  end
41
- false
42
- end
43
-
44
- def find_host_folder(folder, _type, name)
45
- folder.host.find { |o| o.name == name }
37
+ nil
46
38
  end
47
39
 
48
40
  def run
@@ -62,12 +54,9 @@ class Chef::Knife::VsphereVmMigrate < Chef::Knife::BaseVsphereCommand
62
54
  priority = config[:priority]
63
55
  dest_host = config[:dest_host]
64
56
  ndc = find_datastore(config[:dest_datastore]) || abort('dest-datastore not found')
65
- npool = find_pool(config[:resource_pool])
66
- folderd = dc.hostFolder
67
- pool = traverse_folders_for_pool(folderd, config[:resource_pool]) || abort("Pool #{poolname} not found")
68
- h = find_host_folder(pool, RbVmomi::VIM::HostSystem, dest_host)
69
- migrate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(datastore: ndc, pool: npool, host: h)
70
- # puts migrate_spec.host.name
57
+ pool = find_pool(config[:resource_pool]) if config[:resource_pool]
58
+ dest_host = find_host_folder(dc.hostFolder, dest_host)
59
+ migrate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec(datastore: ndc, pool: pool, host: dest_host)
71
60
  vm.RelocateVM_Task(spec: migrate_spec, priority: priority).wait_for_completion
72
61
  end
73
62
  end
@@ -1,5 +1,5 @@
1
1
  # The main knife-vsphere module.
2
2
  module KnifeVsphere
3
3
  # The version of this gem.
4
- VERSION = '2.0.0'
4
+ VERSION = '2.0.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-vsphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Pagel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-25 00:00:00.000000000 Z
11
+ date: 2017-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: knife-windows
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 0.10.0
89
+ version: '11.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 0.10.0
96
+ version: '11.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -222,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  version: '0'
223
223
  requirements: []
224
224
  rubyforge_project:
225
- rubygems_version: 2.5.1
225
+ rubygems_version: 2.6.11
226
226
  signing_key:
227
227
  specification_version: 4
228
228
  summary: vSphere Support for Knife