Class: Pvectl::Presenters::VmOperationResult

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

Overview

Presenter for VM lifecycle operation results.

Formats VmOperationResult models for table/JSON/YAML output.

Examples:

Using with formatter

presenter = VmOperationResult.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.



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

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

#display_name(vm) ⇒ String

Returns display name for VM.



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

def display_name(vm)
  vm.name || "VM-#{vm.vmid}"
end

#extra_columnsArray<String>

Returns additional columns for wide output.



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

def extra_columns
  %w[TASK DURATION]
end

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

Returns additional values for wide output.



62
63
64
65
66
67
# File 'lib/pvectl/presenters/vm_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) VM data. For all other operations, displays the source VM data.



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/vm_operation_result.rb', line 76

def to_hash(model)
  if model.operation == :clone && model.resource
    {
      "vmid" => model.resource[:new_vmid],
      "name" => model.resource[:name],
      "node" => model.resource[:node] || model.vm&.node,
      "status" => model.status_text,
      "message" => model.message,
      "task_upid" => model.task_upid || model.task&.upid
    }
  else
    {
      "vmid" => model.vm.vmid,
      "name" => model.vm.name,
      "node" => model.vm.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) VM data. For all other operations, displays the source VM data.



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

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