Sha256: afa59891292d399fa79ce7b5c879a3a761bf9863e3cd31298e1cc7ebb9cec02a

Contents?: true

Size: 1.9 KB

Versions: 28

Compression:

Stored size: 1.9 KB

Contents

# Copyright (c) 2011-2017 VMware, Inc.  All Rights Reserved.
# SPDX-License-Identifier: MIT

class RbVmomi::VIM::Task
  # Wait for a task to finish.
  # @return +info.result+ on success.
  # @raise +info.error+ on error.
  def wait_for_completion
    wait_until('info.state') { %w(success error).member? info.state }
    case info.state
    when 'success'
      info.result
    when 'error'
      raise info.error
    end
  end
  
  # Wait for all child tasks to finish. If any one child task failed,
  # the exception of the first failing task is thrown.
  # @return [Hash] Map of tasks to their +info.result+ on success.
  # @raise +info.error+ on error.
  def wait_for_childtask_completion
    si = _connection.serviceInstance
    tasks_props = si.wait_for_multiple_tasks(
      ['info.state', 'info.result', 'info.error'],
      self.child_tasks
    )
    Hash[tasks_props.map do |task, props|
      case props['info.state']
      when 'success'
        [task, props['info.result']]
      when 'error'
        raise props['info.error']
      end
    end]
  end

  # Wait for a task to finish, with progress notifications.
  # @return (see #wait_for_completion)
  # @raise (see #wait_for_completion)
  # @yield [info.progress]
  def wait_for_progress
    wait_until('info.state', 'info.progress') do
      yield info.progress if block_given?
      %w(success error).member? info.state
    end
    case info.state
    when 'success'
      info.result
    when 'error'
      raise info.error
    end
  end
  
  # Get child tasks of this task.
  # @return [Array] List of VIM::Task objects
  def child_tasks
    tm = _connection.serviceContent.taskManager
    col = tm.CreateCollectorForTasks(:filter => {
      :rootTaskKey => [self.info.key],
    })
    # XXX: Likely this is not enough and we need to collect pages other
    #      than the latest.
    tasks = col.latestPage.map{|x| x.task}
    col.DestroyCollector()
    tasks
  end
end

Version data entries

28 entries across 26 versions & 3 rubygems

Version Path
rbvmomi2-3.0.0 lib/rbvmomi/vim/Task.rb
rbvmomi-3.0.0 lib/rbvmomi/vim/Task.rb
rbvmomi-2.4.1 lib/rbvmomi/vim/Task.rb
rbvmomi-2.4.0 lib/rbvmomi/vim/Task.rb
rbvmomi-2.3.1 lib/rbvmomi/vim/Task.rb
rbvmomi-2.3.0 lib/rbvmomi/vim/Task.rb
rbvmomi-2.3.0.beta1 lib/rbvmomi/vim/Task.rb
rbvmomi-2.2.0 lib/rbvmomi/vim/Task.rb
rbvmomi-2.1.2 lib/rbvmomi/vim/Task.rb
rbvmomi-2.1.1 lib/rbvmomi/vim/Task.rb
rbvmomi-2.1.0 lib/rbvmomi/vim/Task.rb
rbvmomi-2.0.1 lib/rbvmomi/vim/Task.rb
rbvmomi-2.0.0 lib/rbvmomi/vim/Task.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.4.0/gems/rbvmomi-1.13.0/lib/rbvmomi/vim/Task.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.5.0/gems/rbvmomi-1.13.0/lib/rbvmomi/vim/Task.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.3.0/gems/rbvmomi-1.13.0/lib/rbvmomi/vim/Task.rb
rbvmomi-1.13.0 lib/rbvmomi/vim/Task.rb
rbvmomi-1.12.0 lib/rbvmomi/vim/Task.rb
rbvmomi-1.11.7 lib/rbvmomi/vim/Task.rb
rbvmomi-1.11.6 lib/rbvmomi/vim/Task.rb