Class: Pvectl::Commands::Get::Handlers::Containers
- Inherits:
-
Object
- Object
- Pvectl::Commands::Get::Handlers::Containers
- Includes:
- ResourceHandler
- Defined in:
- lib/pvectl/commands/get/handlers/containers.rb
Overview
Handler for listing LXC containers.
Implements ResourceHandler interface for the “containers” resource type. Uses Repositories::Container for data access and Presenters::Container for formatting.
Registered with ResourceRegistry on file load for “containers”, “container”, “ct”, and “cts”.
Constant Summary collapse
- CTID_PATTERN =
CTID validation pattern (100-999999999)
/\A[1-9]\d{2,8}\z/- SORT_FIELDS =
Sort field mappings. Negative values for descending sort (higher values first).
{ "name" => ->(c) { c.name || "" }, "node" => ->(c) { c.node || "" }, "cpu" => ->(c) { -(c.cpu || 0) }, "memory" => ->(c) { -(c.mem || 0) }, "disk" => ->(c) { -(c.disk || 0) }, "netin" => ->(c) { -(c.netin || 0) }, "netout" => ->(c) { -(c.netout || 0) } }.freeze
Instance Method Summary collapse
-
#describe(name:, node: nil, args: [], vmid: nil) ⇒ Models::Container
Describes a single container with comprehensive details.
-
#initialize(repository: nil) ⇒ Containers
constructor
Creates handler with optional repository for dependency injection.
-
#list(node: nil, name: nil, args: [], storage: nil, sort: nil, **_options) ⇒ Array<Models::Container>
Lists containers with optional filtering and sorting.
-
#presenter ⇒ Presenters::Container
Returns presenter for containers.
-
#selector_class ⇒ Class
Returns selector class for container filtering.
Constructor Details
#initialize(repository: nil) ⇒ Containers
Creates handler with optional repository for dependency injection.
44 45 46 |
# File 'lib/pvectl/commands/get/handlers/containers.rb', line 44 def initialize(repository: nil) @repository = repository end |
Instance Method Details
#describe(name:, node: nil, args: [], vmid: nil) ⇒ Models::Container
Describes a single container with comprehensive details.
84 85 86 87 88 89 90 91 92 |
# File 'lib/pvectl/commands/get/handlers/containers.rb', line 84 def describe(name:, node: nil, args: [], vmid: nil) raise ArgumentError, "Invalid CTID: must be positive integer (100-999999999)" unless valid_ctid?(name) ctid = name.to_i container = repository.describe(ctid) raise Pvectl::ResourceNotFoundError, "Container not found: #{ctid}" if container.nil? container end |
#list(node: nil, name: nil, args: [], storage: nil, sort: nil, **_options) ⇒ Array<Models::Container>
Lists containers with optional filtering and sorting.
63 64 65 66 67 68 |
# File 'lib/pvectl/commands/get/handlers/containers.rb', line 63 def list(node: nil, name: nil, args: [], storage: nil, sort: nil, **) containers = repository.list(node: node) containers = containers.select { |c| c.name == name } if name containers = apply_sort(containers, sort) if sort containers end |
#presenter ⇒ Presenters::Container
Returns presenter for containers.
73 74 75 |
# File 'lib/pvectl/commands/get/handlers/containers.rb', line 73 def presenter Pvectl::Presenters::Container.new end |