Project

General

Profile

Download (1.07 KB) Statistics
| Branch: | Tag: | Revision:
require 'fog_extensions/vsphere/mini_server'

module FogExtensions
module Vsphere
class MiniServers
def initialize(client, dc)
@client = client
@dc = client.send(:find_datacenters, dc)[0]
end

def all(filters = { })
allvmsbyfolder(dc.vmFolder, nil).map do |entry|
MiniServer.new(entry[:vm], entry[:path], entry[:uuid])
end
end

def allvmsbyfolder(folder, path = nil)
ret = []
unless folder == @dc.vmFolder
path = path.nil? ? folder.name : path + '/' + folder.name
end
folder.childEntity.each do |entity|
if entity.is_a?(RbVmomi::VIM::Folder)
ret.push(*allvmsbyfolder(entity, path))
elsif entity.is_a?(RbVmomi::VIM::VirtualMachine)
config = entity.config
if (config && !config.template && (uuid = config.instanceUuid))
ret.push({ :vm => entity, :path => path, :uuid => uuid})
end
end
end
ret
end

private

attr_reader :client, :dc
end
end
end
(2-2/2)