@@ -94,15 +94,11 @@ def backend_block
9494 end
9595
9696 def build_disks
97- disks = @cr_attrs [ 'volumes' ] . presence || @cr_attrs [ 'volumes_attributes' ] . presence || @compute_resource . default_volumes
98- return '' if disks . blank?
99- disks = [ disks ] if disks . is_a? ( Hash )
100- disks . each_with_index . map do |disk , index |
97+ disk_render_source . each_with_index . filter_map do |disk , index |
10198 # drop removed disks; tofu will drop them automatically, if they are no longer defined
102- next if disk [ '_delete' ] . to_i == 1
99+ next if disk . respond_to? ( :[] ) && disk [ '_delete' ] . to_i == 1
103100
104- data = @compute_resource . render_disk ( disk , self , index )
105- render_provider_data ( data )
101+ rendered_disk ( index , disk )
106102 end . join ( "\n " )
107103 end
108104
@@ -115,6 +111,20 @@ def build_nics
115111
116112 private
117113
114+ def disk_render_source
115+ disks = @cr_attrs [ 'volumes' ] . presence || @cr_attrs [ 'volumes_attributes' ] . presence || @compute_resource . default_volumes
116+ disks = [ disks ] if disks . is_a? ( Hash )
117+ disks = [ ] if disks . blank?
118+ disks . empty? ? [ nil ] : disks
119+ end
120+
121+ def rendered_disk ( index , disk )
122+ data = @compute_resource . render_disk ( disk , self , index )
123+ return if data . blank?
124+
125+ render_provider_data ( data )
126+ end
127+
118128 def nics_from_cr_attrs
119129 nics = @cr_attrs [ 'interfaces' ] . presence || @cr_attrs [ 'interfaces_attributes' ] . presence || @compute_resource . default_interfaces
120130 normalize_interfaces ( nics ) . map do |nic |
@@ -126,7 +136,9 @@ def nics_from_cr_attrs
126136 end
127137
128138 def render_provider_data ( data )
129- if data . is_a? ( Hash ) && data [ :resource ] . present?
139+ if data . is_a? ( String )
140+ data
141+ elsif data . is_a? ( Hash ) && data [ :resource ] . present?
130142 resource = data [ :resource ]
131143 block_to_hcl ( [ 'resource' , resource [ :type ] , resource [ :name ] ] , resource [ :content ] , depth : 0 )
132144 elsif data . is_a? ( Hash ) && data . size == 1 && data . values . first . is_a? ( Hash )
0 commit comments