Class: Pvectl::Presenters::ContainerOperationResult

Inherits:
OperationResult show all
Defined in:
lib/pvectl/presenters/container_operation_result.rb,
sig/pvectl/presenters/container_operation_result.rbs

Overview

Presenter for container lifecycle operation results.

Formats ContainerOperationResult models for table/JSON/YAML output.

Examples:

Using with formatter

presenter = ContainerOperationResult.new
formatter = Formatters::Table.new
output = formatter.format(results, presenter)

Constant Summary

Constants included from Formatters::ColorSupport

Formatters::ColorSupport::STATUS_COLORS

Instance Method Summary collapse

Methods inherited from OperationResult

#colorize, #duration_display, #status_display, #task_upid

Methods included from Formatters::ColorSupport

colorize_status, enabled?, pastel

Methods inherited from Base

#format_bytes, #format_firewall, #format_firewall_rules, #format_task_history, #resource, #tags_array, #tags_display, #template_display, #to_description, #to_wide_row, #uptime_human, #wide_columns

Instance Method Details

#columnsArray<String>

Returns column headers for standard table output.

Returns:

  • column headers



18
19
20
# File 'lib/pvectl/presenters/container_operation_result.rb', line 18

def columns
  %w[CTID NAME NODE STATUS MESSAGE]
end

#display_name(container) ⇒ String

Returns display name for container.

Parameters:

  • container model

Returns:

  • display name



104
105
106
# File 'lib/pvectl/presenters/container_operation_result.rb', line 104

def display_name(container)
  container.name || "CT-#{container.vmid}"
end

#extra_columnsArray<String>

Returns additional columns for wide output.

Returns:

  • extra column headers



25
26
27
# File 'lib/pvectl/presenters/container_operation_result.rb', line 25

def extra_columns
  %w[TASK DURATION]
end

#extra_values(model, **_context) ⇒ Array<String>

Returns additional values for wide output.

Parameters:

  • result model

  • optional context

Returns:

  • extra values



62
63
64
65
66
67
# File 'lib/pvectl/presenters/container_operation_result.rb', line 62

def extra_values(model, **_context)
  [
    task_upid(model),
    duration_display(model)
  ]
end

#to_hash(model) ⇒ Hash

Converts result to hash for JSON/YAML output.

For clone operations, displays the new (cloned) container data. For all other operations, displays the source container data.

Parameters:

  • result model

Returns:

  • hash representation



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/pvectl/presenters/container_operation_result.rb', line 76

def to_hash(model)
  if model.operation == :clone && model.resource
    {
      "ctid" => model.resource[:new_ctid],
      "name" => model.resource[:hostname],
      "node" => model.resource[:node] || model.container&.node,
      "status" => model.status_text,
      "message" => model.message,
      "task_upid" => model.task_upid || model.task&.upid
    }
  else
    {
      "ctid" => model.container.vmid,
      "name" => model.container.name,
      "node" => model.container.node,
      "status" => model.status_text,
      "message" => model.message,
      "task_upid" => model.task_upid || model.task&.upid
    }
  end
end

#to_row(model, **_context) ⇒ Array<String>

Converts result to table row values.

For clone operations, displays the new (cloned) container data. For all other operations, displays the source container data.

Parameters:

  • result model

  • optional context

Returns:

  • row values



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/pvectl/presenters/container_operation_result.rb', line 37

def to_row(model, **_context)
  if model.operation == :clone && model.resource
    [
      model.resource[:new_ctid].to_s,
      model.resource[:hostname] || "CT-#{model.resource[:new_ctid]}",
      model.resource[:node] || model.container&.node,
      status_display(model),
      model.message
    ]
  else
    [
      model.container.vmid.to_s,
      display_name(model.container),
      model.container.node,
      status_display(model),
      model.message
    ]
  end
end