-
-
Save endzyme/faaa97f6b83ae8bf9cc9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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