Class: Pvectl::Commands::Get::Handlers::Containers

Inherits:
Object
  • Object
show all
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”.

Examples:

Using via ResourceRegistry

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

See Also:

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

Constructor Details

#initialize(repository: nil) ⇒ Containers

Creates handler with optional repository for dependency injection.

Parameters:



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.

Parameters:

  • name (String)

    CTID 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/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.

Parameters:

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

    filter by node name

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

    filter by container 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/containers.rb', line 63

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

#presenterPresenters::Container

Returns presenter for containers.

Returns:



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

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

#selector_classClass

Returns selector class for container filtering.

Returns:

  • (Class)

    Selectors::Container



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

def selector_class
  Pvectl::Selectors::Container
end