Class: Metatron::Templates::VolumeSnapshot

Inherits:
Metatron::Template show all
Includes:
Concerns::Annotated, Concerns::Namespaced
Defined in:
lib/metatron/templates/volume_snapshot.rb

Overview

The VolumeSnapshot Kubernetes resource

Instance Attribute Summary collapse

Attributes inherited from Metatron::Template

#additional_labels, #api_version, #base_labels, #kind, #name

Instance Method Summary collapse

Methods included from Concerns::Namespaced

#formatted_namespace, included, #namespaced_initialize

Methods included from Concerns::Annotated

#annotated_initialize, #formatted_annotations, included

Methods inherited from Metatron::Template

initializer, initializers, metatron_template_class?, nearest_metatron_ancestor

Constructor Details

#initialize(name, source: {}, volume_snapshot_class_name: nil) ⇒ VolumeSnapshot

Returns a new instance of VolumeSnapshot.



14
15
16
17
18
19
# File 'lib/metatron/templates/volume_snapshot.rb', line 14

def initialize(name, source: {}, volume_snapshot_class_name: nil)
  super(name)
  @source = source
  @volume_snapshot_class_name = volume_snapshot_class_name
  @api_version = "snapshot.storage.k8s.io/v1"
end

Instance Attribute Details

#sourceObject

Returns the value of attribute source.



10
11
12
# File 'lib/metatron/templates/volume_snapshot.rb', line 10

def source
  @source
end

#volume_snapshot_class_nameObject Also known as: volumeSnapshotClassName

Returns the value of attribute volume_snapshot_class_name.



10
11
12
# File 'lib/metatron/templates/volume_snapshot.rb', line 10

def volume_snapshot_class_name
  @volume_snapshot_class_name
end

Instance Method Details

#formatted_sourceObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/metatron/templates/volume_snapshot.rb', line 33

def formatted_source
  case source
  when Hash
    { source: }
  when Metatron::Templates::VolumeSnapshotContent
    { source: { volumeSnapshotContentName: source.name } }
  when Metatron::Templates::PersistentVolumeClaim
    { source: { persistentVolumeClaimName: source.name } }
  when nil
    {}
  else
    raise ArgumentError,
          "Invalid source type: #{source.class}. " \
          "Expected Hash, VolumeSnapshotContent, or PersistentVolumeClaim."
  end
end

#formatted_volume_snapshot_class_nameObject



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/metatron/templates/volume_snapshot.rb', line 50

def formatted_volume_snapshot_class_name
  return {} unless volume_snapshot_class_name

  if volume_snapshot_class_name.is_a?(String)
    { volumeSnapshotClassName: }
  elsif volume_snapshot_class_name.respond_to?(:name)
    { volumeSnapshotClassName: volume_snapshot_class_name.name }
  else
    raise ArgumentError,
          "Invalid volume_snapshot_class_name type: #{volume_snapshot_class_name.class}."
  end
end

#renderObject



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/metatron/templates/volume_snapshot.rb', line 21

def render
  {
    apiVersion:,
    kind:,
    metadata: {
      name:,
      labels: base_labels.merge(additional_labels)
    }.merge(formatted_annotations).merge(formatted_namespace).compact,
    spec: {}.merge(formatted_source).merge(formatted_volume_snapshot_class_name).compact
  }.compact
end