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
|