Class: VsphereHelper
- Inherits:
-
Object
- Object
- VsphereHelper
- Defined in:
- lib/vmreverter/hypervisor/vsphere_helper.rb
Overview
Apache Licensed - (github/puppetlabs) ripped from puppet_acceptance. ** See Legal notes Changes include namespace swaps, and refactoring
Class Method Summary collapse
-
.load_config(authfile) ⇒ Object
Class methods.
Instance Method Summary collapse
- #close_connection ⇒ Object
- #find_customization(name) ⇒ Object
- #find_datastore(datastorename) ⇒ Object
- #find_folder(foldername) ⇒ Object
- #find_pool(poolname) ⇒ Object
-
#find_snapshot(vm, snapname) ⇒ Object
Instance Methods.
-
#find_vms(names, connection = @connection) ⇒ Object
an easier wrapper around the horrid PropertyCollector interface, necessary for searching VMs in all Datacenters that may be nested within folders of arbitrary depth returns a hash array of <name> => <VirtualMachine ManagedObjects>.
- #get_base_vm_container_from(connection) ⇒ Object
-
#initialize(vInfo, logger) ⇒ VsphereHelper
constructor
A new instance of VsphereHelper.
- #search_child_snaps(tree, snapname) ⇒ Object
Constructor Details
#initialize(vInfo, logger) ⇒ VsphereHelper
Returns a new instance of VsphereHelper.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 29 def initialize(vInfo, logger) @logger = logger begin require 'rbvmomi' rescue LoadError raise "Unable to load RbVmomi, please ensure its installed" end # If you don’t have trusted SSL certificates installed on the host you’re connecting to, #you’ll get an +OpenSSL::SSL::SSLError+ “certificate verify failed”. #You can work around this by using the :insecure option to +RbVmomi::VIM.connect+. @connection = RbVmomi::VIM.connect :host => vInfo[:server], :user => vInfo[:user], :password => vInfo[:pass], :insecure => true end |
Class Method Details
.load_config(authfile) ⇒ Object
Class methods
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 7 def self.load_config authfile vsphere_credentials = {} if File.exists?(authfile) vInfo = YAML.load_file(authfile) elsif File.exists?( File.join(ENV['HOME'], '.fog') ) vInfo = YAML.load_file( File.join(ENV['HOME'], '.fog') ) else report_and_raise(@logger, RuntimeError.new("Couldn't authentication for vSphere in auth file !"), "VSphereHelper::load_config") end begin vsphere_credentials[:server] = vInfo[:default][:vsphere_server] vsphere_credentials[:user] = vInfo[:default][:vsphere_username] vsphere_credentials[:pass] = vInfo[:default][:vsphere_password] rescue report_and_raise(@logger, RuntimeError.new("Couldn't load authentication for vSphere in auth file !"), "VSphereHelper::load_config") end return vsphere_credentials end |
Instance Method Details
#close_connection ⇒ Object
178 179 180 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 178 def close_connection @connection.close end |
#find_customization(name) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 64 def find_customization name csm = @connection.serviceContent.customizationSpecManager begin customizationSpec = csm.GetCustomizationSpec({:name => name}).spec rescue customizationSpec = nil end return customizationSpec end |
#find_datastore(datastorename) ⇒ Object
127 128 129 130 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 127 def find_datastore datastorename datacenter = @connection.serviceInstance.find_datacenter datacenter.find_datastore(datastorename) end |
#find_folder(foldername) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 132 def find_folder foldername datacenter = @connection.serviceInstance.find_datacenter base = datacenter.vmFolder folders = foldername.split('/') folders.each do |folder| case base when RbVmomi::VIM::Folder base = base.childEntity.find { |f| f.name == folder } else abort "Unexpected object type encountered (#{base.class}) while finding folder" end end base end |
#find_pool(poolname) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 148 def find_pool poolname datacenter = @connection.serviceInstance.find_datacenter base = datacenter.hostFolder pools = poolname.split('/') pools.each do |pool| case base when RbVmomi::VIM::Folder base = base.childEntity.find { |f| f.name == pool } when RbVmomi::VIM::ClusterComputeResource base = base.resourcePool.resourcePool.find { |f| f.name == pool } when RbVmomi::VIM::ResourcePool base = base.resourcePool.find { |f| f.name == pool } else abort "Unexpected object type encountered (#{base.class}) while finding resource pool" end end base = base.resourcePool unless base.is_a?(RbVmomi::VIM::ResourcePool) and base.respond_to?(:resourcePool) base end |
#find_snapshot(vm, snapname) ⇒ Object
Instance Methods
48 49 50 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 48 def find_snapshot vm, snapname search_child_snaps vm.snapshot.rootSnapshotList, snapname end |
#find_vms(names, connection = @connection) ⇒ Object
an easier wrapper around the horrid PropertyCollector interface, necessary for searching VMs in all Datacenters that may be nested within folders of arbitrary depth returns a hash array of <name> => <VirtualMachine ManagedObjects>
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 80 def find_vms names, connection = @connection names = names.is_a?(Array) ? names : [ names ] containerView = get_base_vm_container_from connection propertyCollector = connection.propertyCollector objectSet = [{ :obj => containerView, :skip => true, :selectSet => [ RbVmomi::VIM::TraversalSpec.new({ :name => 'gettingTheVMs', :path => 'view', :skip => false, :type => 'ContainerView' }) ] }] propSet = [{ :pathSet => [ 'name' ], :type => 'VirtualMachine' }] results = propertyCollector.RetrievePropertiesEx({ :specSet => [{ :objectSet => objectSet, :propSet => propSet }], :options => { :maxObjects => nil } }) vms = {} results.objects.each do |result| name = result.propSet.first.val next unless names.include? name vms[name] = result.obj end while results.token do results = propertyCollector.ContinueRetrievePropertiesEx({:token => results.token}) results.objects.each do |result| name = result.propSet.first.val next unless names.include? name vms[name] = result.obj end end vms end |
#get_base_vm_container_from(connection) ⇒ Object
169 170 171 172 173 174 175 176 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 169 def get_base_vm_container_from connection viewManager = connection.serviceContent.viewManager viewManager.CreateContainerView({ :container => connection.serviceContent.rootFolder, :recursive => true, :type => [ 'VirtualMachine' ] }) end |
#search_child_snaps(tree, snapname) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/vmreverter/hypervisor/vsphere_helper.rb', line 52 def search_child_snaps tree, snapname snapshot = nil tree.each do |child| if child.name == snapname snapshot ||= child.snapshot else snapshot ||= search_child_snaps child.childSnapshotList, snapname end end snapshot end |