Class: Pvectl::Commands::Get::Handlers::Vms

Inherits:
Object
  • Object
show all
Includes:
ResourceHandler
Defined in:
lib/pvectl/commands/get/handlers/vms.rb

Overview

Handler for listing QEMU virtual machines.

Implements ResourceHandler interface for the “vms” resource type. Uses Repositories::Vm for data access and Presenters::Vm for formatting.

Registered with ResourceRegistry on file load for both “vms” and “vm”.

Examples:

Using via ResourceRegistry

handler = ResourceRegistry.for("vms")
vms = handler.list(node: "pve1")
presenter = handler.presenter

See Also:

Constant Summary collapse

VMID_PATTERN =

VMID validation pattern (1-999999999)

/\A[1-9]\d{0,8}\z/
SORT_FIELDS =

Sort field mappings. Negative values for descending sort (higher values first).

{
  "name" => ->(v) { v.name || "" },
  "node" => ->(v) { v.node || "" },
  "cpu" => ->(v) { -(v.cpu || 0) },
  "memory" => ->(v) { -(v.mem || 0) },
  "disk" => ->(v) { -(v.disk || 0) },
  "netin" => ->(v) { -(v.netin || 0) },
  "netout" => ->(v) { -(v.netout || 0) }
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(repository: nil) ⇒ Vms

Creates handler with optional repository for dependency injection.

Parameters:

  • repository (Repositories::Vm, nil) (defaults to: nil)

    repository (default: create new)



44
45
46
# File 'lib/pvectl/commands/get/handlers/vms.rb', line 44

def initialize(repository: nil)
  @repository = repository
end

Instance Method Details

#describe(name:, node: nil, args: [], vmid: nil) ⇒ Models::Vm

Describes a single VM with comprehensive details.

Parameters:

  • name (String)

    VMID as string (consistent with handler interface)

  • node (String, nil) (defaults to: nil)

    unused, for API consistency

Returns:

Raises:



84
85
86
87
88
89
90
91
92
# File 'lib/pvectl/commands/get/handlers/vms.rb', line 84

def describe(name:, node: nil, args: [], vmid: nil)
  raise ArgumentError, "Invalid VMID: must be positive integer (1-999999999)" unless valid_vmid?(name)

  vmid = name.to_i
  vm = repository.describe(vmid)
  raise Pvectl::ResourceNotFoundError, "VM not found: #{vmid}" if vm.nil?

  vm
end

#list(node: nil, name: nil, args: [], storage: nil, sort: nil, **_options) ⇒ Array<Models::Vm>

Lists VMs with optional filtering and sorting.

Parameters:

  • node (String, nil) (defaults to: nil)

    filter by node name

  • name (String, nil) (defaults to: nil)

    filter by VM name

  • args (Array<String>) (defaults to: [])

    unused, for interface compatibility

  • storage (String, nil) (defaults to: nil)

    unused, for interface compatibility

  • sort (String, nil) (defaults to: nil)

    sort field (name, node, cpu, memory, disk, netin, netout)

Returns:



63
64
65
66
67
68
# File 'lib/pvectl/commands/get/handlers/vms.rb', line 63

def list(node: nil, name: nil, args: [], storage: nil, sort: nil, **_options)
  vms = repository.list(node: node)
  vms = vms.select { |vm| vm.name == name } if name
  vms = apply_sort(vms, sort) if sort
  vms
end

#presenterPresenters::Vm

Returns presenter for VMs.

Returns:



73
74
75
# File 'lib/pvectl/commands/get/handlers/vms.rb', line 73

def presenter
  Pvectl::Presenters::Vm.new
end

#selector_classClass

Returns selector class for VM filtering.

Returns:

  • (Class)

    Selectors::Vm



51
52
53
# File 'lib/pvectl/commands/get/handlers/vms.rb', line 51

def selector_class
  Pvectl::Selectors::Vm
end