Skip to content

Instantly share code, notes, and snippets.

@endzyme
Created November 12, 2012 20:17
Show Gist options
  • Save endzyme/faaa97f6b83ae8bf9cc9 to your computer and use it in GitHub Desktop.
Save endzyme/faaa97f6b83ae8bf9cc9 to your computer and use it in GitHub Desktop.
diff --git a/lib/fog/vsphere/compute.rb b/lib/fog/vsphere/compute.rb
index a154b73..ffa8292 100644
--- a/lib/fog/vsphere/compute.rb
+++ b/lib/fog/vsphere/compute.rb
@@ -50,6 +50,7 @@ module Fog
request :list_datastores
request :get_datastore
request :get_folder
+ request :list_folders
request :create_vm
request :list_vm_interfaces
request :list_vm_volumes
diff --git a/lib/fog/vsphere/models/compute/datacenter.rb b/lib/fog/vsphere/models/compute/datacenter.rb
index a2e3cf5..88dc564 100644
--- a/lib/fog/vsphere/models/compute/datacenter.rb
+++ b/lib/fog/vsphere/models/compute/datacenter.rb
@@ -20,8 +20,16 @@ module Fog
connection.datastores(:datacenter => name)
end
- def folders
- connection.folders(:datacenter => name)
+ def vm_folders
+ connection.folders(:datacenter => name, :type => 'vm')
+ end
+
+ def network_folders
+ connection.folders(:datacenter => name, :type => 'network')
+ end
+
+ def datastore_folders
+ connection.folders(:datacenter => name, :type => 'datastore')
end
def to_s
diff --git a/lib/fog/vsphere/models/compute/folders.rb b/lib/fog/vsphere/models/compute/folders.rb
index eac9626..643a8e0 100644
--- a/lib/fog/vsphere/models/compute/folders.rb
+++ b/lib/fog/vsphere/models/compute/folders.rb
@@ -10,9 +10,22 @@ module Fog
model Fog::Compute::Vsphere::Folder
attr_accessor :datacenter
- def get(id)
+ def all(filters = {})
+ load connection.list_folders(filters.merge(:datacenter => datacenter, :type => type))
+ end
+
+ def get(id, type = 'vm')
requires :datacenter
- new connection.get_folder(id, datacenter)
+ case type[:type]
+ when 'vm'
+ new connection.get_vmfolder(id, datacenter)
+ when 'network'
+ # augment me!
+ when 'datastore'
+ #add moar
+ else
+ raise ArgumentError, "#{type} is unknown"
+ end
end
end
diff --git a/lib/fog/vsphere/requests/compute/get_folder.rb b/lib/fog/vsphere/requests/compute/get_folder.rb
index b944a5e..3482e55 100644
--- a/lib/fog/vsphere/requests/compute/get_folder.rb
+++ b/lib/fog/vsphere/requests/compute/get_folder.rb
@@ -2,15 +2,15 @@ module Fog
module Compute
class Vsphere
class Real
- def get_folder(path, datacenter_name)
- folder = get_raw_folder(path, datacenter_name)
+ def get_vmfolder(path, datacenter_name)
+ folder = get_raw_vmfolder(path, datacenter_name)
raise(Fog::Compute::Vsphere::NotFound) unless folder
folder_attributes(folder, datacenter_name)
end
protected
- def get_raw_folder(path, datacenter_name)
+ def get_raw_vmfolder(path, datacenter_name)
# The required path syntax - 'topfolder/subfolder/anotherfolder'
path_ary = path.split('/')
dc = get_raw_datacenter(datacenter_name)
diff --git a/lib/fog/vsphere/requests/compute/get_virtual_machine.rb b/lib/fog/vsphere/requests/compute/get_virtual_machine.rb
index eda21ef..315f87e 100644
--- a/lib/fog/vsphere/requests/compute/get_virtual_machine.rb
+++ b/lib/fog/vsphere/requests/compute/get_virtual_machine.rb
@@ -23,7 +23,7 @@ module Fog
vm_name = path_ary.pop
path = path_ary.join('/')
# try to find based on VM name if datacenter is set
- folder = get_raw_folder(path, datacenter_name)
+ folder = get_raw_vmfolder(path, datacenter_name)
vm = folder.find(vm_name, RbVmomi::VIM::VirtualMachine)
raise Fog::Compute::Vsphere::NotFound, "#{id} was not found or returned as a folder" unless vm
end
diff --git a/lib/fog/vsphere/requests/compute/list_virtual_machines.rb b/lib/fog/vsphere/requests/compute/list_virtual_machines.rb
index 9b1899e..8dfb4a3 100644
--- a/lib/fog/vsphere/requests/compute/list_virtual_machines.rb
+++ b/lib/fog/vsphere/requests/compute/list_virtual_machines.rb
@@ -19,7 +19,7 @@ module Fog
def list_all_virtual_machines_in_folder(path, datacenter_name)
# backwards compatibility
- folder = get_raw_folder(path, datacenter_name)
+ folder = get_raw_vmfolder(path, datacenter_name)
# This should be efficient since we're not obtaining properties
virtual_machines = folder.children.inject([]) do |ary, child|
diff --git a/lib/fog/vsphere/requests/compute/vm_clone.rb b/lib/fog/vsphere/requests/compute/vm_clone.rb
index ef7b8ba..96eb0b9 100644
--- a/lib/fog/vsphere/requests/compute/vm_clone.rb
+++ b/lib/fog/vsphere/requests/compute/vm_clone.rb
@@ -91,7 +91,7 @@ module Fog
# Options['dest_folder']<~String>
# Grab the destination folder object if it exists else use cloned mach
- dest_folder = get_raw_folder(options['dest_folder']) if options.has_key?('dest_folder')
+ dest_folder = get_raw_vmfolder(options['dest_folder']) if options.has_key?('dest_folder')
dest_folder ||= vm_mob_ref.parent
# Options['resource_pool']<~Array>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment