Module: Pvectl::Commands::ResourceLifecycleCommand Abstract

Included in:
ContainerLifecycleCommand, VmLifecycleCommand
Defined in:
lib/pvectl/commands/resource_lifecycle_command.rb

Overview

This module is abstract.

Include a specialization module (VmLifecycleCommand, ContainerLifecycleCommand) instead of this one directly.

Shared functionality for lifecycle commands across resource types.

Template method pattern: provides common flow (validate, resolve, confirm, execute, output) while specialization modules define resource-specific hooks.

Examples:

Specialization module pattern

module VmLifecycleCommand
  def self.included(base)
    base.include(ResourceLifecycleCommand)
  end

  private
  def supported_resources = %w[vm]
  def resource_label = "VM"
  # ...
end

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

Hook called when module is included.

Parameters:

  • base (Class)

    the class including this module



44
45
46
# File 'lib/pvectl/commands/resource_lifecycle_command.rb', line 44

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#executeInteger

Executes the lifecycle command.

Returns:

  • (Integer)

    exit code



64
65
66
67
68
69
70
71
72
73
# File 'lib/pvectl/commands/resource_lifecycle_command.rb', line 64

def execute
  return usage_error("Resource type required (#{supported_resources.join(', ')})") unless @resource_type
  return usage_error("Unsupported resource: #{@resource_type}") unless supported_resources.include?(@resource_type)

  if @resource_ids.empty? && !@options[:all] && selector_strings.empty?
    return usage_error("#{resource_id_label}, --all, or -l selector required")
  end

  perform_operation
end

#initialize(resource_type, resource_ids, options, global_options) ⇒ Object

Initializes a lifecycle command.

Parameters:

  • resource_type (String, nil)

    resource type

  • resource_ids (Array<String>, String, nil)

    resource identifiers

  • options (Hash)

    command options

  • global_options (Hash)

    global CLI options



54
55
56
57
58
59
# File 'lib/pvectl/commands/resource_lifecycle_command.rb', line 54

def initialize(resource_type, resource_ids, options, global_options)
  @resource_type = resource_type
  @resource_ids = Array(resource_ids).compact
  @options = options
  @global_options = global_options
end