Class: Pvectl::Commands::Get::Handlers::Nodes
- Inherits:
-
Object
- Object
- Pvectl::Commands::Get::Handlers::Nodes
- 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.
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
-
#describe(name:, node: nil, args: [], vmid: nil) ⇒ Models::Node
Describes a single node with comprehensive details.
-
#initialize(repository: nil) ⇒ Nodes
constructor
Creates handler with optional repository for dependency injection.
-
#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.
-
#presenter ⇒ Presenters::Node
Returns presenter for nodes.
Methods included from ResourceHandler
Constructor Details
#initialize(repository: nil) ⇒ Nodes
Creates handler with optional repository for dependency injection.
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.
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.
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, **) 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 |
#presenter ⇒ Presenters::Node
Returns presenter for nodes.
72 73 74 |
# File 'lib/pvectl/commands/get/handlers/nodes.rb', line 72 def presenter Pvectl::Presenters::Node.new end |