# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 153 def extract_architecture(text) 'x86_64' if text.include?('64-bit') 'i386' if text.include?('32-bit') end
This helper will try to find a Datastore object in all Datacenters. Datastore is used to place instance on create to correct place
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 77 def find_datastore(credentials, name) vsphere = new_client(credentials) safely do rootFolder = vsphere.serviceInstance.content.rootFolder rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).collect do |dc| list_datastores(dc.datastoreFolder).each do |d| if d.name == name return d end end end end end
Find a ResourcePool object associated by given Datastore ResourcePool is defined for Datacenter and is used for launching a new instance
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 60 def find_resource_pool(credentials, name) vsphere = new_client(credentials) safely do rootFolder = vsphere.serviceInstance.content.rootFolder dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).select do |dc| dc.datastoreFolder.childEntity.find { |d| d.name == name }.nil? == false end.flatten.compact.first dc = rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).first dc.hostFolder.childEntity.collect.first.resourcePool end end
Find a VirtualMachine traversing through all Datastores and Datacenters
This helper will return a Hash: { :datastore => NAME_OF_DS, :instance => VM } Returning datastore is necesarry for constructing a correct realm for an instance
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 29 def find_vm(credentials, name) vsphere = new_client(credentials) safely do rootFolder = vsphere.serviceInstance.content.rootFolder vm = {} rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).each do |dc| dslist = list_datastores(dc.datastoreFolder) dslist.each do |datastore| vm[:instance] = datastore.vm.find { |x| x.name == name } if vm[:instance] vm[:datastore] = datastore.name break end stored_tasks(datastore, vsphere) do |task| if task.info.entity.class == RbVmomi::VIM::VirtualMachine and ['queued', 'running'].member? task.info.state vm = { :stored_instance => load_serialized_instance(datastore,task.info.key), :datastore => datastore.name } end end end break if [:datastore] end vm end end
This helper will traverse across all datacenters and folders and gather all datastores available on vSphere
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 114 def list_datastores(df) datastores = [] df.childEntity.each do |object| if object.class.to_s == 'Folder' datastores += list_datastores(object) else datastores << object end end datastores end
This helper will traverse across all datacenters and datastores and gather all virtual machines available on vSphere
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 94 def list_virtual_machines(credentials) vsphere = new_client(credentials) vms = [] rootFolder = vsphere.serviceInstance.content.rootFolder rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter).each do |dc| list_datastores(dc.datastoreFolder).each do |datastore| vms += datastore.vm.collect { |vm| { :instance => vm, :datastore => datastore.name } unless vm.nil? } stored_tasks(datastore, vsphere) do |task| if task.info.entity.class == RbVmomi::VIM::VirtualMachine vms << { :stored_instance => load_serialized_instance(datastore, task.info.key), :datastore => datastore.name } end end end end vms.flatten.compact end
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 133 def load_serialized_instance(datastore, task_key) VSphere::FileManager::load_mapping(datastore, task_key) end
Map given instance to task. Task name is used as a filename.
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 128 def map_task_to_instance(datastore, task_key, new_instance) VSphere::FileManager::store_mapping!(datastore, YAML::dump(new_instance).to_s, task_key) new_instance end
Yield all tasks if they are included in mapper storage directory.
# File lib/deltacloud/drivers/vsphere/vsphere_client.rb, line 138 def stored_tasks(datastore, vsphere) tasks = VSphere::FileManager::list_mappings(datastore) return [] if tasks.empty? vsphere.serviceInstance.content.taskManager.recentTask.each do |task| if tasks.include?(task.info.key) and ['queued', 'running'].member?(task.info.state) yield task tasks.delete(task.info.key) end end # Delete old left tasks tasks.select { |f| f =~ /task-(\d+)/ }.each do |task| VSphere::FileManager::delete_mapping!(datastore, task) end end
Generated with the Darkfish Rdoc Generator 2.