@@ -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
4977end
0 commit comments