Class: Pvectl::Services::MoveDisk
- Inherits:
-
Object
- Object
- Pvectl::Services::MoveDisk
- Defined in:
- lib/pvectl/services/move_disk.rb,
sig/pvectl/services/move_disk.rbs
Overview
Orchestrates moving a VM disk or container volume to a different storage on the same node.
Operates on one resource at a time (single VM or single container). Async mode (default): returns UPID immediately, no blocking. Sync mode (--wait): polls Task until completion or timeout.
Constant Summary collapse
- DEFAULT_TIMEOUT =
600
Instance Method Summary collapse
-
#build_result(resource, **attrs) ⇒ Models::VmOperationResult, Models::ContainerOperationResult
Builds typed OperationResult for the current resource type.
-
#execute(resource_type, resource, disk:, target_storage:) ⇒ Models::VmOperationResult, Models::ContainerOperationResult
Executes the move operation on a single resource.
-
#initialize(vm_repository:, container_repository:, task_repository:, options: {}) ⇒ MoveDisk
constructor
Creates a new MoveDisk service.
-
#invoke_repository(resource, disk, target_storage) ⇒ String
Calls the appropriate repository method based on resource type.
-
#move_single(resource, disk, target_storage) ⇒ Models::VmOperationResult, Models::ContainerOperationResult
Performs the move on a single resource and builds the result.
-
#timeout ⇒ Integer
Returns configured timeout.
Constructor Details
#initialize(vm_repository:, container_repository:, task_repository:, options: {}) ⇒ MoveDisk
Creates a new MoveDisk service.
33 34 35 36 37 38 |
# File 'lib/pvectl/services/move_disk.rb', line 33 def initialize(vm_repository:, container_repository:, task_repository:, options: {}) @vm_repository = vm_repository @container_repository = container_repository @task_repository = task_repository = end |
Instance Method Details
#build_result(resource, **attrs) ⇒ Models::VmOperationResult, Models::ContainerOperationResult
Builds typed OperationResult for the current resource type.
116 117 118 119 120 121 122 |
# File 'lib/pvectl/services/move_disk.rb', line 116 def build_result(resource, **attrs) if @resource_type == :vm Models::VmOperationResult.new(vm: resource, **attrs) else Models::ContainerOperationResult.new(container: resource, **attrs) end end |
#execute(resource_type, resource, disk:, target_storage:) ⇒ Models::VmOperationResult, Models::ContainerOperationResult
Executes the move operation on a single resource.
47 48 49 50 |
# File 'lib/pvectl/services/move_disk.rb', line 47 def execute(resource_type, resource, disk:, target_storage:) @resource_type = resource_type move_single(resource, disk, target_storage) end |
#invoke_repository(resource, disk, target_storage) ⇒ String
Calls the appropriate repository method based on resource type.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/pvectl/services/move_disk.rb', line 88 def invoke_repository(resource, disk, target_storage) if @resource_type == :vm @vm_repository.move_disk( resource.vmid, resource.node, disk, target_storage, format: [:format], delete: [:delete_source] ? true : false, bwlimit: [:bandwidth] ) else @container_repository.move_volume( resource.vmid, resource.node, disk, target_storage, delete: [:delete_source] ? true : false, bwlimit: [:bandwidth] ) end end |
#move_single(resource, disk, target_storage) ⇒ Models::VmOperationResult, Models::ContainerOperationResult
Performs the move on a single resource and builds the result.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/pvectl/services/move_disk.rb', line 60 def move_single(resource, disk, target_storage) upid = invoke_repository(resource, disk, target_storage) if [:wait] task = @task_repository.wait(upid, timeout: timeout) build_result(resource, operation: :move_disk, task: task, success: task.successful?) else build_result(resource, operation: :move_disk, task_upid: upid, success: :pending) end rescue StandardError => e build_result(resource, operation: :move_disk, success: false, error: e.) end |
#timeout ⇒ Integer
Returns configured timeout.
127 128 129 |
# File 'lib/pvectl/services/move_disk.rb', line 127 def timeout [:timeout] || DEFAULT_TIMEOUT end |