Class: RbVmomi::VIM::ServiceInstance

Inherits:
Object
  • Object
show all
Defined in:
lib/rbvmomi/extensions.rb

Instance Method Summary collapse

Instance Method Details

#find_datacenter(path = nil) ⇒ Object



269
270
271
272
273
274
275
# File 'lib/rbvmomi/extensions.rb', line 269

def find_datacenter path=nil
  if path
    content.rootFolder.traverse path, VIM::Datacenter
  else
    content.rootFolder.childEntity.grep(VIM::Datacenter).first
  end
end

#wait_for_multiple_tasks(interested, tasks) ⇒ Object



277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# File 'lib/rbvmomi/extensions.rb', line 277

def wait_for_multiple_tasks interested, tasks
  version = ''
  interested = (interested + ['info.state']).uniq
  task_props = Hash.new { |h,k| h[k] = {} }

  filter = @soap.propertyCollector.CreateFilter :spec => {
    :propSet => [{ :type => 'Task', :all => false, :pathSet => interested }],
    :objectSet => tasks.map { |x| { :obj => x } },
  }, :partialUpdates => false

  begin
    until task_props.size == tasks.size and task_props.all? { |k,h| %w(success error).member? h['info.state'] }
      result = @soap.propertyCollector.WaitForUpdates(version: version)
      version = result.version
      os = result.filterSet[0].objectSet

      os.each do |o|
        changes = Hash[o.changeSet.map { |x| [x.name, x.val] }]

        interested.each do |k|
          task = tasks.find { |x| x._ref == o.obj._ref }
          task_props[task][k] = changes[k] if changes.member? k
        end
      end

      yield task_props
    end
  ensure
    @soap.propertyCollector.CancelWaitForUpdates
    filter.DestroyPropertyFilter
  end
end