Class: Pvectl::Repositories::Task
- Defined in:
- lib/pvectl/repositories/task.rb,
sig/pvectl/repositories/task.rbs
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 Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#build_model(data) ⇒ Models::Task
Builds Task model from API response.
-
#extract_node_from_upid(upid) ⇒ String
Extracts node name from UPID.
-
#find(upid) ⇒ Models::Task
Finds a task by UPID.
-
#get(id) ⇒ Models::Task
Not implemented - use find instead.
-
#list ⇒ bot
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
#extract_data, #initialize, #models_from, #unwrap
Constructor Details
This class inherits a constructor from Pvectl::Repositories::Base
Instance Method Details
#build_model(data) ⇒ Models::Task
Builds Task model from API response.
66 67 68 |
# File 'lib/pvectl/repositories/task.rb', line 66 def build_model(data) Models::Task.new(data) end |
#extract_node_from_upid(upid) ⇒ String
Extracts node name from UPID. UPID format: UPID:node:pid:pstart:starttime:type:id:user:
77 78 79 |
# File 'lib/pvectl/repositories/task.rb', line 77 def extract_node_from_upid(upid) upid.split(":")[1] end |
#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) ⇒ Models::Task
Not implemented - use find instead
56 57 58 |
# File 'lib/pvectl/repositories/task.rb', line 56 def get(id) find(id) end |
#list ⇒ bot
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 |