fog-vsphere 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3ecf2e2e7786673208a3301191bc8a2ccd5fc1f
4
- data.tar.gz: c4282d6b04ab981c10e65d63ad071091743ece0e
3
+ metadata.gz: 96a65cbc2b8dff64e149f6e108ef19d5ddaa5011
4
+ data.tar.gz: a531b24b12fe6410476a4532f9c4c5584125bb12
5
5
  SHA512:
6
- metadata.gz: 49594f0acf240a9e7e8e49d8a0729f040c714de249e610c73cb6e2212e6a51c1cdc2340ea8bf493a2edfeb21f4e85fe3bcae2880dffe19a631256d8f7c1ca085
7
- data.tar.gz: 19532eac88ce221bb6d0bdeef0511f399552625d5677faba6ca0c024bb0ebd24112d54acfd821d80d005fa76ef678e9e6f30464dfefb24c7d47cf5b6bcb43e85
6
+ metadata.gz: a323cdbb8d6541a7a9597e9bf7628b71e13993a322334ed4beeec504ac68ec87a4d7342a850213c2f6b0f352fceb5343cddab989f5cb05556aba748795c0e834
7
+ data.tar.gz: d52f7e564b586cd2eb5727b260f5e51c2394486175d55a975a69d72fd3591acf727a85032bf92ef272d06224b1b15f8431c4e7c1bdebf5c5105b61c38d5d5a3c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## v0.5.0 1/18/2016
2
+
3
+ * Fix wrong string assignment in storage pods
4
+ * Pass what we know about the VM from the folder to VM creation
5
+ * Improve performance of recursive get_vm_by_name
6
+ * Ensure folder.vms only searches the VMs in that folder
7
+ * Add recursive parameter to folder.vms to search recursively
8
+
1
9
  ## v0.4.0 12/15/2015
2
10
 
3
11
  * Fix cannot create vm on "Resources" resource pool
@@ -10,9 +10,10 @@ module Fog
10
10
  attribute :path
11
11
  attribute :type
12
12
 
13
- def vms
13
+ # Pass :recursive => true to get a Servers object that searches for VM names recursively
14
+ def vms(options = {})
14
15
  return [] if type.to_s != 'vm'
15
- service.servers(:folder => path, :datacenter => datacenter)
16
+ service.servers(:folder => path, :datacenter => datacenter, :recursive => options[:recursive])
16
17
  end
17
18
 
18
19
  def to_s
@@ -10,6 +10,7 @@ module Fog
10
10
  attr_accessor :cluster
11
11
  attr_accessor :resource_pool
12
12
  attr_accessor :folder
13
+ attr_accessor :recursive
13
14
 
14
15
  # 'folder' => '/Datacenters/vm/Jeff/Templates' will be MUCH faster.
15
16
  # than simply listing everything.
@@ -19,17 +20,29 @@ module Fog
19
20
  :cluster => cluster,
20
21
  :network => network,
21
22
  :resource_pool => resource_pool,
22
- :folder => folder
23
+ :folder => folder,
24
+ :recursive => recursive,
23
25
  }.merge(filters)
24
26
 
25
27
  load service.list_virtual_machines(f)
26
28
  end
27
29
 
28
30
  def get(id, datacenter = nil)
29
- new service.get_virtual_machine id, datacenter
31
+ new service.get_virtual_machine id, datacenter, folder, recursive
30
32
  rescue Fog::Compute::Vsphere::NotFound
31
33
  nil
32
34
  end
35
+
36
+ # Pass attributes we know about down to any VM we're creating
37
+ def new(attributes = {})
38
+ super({
39
+ :datacenter => datacenter,
40
+ :path => folder,
41
+ :cluster => cluster,
42
+ :resource_pool => resource_pool,
43
+ }.merge(attributes))
44
+ end
45
+
33
46
  end
34
47
  end
35
48
  end
@@ -245,7 +245,7 @@ module Fog
245
245
  end
246
246
  # If we deploy the vm on a storage pod, datastore has to be an empty string
247
247
  if storage_pod
248
- datastore ''
248
+ datastore = ''
249
249
  else
250
250
  datastore = "[#{disk.datastore}]"
251
251
  end
@@ -53,9 +53,13 @@ module Fog
53
53
  :parent => folder.parent.name,
54
54
  :datacenter => datacenter_name,
55
55
  :type => folder_type(folder),
56
- :path => "/"+folder.path.map(&:last).join('/'),
56
+ :path => folder_path(folder),
57
57
  }
58
58
  end
59
+
60
+ def folder_path(folder)
61
+ "/"+folder.path.map(&:last).join('/')
62
+ end
59
63
 
60
64
  def folder_type(folder)
61
65
  types = folder.childType
@@ -2,14 +2,14 @@ module Fog
2
2
  module Compute
3
3
  class Vsphere
4
4
  class Real
5
- def get_virtual_machine(id, datacenter_name = nil)
5
+ def get_virtual_machine(id, datacenter_name = nil, folder = nil, recursive = false)
6
6
  # The larger the VM list the longer it will take if not searching based on UUID.
7
- convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, datacenter_name))
7
+ convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, datacenter_name, folder, recursive))
8
8
  end
9
9
 
10
10
  protected
11
11
 
12
- def get_vm_ref(id, dc = nil)
12
+ def get_vm_ref(id, dc = nil, folder = nil, recursive = false)
13
13
  raw_datacenter = find_raw_datacenter(dc) if dc
14
14
  vm = case is_uuid?(id)
15
15
  # UUID based
@@ -20,29 +20,36 @@ module Fog
20
20
  else
21
21
  # try to find based on VM name
22
22
  if dc
23
- get_vm_by_name(id, dc)
23
+ get_vm_by_name(id, dc, folder, recursive)
24
24
  else
25
- raw_datacenters.map { |d| get_vm_by_name(id, d["name"])}.compact.first
25
+ raw_datacenters.map { |d| get_vm_by_name(id, d["name"], folder, recursive)}.compact.first
26
26
  end
27
27
  end
28
28
  vm ? vm : raise(Fog::Compute::Vsphere::NotFound, "#{id} was not found")
29
29
  end
30
30
 
31
- def get_vm_by_name(name, dc)
32
- vms = raw_list_all_virtual_machines(dc)
31
+ def get_vm_by_name(name, dc, folder, recursive)
32
+ if folder
33
+ # This returns an Enumerator, which when called with .find will
34
+ # search only until it finds the VM we're looking for
35
+ vms = raw_list_all_virtual_machines_in_folder(folder, dc, recursive)
36
+ else
37
+ vms = raw_list_all_virtual_machines(dc)
38
+ end
33
39
 
34
- if name.include?('/')
40
+ if name.include?('/')
35
41
  folder = File.dirname(name)
36
42
  basename = File.basename(name)
37
- vms.keep_if { |v| v["name"] == basename && v.parent.pretty_path.include?(folder) }.first
43
+ vms.find { |v| v["name"] == basename && v.parent.pretty_path.include?(folder) }
38
44
  else
39
- vms.keep_if { |v| v["name"] == name }.first
45
+ vms.find { |v| v["name"] == name }
40
46
  end
41
- end
47
+ end
48
+
42
49
  end
43
50
 
44
51
  class Mock
45
- def get_virtual_machine(id, datacenter_name = nil)
52
+ def get_virtual_machine(id, datacenter_name = nil, folder = nil, recursive = false)
46
53
  if is_uuid?(id)
47
54
  vm = list_virtual_machines({ 'instance_uuid' => id, 'datacenter' => datacenter_name }).first
48
55
  else
@@ -11,7 +11,7 @@ module Fog
11
11
  if options['instance_uuid'] then
12
12
  [get_virtual_machine(options['instance_uuid'])]
13
13
  elsif options[:folder] && options[:datacenter] then
14
- list_all_virtual_machines_in_folder(options[:folder], options[:datacenter])
14
+ list_all_virtual_machines_in_folder(options[:folder], options[:datacenter], options[:recursive])
15
15
  else
16
16
  list_all_virtual_machines(options)
17
17
  end
@@ -20,15 +20,33 @@ module Fog
20
20
 
21
21
  private
22
22
 
23
- def list_all_virtual_machines_in_folder(path, datacenter_name)
24
- folder = get_raw_vmfolder(path, datacenter_name)
25
-
26
- vms = folder.children.grep(RbVmomi::VIM::VirtualMachine)
23
+ def list_all_virtual_machines_in_folder(path, datacenter_name, recursive)
24
+ vms = raw_list_all_virtual_machines_in_folder(path, datacenter_name, recursive).to_a
27
25
  # remove all template based virtual machines
28
26
  vms.delete_if { |v| v.config.nil? or v.config.template }
29
27
  vms.map(&method(:convert_vm_mob_ref_to_attr_hash))
30
28
  end
31
-
29
+
30
+ def raw_list_all_virtual_machines_in_folder(path, datacenter_name, recursive)
31
+ folder = get_raw_vmfolder(path, datacenter_name)
32
+ folder_enumerator(folder, recursive)
33
+ end
34
+
35
+ # An enumerator for a folder. Enumerates all the VMs in the folder, recursively if
36
+ # passed recursive=true
37
+ def folder_enumerator(raw_folder, recursive)
38
+ Enumerator.new do |yielder|
39
+ raw_folder.children.each do |child|
40
+ case child
41
+ when RbVmomi::VIM::Folder
42
+ folder_enumerator(child, true).each {|item| yielder.yield item} if recursive
43
+ when RbVmomi::VIM::VirtualMachine
44
+ yielder.yield child
45
+ end
46
+ end
47
+ end
48
+ end
49
+
32
50
  def list_all_virtual_machines(options = { })
33
51
  raw_vms = raw_list_all_virtual_machines(options[:datacenter])
34
52
  vms = convert_vm_view_to_attr_hash(raw_vms)
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Vsphere
3
- VERSION = '0.4.0'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-vsphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - J.R. Garcia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-15 00:00:00.000000000 Z
11
+ date: 2016-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog-core
@@ -281,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
281
  version: '0'
282
282
  requirements: []
283
283
  rubyforge_project:
284
- rubygems_version: 2.4.8
284
+ rubygems_version: 2.5.1
285
285
  signing_key:
286
286
  specification_version: 4
287
287
  summary: Module for the 'fog' gem to support VMware vSphere.