Class: Pvectl::Commands::Get::Handlers::Nodes

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

Overview

Handler for listing Proxmox cluster nodes.

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

Supports filtering by status and sorting by various fields.

Examples:

Using via ResourceRegistry

handler = ResourceRegistry.for("nodes")
nodes = handler.list(filter: { status: "online" }, sort: "memory")

See Also:

Constant Summary collapse

SORT_FIELDS =

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

{
  "name" => ->(n) { n.name },
  "status" => ->(n) { n.status },
  "cpu" => ->(n) { -(n.cpu || 0) },
  "memory" => ->(n) { -(n.mem || 0) },
  "disk" => ->(n) { -(n.disk || 0) },
  "guests" => ->(n) { -n.guests_total },
  "uptime" => ->(n) { -(n.uptime || 0) }
}.freeze

Instance Method Summary collapse

Methods included from ResourceHandler

#selector_class

Constructor Details

#initialize(repository: nil) ⇒ Nodes

Creates handler with optional repository for dependency injection.

Parameters:

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

    repository (default: create new)



40
41
42
# File 'lib/pvectl/commands/get/handlers/nodes.rb', line 40

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

Instance Method Details

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

Describes a single node with comprehensive details.

Parameters:

  • name (String)

    node name

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

    unused, for API consistency

Returns:

Raises:



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

def describe(name:, node: nil, args: [], vmid: nil)
  raise ArgumentError, "Invalid node name" unless valid_node_name?(name)

  node = repository.describe(name)
  raise Pvectl::ResourceNotFoundError, "Node not found: #{name}" if node.nil?

  node
end

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

Lists nodes with optional filtering and sorting.

Parameters:

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

    not used for nodes (included for interface)

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

    filter by exact node name

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

    unused, for interface compatibility

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

    unused, for interface compatibility

  • filter (Hash, nil) (defaults to: nil)

    filter criteria (e.g., { status: “online” })

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

    sort field (name, status, cpu, memory, disk, guests, uptime)

  • include_details (Boolean) (defaults to: true)

    fetch extended details (version, load), default true

Returns:



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/pvectl/commands/get/handlers/nodes.rb', line 54

def list(node: nil, name: nil, args: [], storage: nil, filter: nil, sort: nil, include_details: true, **_options)
  nodes = repository.list(include_details: include_details)

  # Filter by name
  nodes = nodes.select { |n| n.name == name } if name

  # Apply filters
  nodes = apply_filters(nodes, filter) if filter

  # Apply sorting
  nodes = apply_sort(nodes, sort) if sort

  nodes
end

#presenterPresenters::Node

Returns presenter for nodes.

Returns:



72
73
74
# File 'lib/pvectl/commands/get/handlers/nodes.rb', line 72

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