Class: Pvectl::Repositories::Task
- 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.
Instance Method Summary collapse
-
#find(upid) ⇒ Models::Task
Finds a task by UPID.
-
#get(id) ⇒ Object
Not implemented - use find instead.
-
#list ⇒ Object
Not implemented - tasks are looked up by UPID, not listed.
-
#wait(upid, timeout: 60, interval: 2) ⇒ Models::Task
Waits for a task to complete.
Methods inherited from Base
Constructor Details
This class inherits a constructor from Pvectl::Repositories::Base
Instance Method Details
#find(upid) ⇒ Models::Task
Finds a task by UPID.
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 |
#list ⇒ Object
Not implemented - tasks are looked up by UPID, not listed
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.
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 |