Skip to content

Commit 5339a4e

Browse files
committed
feat: adds dataSource and dataSourceRef to PVCs
1 parent cf77f5f commit 5339a4e

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

lib/metatron/templates/persistent_volume_claim.rb

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ class PersistentVolumeClaim < Template
77
include Concerns::Annotated
88
include Concerns::Namespaced
99

10-
attr_accessor :additional_labels, :storage_class, :access_modes, :storage
10+
attr_accessor :additional_labels, :data_source, :data_source_ref, :storage_class,
11+
:access_modes, :storage
1112

1213
alias storageClassName storage_class
1314
alias accessModes access_modes
15+
alias dataSource data_source
16+
alias dataSourceRef data_source_ref
1417

1518
def initialize(
1619
name,
@@ -22,6 +25,7 @@ def initialize(
2225
@storage_class = storage_class
2326
@access_modes = access_modes
2427
@storage = storage
28+
@data_source = {}
2529
@additional_labels = {}
2630
end
2731

@@ -41,9 +45,33 @@ def render
4145
storage:
4246
}
4347
}
44-
}
48+
}.merge(formatted_data_source).merge(formatted_data_source_ref)
4549
}
4650
end
51+
52+
def formatted_data_source
53+
return {} unless data_source && !data_source.empty?
54+
raise "dataSource must be a Hash" unless data_source.is_a?(Hash)
55+
56+
valid_keys = %i[apiGroup kind name]
57+
unless data_source.keys.all? { valid_keys.include?(_1.to_sym) }
58+
raise "dataSource may contain only the keys: #{valid_keys.join(", ")}"
59+
end
60+
61+
{ dataSource: data_source.transform_keys(&:to_sym) }
62+
end
63+
64+
def formatted_data_source_ref
65+
return {} unless data_source_ref && !data_source_ref.empty?
66+
raise "dataSourceRef must be a Hash" unless data_source_ref.is_a?(Hash)
67+
68+
valid_keys = %i[apiGroup kind name namespace]
69+
unless data_source_ref.keys.all? { valid_keys.include?(_1.to_sym) }
70+
raise "dataSourceRef may contain only the keys: #{valid_keys.join(", ")}"
71+
end
72+
73+
{ dataSourceRef: data_source_ref.transform_keys(&:to_sym) }
74+
end
4775
end
4876
end
4977
end

spec/metatron/templates/persistent_volume_claim_spec.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# frozen_string_literal: true
22

33
RSpec.describe Metatron::Templates::PersistentVolumeClaim do
4-
let(:pvc) { described_class.new("test", storage_class: "test", storage: "1Gi") }
4+
let(:pvc) do
5+
described_class.new("test", storage_class: "test", storage: "1Gi").tap do |pvc|
6+
pvc.data_source = { name: "existing-src-pvc-name", kind: "PersistentVolumeClaim" }
7+
end
8+
end
59

610
let(:rendered_pvc) do
711
{
@@ -13,6 +17,10 @@
1317
},
1418
spec: {
1519
accessModes: ["ReadWriteOnce"],
20+
dataSource: {
21+
name: "existing-src-pvc-name",
22+
kind: "PersistentVolumeClaim"
23+
},
1624
storageClassName: "test",
1725
resources: {
1826
requests: {

0 commit comments

Comments
 (0)