Class: Pvectl::Services::MoveDisk

Inherits:
Object
  • Object
show all
Defined in:
lib/pvectl/services/move_disk.rb

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.

Examples:

Move VM disk async (default)

service = MoveDisk.new(
  vm_repository: vm_repo,
  container_repository: ct_repo,
  task_repository: task_repo
)
result = service.execute(:vm, vm, disk: "scsi0", target_storage: "storage2")

Move container volume with –wait

service = MoveDisk.new(..., options: { wait: true })
result = service.execute(:container, ct, disk: "rootfs", target_storage: "storage2")

Constant Summary collapse

DEFAULT_TIMEOUT =
600

Instance Method Summary collapse

Constructor Details

#initialize(vm_repository:, container_repository:, task_repository:, options: {}) ⇒ MoveDisk

Creates a new MoveDisk service.

Parameters:



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
  @options = options
end

Instance Method Details

#execute(resource_type, resource, disk:, target_storage:) ⇒ Models::VmOperationResult, Models::ContainerOperationResult

Executes the move operation on a single resource.

Parameters:

  • resource_type (Symbol)

    :vm or :container

  • resource (Models::Vm, Models::Container)

    resource to operate on

  • disk (String)

    disk/volume identifier (e.g., “scsi0”, “rootfs”)

  • target_storage (String)

    destination storage ID

Returns:



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