Class: Pvectl::Commands::Get::Handlers::Vms
- Inherits:
-
Object
- Object
- Pvectl::Commands::Get::Handlers::Vms
- 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”.
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
-
#describe(name:, node: nil, args: [], vmid: nil) ⇒ Models::Vm
Describes a single VM with comprehensive details.
-
#initialize(repository: nil) ⇒ Vms
constructor
Creates handler with optional repository for dependency injection.
-
#list(node: nil, name: nil, args: [], storage: nil, sort: nil, **_options) ⇒ Array<Models::Vm>
Lists VMs with optional filtering and sorting.
-
#presenter ⇒ Presenters::Vm
Returns presenter for VMs.
-
#selector_class ⇒ Class
Returns selector class for VM filtering.
Constructor Details
#initialize(repository: nil) ⇒ Vms
Creates handler with optional repository for dependency injection.
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.
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.
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, **) vms = repository.list(node: node) vms = vms.select { |vm| vm.name == name } if name vms = apply_sort(vms, sort) if sort vms end |
#presenter ⇒ Presenters::Vm
Returns presenter for VMs.
73 74 75 |
# File 'lib/pvectl/commands/get/handlers/vms.rb', line 73 def presenter Pvectl::Presenters::Vm.new end |