Class: Pvectl::Repositories::Task

Inherits:
Base
  • Object
show all
Defined in:
lib/pvectl/repositories/task.rb

Overview

Repository for Proxmox tasks (async operations).

Tasks are identified by UPID (Unique Process ID) which encodes the node name, allowing us to query the correct node.

Examples:

Finding a task

repo = Task.new(connection)
task = repo.find("UPID:pve1:000ABC:...")
task.completed? #=> true/false

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from Pvectl::Repositories::Base

Instance Method Details

#find(upid) ⇒ Models::Task

Finds a task by UPID.

Parameters:

  • upid (String)

    Unique Process ID

Returns:



22
23
24
25
26
27
# File 'lib/pvectl/repositories/task.rb', line 22

def find(upid)
  node = extract_node_from_upid(upid)
  response = connection.client["nodes/#{node}/tasks/#{CGI.escape(upid)}/status"].get
  data = extract_data(response)
  build_model(data.merge(upid: upid))
end

#get(id) ⇒ Object

Not implemented - use find instead



56
57
58
# File 'lib/pvectl/repositories/task.rb', line 56

def get(id)
  find(id)
end

#listObject

Not implemented - tasks are looked up by UPID, not listed

Raises:

  • (NotImplementedError)


51
52
53
# File 'lib/pvectl/repositories/task.rb', line 51

def list
  raise NotImplementedError, "Use find(upid) to get task status"
end

#wait(upid, timeout: 60, interval: 2) ⇒ Models::Task

Waits for a task to complete.

Parameters:

  • upid (String)

    Task UPID

  • timeout (Integer) (defaults to: 60)

    Max wait time in seconds

  • interval (Integer) (defaults to: 2)

    Poll interval in seconds

Returns:

Raises:

  • (Timeout::Error)

    if task doesn’t complete in time



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/pvectl/repositories/task.rb', line 36

def wait(upid, timeout: 60, interval: 2)
  deadline = Time.now + timeout
  loop do
    task = find(upid)
    return task if task.completed?

    if Time.now > deadline
      raise Timeout::Error, "Task #{upid} timed out after #{timeout}s"
    end

    sleep interval
  end
end