eaaa9a16910930a1462b2fd31ac9c024326a3907
[pti/rtp.git] / meta-starlingx / meta-stx-cloud / recipes-support / puppet / files / puppetlabs-lvm / 0001-puppet-lvm-kilo-quilt-changes.patch
1 From b80e106ace391d88de683c3da5e03878ce1ffa1d Mon Sep 17 00:00:00 2001
2 From: Al Bailey <al.bailey@windriver.com>
3 Date: Tue, 7 Jun 2016 10:36:17 -0400
4 Subject: [PATCH] puppet-lvm kilo quilt changes
5
6 ---
7  .../lvm/lib/puppet/provider/logical_volume/lvm.rb  | 194 ++++++++++++++-------
8  .../lvm/lib/puppet/provider/physical_volume/lvm.rb |   2 +-
9  .../lvm/lib/puppet/provider/volume_group/lvm.rb    |  60 ++++++-
10  .../modules/lvm/lib/puppet/type/logical_volume.rb  |  32 +++-
11  .../puppet/modules/lvm/manifests/logical_volume.pp |   6 +
12  packstack/puppet/modules/lvm/manifests/volume.pp   |  11 +-
13  .../puppet/provider/logical_volume/lvm_spec.rb     |  55 +++---
14  7 files changed, 267 insertions(+), 93 deletions(-)
15
16 diff --git a/packstack/puppet/modules/lvm/lib/puppet/provider/logical_volume/lvm.rb b/packstack/puppet/modules/lvm/lib/puppet/provider/logical_volume/lvm.rb
17 index e813193..2f41695 100755
18 --- a/packstack/puppet/modules/lvm/lib/puppet/provider/logical_volume/lvm.rb
19 +++ b/packstack/puppet/modules/lvm/lib/puppet/provider/logical_volume/lvm.rb
20 @@ -3,24 +3,56 @@ Puppet::Type.type(:logical_volume).provide :lvm do
21  
22      commands :lvcreate   => 'lvcreate',
23               :lvremove   => 'lvremove',
24 +             :lvresize   => 'lvresize',
25               :lvextend   => 'lvextend',
26               :lvs        => 'lvs',
27 -             :resize2fs  => 'resize2fs',
28 +             :vgs        => 'vgs',
29               :umount     => 'umount',
30               :blkid      => 'blkid',
31               :dmsetup    => 'dmsetup',
32 +             :dd         => 'dd',
33               :lvconvert  => 'lvconvert',
34 -             :lvdisplay  => 'lvdisplay'
35 -
36 -    optional_commands :xfs_growfs => 'xfs_growfs',
37 -                      :resize4fs  => 'resize4fs'
38 +             :lvdisplay  => 'lvdisplay',
39 +             :fsadm      => 'fsadm',
40 +             :dd         => 'dd'
41 +
42 +    def round_to_extent(size)
43 +      lvm_size_units = {
44 +        "K" => 1**0, "M" => 1024**1, "G" => 1024**2, "T" => 1024**3, "P" => 1024**4, "E" => 1025**5,
45 +      }
46 +
47 +      if @resource[:size] =~ /^([0-9]+(\.[0-9]+)?)([KMGTPE])/i
48 +        size_value = $1.to_f
49 +        size_unit  = $3.upcase
50 +        size_kibi = (size_value * lvm_size_units[size_unit]).to_i
51 +        if vgs('--noheading', '-o', 'vg_extent_size', '--units', 'k', "#{@resource[:volume_group]}") =~ /\s+(\d+)\.\d+k/i
52 +          vg_extent_size_kibi = $1.to_i
53 +        end
54 +        new_size_kibi = ((size_kibi + vg_extent_size_kibi - 1) / vg_extent_size_kibi) * vg_extent_size_kibi
55 +        "#{new_size_kibi}k"
56 +      else
57 +        size
58 +      end
59 +    end
60  
61      def create
62          args = ['-n', @resource[:name]]
63          if @resource[:size]
64 -            args.push('--size', @resource[:size])
65 +            size = @resource[:size]
66 +            if size == 'max'
67 +                size = vgs('--noheading', '-o', 'vg_size', '--units', 'k', "#{@resource[:volume_group]}").strip
68 +            elsif @resource[:round_to_extent] then
69 +                size = round_to_extent(size)
70 +            end
71 +            args.push('--size', size)
72          elsif @resource[:initial_size]
73 -            args.push('--size', @resource[:initial_size])
74 +            args.push(
75 +                '--size',
76 +                if @resource[:round_to_extent] then
77 +                    round_to_extent(@resource[:initial_size])
78 +                else
79 +                    @resource[:initial_size]
80 +                end)
81          end
82          if @resource[:extents]
83              args.push('--extents', @resource[:extents])
84 @@ -63,6 +95,7 @@ Puppet::Type.type(:logical_volume).provide :lvm do
85  
86          args << @resource[:volume_group]
87          lvcreate(*args)
88 +        lvzero
89      end
90  
91      def destroy
92 @@ -75,9 +108,16 @@ Puppet::Type.type(:logical_volume).provide :lvm do
93          lvs(@resource[:volume_group]) =~ lvs_pattern
94      end
95  
96 +    def exec_cmd(*cmd)
97 +      output = Puppet::Util::Execution.execute(cmd, :failonfail => false, :combine => true)
98 +      {:out => output, :exit => $CHILD_STATUS.exitstatus}
99 +    end
100 +
101      def size
102          if @resource[:size] =~ /^\d+\.?\d{0,2}([KMGTPE])/i
103              unit = $1.downcase
104 +        else
105 +            unit = 'k'
106          end
107  
108          raw = lvs('--noheading', '--unit', unit, path)
109 @@ -92,64 +132,87 @@ Puppet::Type.type(:logical_volume).provide :lvm do
110      end
111  
112      def size=(new_size)
113 -        lvm_size_units = { "K" => 1, "M" => 1024, "G" => 1048576, "T" => 1073741824, "P" => 1099511627776, "E" => 1125899906842624 }
114 -        lvm_size_units_match = lvm_size_units.keys().join('|')
115 +      lvm_size_units = {
116 +        "K" => 1**0, "M" => 1024**1, "G" => 1024**2, "T" => 1024**3, "P" => 1024**4, "E" => 1025**5,
117 +      }
118  
119 -        resizeable = false
120 -        current_size = size()
121 +      current_size = size()
122  
123 -        if current_size =~ /(\d+\.{0,1}\d{0,2})(#{lvm_size_units_match})/i
124 -            current_size_bytes = $1.to_i
125 -            current_size_unit  = $2.upcase
126 -        end
127 +      if current_size =~ /^([0-9]+(\.[0-9]+)?)([KMGTPE])/i
128 +        current_size_value = $1.to_f
129 +        current_size_unit  = $3.upcase
130 +        current_size = (current_size_value * lvm_size_units[current_size_unit]).to_i
131 +      end
132  
133 -        if new_size =~ /(\d+)(#{lvm_size_units_match})/i
134 -            new_size_bytes = $1.to_i
135 -            new_size_unit  = $2.upcase
136 -        end
137 +      info( "Current: value=#{current_size_value}, unit=#{current_size_unit}, kibi=#{current_size}" )
138  
139 -        ## Get the extend size
140 -        if lvs('--noheading', '-o', 'vg_extent_size', '--units', 'k', path) =~ /\s+(\d+)\.\d+k/i
141 -            vg_extent_size = $1.to_i
142 -        end
143 +      if new_size == 'max'
144 +        new_size = vgs('--noheading', '-o', 'vg_size', '--units', 'k', "#{@resource[:volume_group]}").strip
145 +      end
146  
147 -        ## Verify that it's a extension: Reduce is potentially dangerous and should be done manually
148 -        if lvm_size_units[current_size_unit] < lvm_size_units[new_size_unit]
149 -            resizeable = true
150 -        elsif lvm_size_units[current_size_unit] > lvm_size_units[new_size_unit]
151 -            if (current_size_bytes * lvm_size_units[current_size_unit]) < (new_size_bytes * lvm_size_units[new_size_unit])
152 -                resizeable = true
153 -            end
154 -        elsif lvm_size_units[current_size_unit] == lvm_size_units[new_size_unit]
155 -            if new_size_bytes > current_size_bytes
156 -                resizeable = true
157 -            end
158 -        end
159 +      if new_size =~ /^([0-9]+(\.[0-9]+)?)([KMGTPE])/i
160 +        new_size_value = $1.to_f
161 +        new_size_unit  = $3.upcase
162 +        new_size = (new_size_value * lvm_size_units[new_size_unit]).to_i
163 +      end
164  
165 -        if not resizeable
166 -            if @resource[:size_is_minsize] == :true or @resource[:size_is_minsize] == true or @resource[:size_is_minsize] == 'true'
167 -                info( "Logical volume already has minimum size of #{new_size} (currently #{current_size})" )
168 -            else
169 -                fail( "Decreasing the size requires manual intervention (#{new_size} < #{current_size})" )
170 -            end
171 -        else
172 -            ## Check if new size fits the extend blocks
173 -            if new_size_bytes * lvm_size_units[new_size_unit] % vg_extent_size != 0
174 -                fail( "Cannot extend to size #{new_size} because VG extent size is #{vg_extent_size} KB" )
175 -            end
176 +      info( "New: value=#{new_size_value}, unit=#{new_size_unit}, kibi=#{new_size}" )
177  
178 -            lvextend( '-L', new_size, path) || fail( "Cannot extend to size #{new_size} because lvextend failed." )
179 +      ## Get the extend size
180 +      if lvs('--noheading', '-o', 'vg_extent_size', '--units', 'k', path) =~ /\s+(\d+)\.\d+k/i
181 +        vg_extent_size = $1.to_i
182 +      end
183  
184 -            blkid_type = blkid(path)
185 -            if command(:resize4fs) and blkid_type =~ /\bTYPE=\"(ext4)\"/
186 -              resize4fs( path) || fail( "Cannot resize file system to size #{new_size} because resize2fs failed." )
187 -            elsif blkid_type =~ /\bTYPE=\"(ext[34])\"/
188 -              resize2fs( path) || fail( "Cannot resize file system to size #{new_size} because resize2fs failed." )
189 -            elsif blkid_type =~ /\bTYPE=\"(xfs)\"/
190 -              xfs_growfs( path) || fail( "Cannot resize filesystem to size #{new_size} because xfs_growfs failed." )
191 +      if new_size < current_size
192 +        if @resource[:size_is_minsize] == :true or @resource[:size_is_minsize] == true or @resource[:size_is_minsize] == 'true'
193 +          info( "Logical volume already has minimum size of #{new_size} (currently #{current_size})" )
194 +        else
195 +          if not @resource[:allow_reduce]
196 +            fail( "Decreasing the size requires manual intervention (#{new_size} < #{current_size})" )
197 +          end
198 +          if new_size % vg_extent_size != 0
199 +            if @resource[:round_to_extent]
200 +              new_size = ((new_size + vg_extent_size - 1) / vg_extent_size) * vg_extent_size
201 +              if new_size >= current_size
202 +                info( "Logical volume already has a size of #{current_size}" )
203 +                return
204 +              end
205 +            else
206 +              fail( "Cannot reduce to size #{new_size} because VG extent size is #{vg_extent_size} KB" )
207              end
208 -
209 +          end
210 +          exec_cmd('umount', path)
211 +          exec_cmd('fsadm', '-y', 'check', path )
212 +          r = exec_cmd('fsadm', '-y', 'resize', path, "#{new_size}k")
213 +          if r[:exit] != 0 and @resource[:nuke_fs_on_resize_failure]
214 +            exec_cmd('dd', 'if=/dev/zero', "of=#{path}", "bs=512", "count=16", "conv=notrunc")
215 +            blkid('-g')
216 +          end
217 +          lvresize( '-f', '-L', "#{new_size}k", path) || fail( "Cannot reduce to size #{new_size} because lvresize failed." )
218 +        end
219 +      elsif new_size > current_size
220 +        if new_size % vg_extent_size != 0
221 +          if @resource[:round_to_extent]
222 +            new_size = ((new_size + vg_extent_size - 1) / vg_extent_size) * vg_extent_size
223 +            if new_size <= current_size
224 +              info( "Logical volume already has a size of #{current_size}" )
225 +              return
226 +            end
227 +          else
228 +            fail( "Cannot extend to size #{new_size} because VG extent size is #{vg_extent_size} KB" )
229 +          end
230 +        end
231 +        lvextend( '-L', "#{new_size}k", path) || fail( "Cannot extend to size #{new_size} because lvextend failed." )
232 +        exec_cmd('umount', path)
233 +        exec_cmd('fsadm', '-y', 'check', path )
234 +        r = exec_cmd('fsadm', '-y', 'resize', path, "#{new_size}k")
235 +        if r[:exit] != 0 and @resource[:nuke_fs_on_resize_failure]
236 +          exec_cmd('dd', 'if=/dev/zero', "of=#{path}", "bs=512", "count=16", "conv=notrunc")
237 +          blkid('-g')
238          end
239 +      else
240 +        info( "Logical volume already has a size of #{current_size}" )
241 +      end
242      end
243  
244  
245 @@ -161,7 +224,7 @@ Puppet::Type.type(:logical_volume).provide :lvm do
246              # Minus one because it says "2" when there is only one spare. And so on.
247              n = ($1.to_i)-1
248              #puts " current mirrors: #{n}"
249 -            return n.to_s 
250 +            return n.to_s
251          end
252          return 0.to_s
253      end
254 @@ -176,7 +239,7 @@ Puppet::Type.type(:logical_volume).provide :lvm do
255              end
256  
257              # Region size cannot be changed on an existing mirror (not even when changing to zero mirrors).
258 -            
259 +
260              if @resource[:alloc]
261                  args.push( '--alloc', @resource[:alloc] )
262              end
263 @@ -222,9 +285,6 @@ Puppet::Type.type(:logical_volume).provide :lvm do
264          end
265      end
266  
267 -
268 -
269 -
270      private
271  
272      def lvs_pattern
273 @@ -240,4 +300,18 @@ Puppet::Type.type(:logical_volume).provide :lvm do
274          "/dev/#{@resource[:volume_group]}"
275      end
276  
277 +    def lvzero
278 +        if lvs('--noheading', '-o', 'lv_size', '--units', 'm', path) =~ /\s+(\d+)\.\d+m/i
279 +            lv_size = $1.to_i
280 +            lv_size = lv_size - 2
281 +            begin
282 +                dd('if=/dev/zero', 'of=' + path, 'bs=1M', "seek=#{lv_size}")
283 +            rescue
284 +            end
285 +            begin
286 +                dd('if=/dev/zero', 'of=' + path, 'bs=1M', 'count=100')
287 +            rescue
288 +            end
289 +        end
290 +    end
291  end
292 diff --git a/packstack/puppet/modules/lvm/lib/puppet/provider/physical_volume/lvm.rb b/packstack/puppet/modules/lvm/lib/puppet/provider/physical_volume/lvm.rb
293 index eaefc92..6ac6e0a 100644
294 --- a/packstack/puppet/modules/lvm/lib/puppet/provider/physical_volume/lvm.rb
295 +++ b/packstack/puppet/modules/lvm/lib/puppet/provider/physical_volume/lvm.rb
296 @@ -4,7 +4,7 @@ Puppet::Type.type(:physical_volume).provide(:lvm) do
297      commands :pvcreate  => 'pvcreate', :pvremove => 'pvremove', :pvs => 'pvs', :vgs => 'vgs'
298  
299      def create
300 -        pvcreate(@resource[:name])
301 +        pvcreate('-y', @resource[:name])
302      end
303  
304      def destroy
305 diff --git a/packstack/puppet/modules/lvm/lib/puppet/provider/volume_group/lvm.rb b/packstack/puppet/modules/lvm/lib/puppet/provider/volume_group/lvm.rb
306 index c8de071..3d54dba 100644
307 --- a/packstack/puppet/modules/lvm/lib/puppet/provider/volume_group/lvm.rb
308 +++ b/packstack/puppet/modules/lvm/lib/puppet/provider/volume_group/lvm.rb
309 @@ -1,12 +1,18 @@
310 +require 'csv'
311 +
312  Puppet::Type.type(:volume_group).provide :lvm do
313      desc "Manages LVM volume groups"
314  
315      commands :vgcreate => 'vgcreate',
316               :vgremove => 'vgremove',
317 +             :pvremove => 'pvremove',
318               :vgs      => 'vgs',
319               :vgextend => 'vgextend',
320               :vgreduce => 'vgreduce',
321 -             :pvs      => 'pvs'
322 +             :vgscan   => 'vgscan',
323 +             :pvs      => 'pvs',
324 +             :lvremove => 'lvremove',
325 +             :umount   => 'umount'
326  
327      def create
328          vgcreate(@resource[:name], *@resource.should(:physical_volumes))
329 @@ -22,17 +28,55 @@ Puppet::Type.type(:volume_group).provide :lvm do
330          false
331      end
332  
333 +    def exec_cmd(*cmd)
334 +      output = Puppet::Util::Execution.execute(cmd, :failonfail => false, :combine => true)
335 +      {:out => output, :exit => $CHILD_STATUS.exitstatus}
336 +    end
337 +
338      def physical_volumes=(new_volumes = [])
339 -        # Only take action if createonly is false just to be safe
340 -        #  this is really only here to enforce the createonly setting
341 -        #  if something goes wrong in physical_volumes
342 -        if @resource[:createonly].to_s == "false"
343 -          existing_volumes = physical_volumes
344 -          extraneous = existing_volumes - new_volumes
345 -          extraneous.each { |volume| reduce_with(volume) }
346 +      # Only take action if createonly is false just to be safe
347 +      #  this is really only here to enforce the createonly setting
348 +      #  if something goes wrong in physical_volumes
349 +      if @resource[:createonly].to_s == "false"
350 +        vgreduce('--removemissing', '--force', @resource[:name])
351 +        existing_volumes = physical_volumes
352 +        extraneous = existing_volumes - new_volumes
353 +        pv_to_lv={}
354 +        pv_to_dev={}
355 +        csv = CSV.new(pvs('-o', 'pv_name,vg_name,lv_name', '--separator', ','),
356 +                     :headers => true, :header_converters => :symbol)
357 +        csv.to_a.map {|row| row.to_hash}.each do |m|
358 +          unless m[:lv].nil?
359 +            pv_to_lv[m[:_pv].strip] = "#{m[:vg]}/#{m[:lv]}"
360 +            pv_to_dev[m[:_pv].strip] = "#{m[:vg].gsub('-','--')}-#{m[:lv].gsub('-','--')}"
361 +          end
362 +        end
363 +
364 +        if extraneous == existing_volumes
365 +          extraneous.each do |volume|
366 +            if pv_to_lv.has_key?(volume)
367 +              exec_cmd('/bin/umount', "/dev/mapper/#{pv_to_dev[volume]}")
368 +              lvremove('-f', pv_to_lv[volume])
369 +            end
370 +          end
371 +          vgremove(@resource[:name], '--force')
372 +          extraneous.each do |volume|
373 +              pvremove(volume)
374 +          end
375 +          vgcreate(@resource[:name], *new_volumes)
376 +        else
377 +          extraneous.each do |volume|
378 +            if pv_to_lv.has_key?(volume)
379 +              exec_cmd('/bin/umount', "/dev/mapper/#{pv_to_dev[volume]}")
380 +              lvremove('-f', pv_to_lv[volume])
381 +            end
382 +            reduce_with(volume)
383 +            pvremove(volume)
384 +          end
385            missing = new_volumes - existing_volumes
386            missing.each { |volume| extend_with(volume) }
387          end
388 +      end
389      end
390  
391      def physical_volumes
392 diff --git a/packstack/puppet/modules/lvm/lib/puppet/type/logical_volume.rb b/packstack/puppet/modules/lvm/lib/puppet/type/logical_volume.rb
393 index f907e08..3081650 100644
394 --- a/packstack/puppet/modules/lvm/lib/puppet/type/logical_volume.rb
395 +++ b/packstack/puppet/modules/lvm/lib/puppet/type/logical_volume.rb
396 @@ -31,7 +31,7 @@ Puppet::Type.newtype(:logical_volume) do
397    newproperty(:size) do
398      desc "The size of the logical volume. Set to undef to use all available space"
399      validate do |value|
400 -      unless value =~ /^[0-9]+(\.[0-9]+)?[KMGTPE]/i
401 +      unless value =~ /(^[0-9]+(\.[0-9]+)?[KMGTPE]|max)/i
402          raise ArgumentError , "#{value} is not a valid logical volume size"
403        end
404      end
405 @@ -50,6 +50,36 @@ Puppet::Type.newtype(:logical_volume) do
406      desc "Configures the logical volume type. AIX only"
407    end
408  
409 +  newparam(:allow_reduce) do
410 +    desc "Allow reducing logical volume size."
411 +    validate do |value|
412 +      unless [:true, true, "true", :false, false, "false"].include?(value)
413 +        raise ArgumentError , "allow_reduce must either be true or false"
414 +      end
415 +    end
416 +    defaultto :false
417 +  end
418 +
419 +  newparam(:round_to_extent) do
420 +    desc "Allow rounding of logical volume size to extent size."
421 +    validate do |value|
422 +      unless [:true, true, "true", :false, false, "false"].include?(value)
423 +        raise ArgumentError , "round_to_extent must either be true or false"
424 +      end
425 +    end
426 +    defaultto :false
427 +  end
428 +
429 +  newparam(:nuke_fs_on_resize_failure) do
430 +    desc "Remove filesystem on logical volume resize failure."
431 +    defaultto :false
432 +    validate do |value|
433 +      unless [:true, true, "true", :false, false, "false"].include?(value)
434 +        raise ArgumentError , "nuke_fs_on_resize_failure must either be true or false"
435 +      end
436 +    end
437 +  end
438 +
439    newparam(:range) do
440      desc "Sets the inter-physical volume allocation policy. AIX only"
441      validate do |value|
442 diff --git a/packstack/puppet/modules/lvm/manifests/logical_volume.pp b/packstack/puppet/modules/lvm/manifests/logical_volume.pp
443 index e6e5e78..4888b5d 100644
444 --- a/packstack/puppet/modules/lvm/manifests/logical_volume.pp
445 +++ b/packstack/puppet/modules/lvm/manifests/logical_volume.pp
446 @@ -3,7 +3,9 @@
447  define lvm::logical_volume (
448    $volume_group,
449    $size              = undef,
450 +  $size_is_minsize   = false,
451    $initial_size      = undef,
452 +  $round_to_extent   = false,
453    $ensure            = present,
454    $options           = 'defaults',
455    $pass              = '2',
456 @@ -12,6 +14,7 @@ define lvm::logical_volume (
457    $mkfs_options      = undef,
458    $mountpath         = "/${name}",
459    $mountpath_require = false,
460 +  $remounts          = true,
461    $createfs          = true,
462    $extents           = undef,
463    $stripes           = undef,
464 @@ -21,6 +24,7 @@ define lvm::logical_volume (
465  ) {
466  
467    validate_bool($mountpath_require)
468 +  validate_bool($size_is_minsize)
469  
470    if ($name == undef) {
471      fail("lvm::logical_volume \$name can't be undefined")
472 @@ -51,6 +55,7 @@ define lvm::logical_volume (
473      ensure       => $ensure,
474      volume_group => $volume_group,
475      size         => $size,
476 +    size_is_minsize => $size_is_minsize,
477      initial_size => $initial_size,
478      stripes      => $stripes,
479      stripesize   => $stripesize,
480 @@ -81,6 +86,7 @@ define lvm::logical_volume (
481        pass    => $pass,
482        dump    => $dump,
483        atboot  => true,
484 +      remounts => $remounts,
485      }
486    }
487  }
488 diff --git a/packstack/puppet/modules/lvm/manifests/volume.pp b/packstack/puppet/modules/lvm/manifests/volume.pp
489 index a8bc3c8..bdfc937 100644
490 --- a/packstack/puppet/modules/lvm/manifests/volume.pp
491 +++ b/packstack/puppet/modules/lvm/manifests/volume.pp
492 @@ -59,7 +59,10 @@ define lvm::volume (
493    $fstype  = undef,
494    $size    = undef,
495    $extents = undef,
496 -  $initial_size = undef
497 +  $initial_size = undef,
498 +  $allow_reduce = false,
499 +  $round_to_extent = false,
500 +  $nuke_fs_on_resize_failure = false
501  ) {
502  
503    if ($name == undef) {
504 @@ -88,6 +91,9 @@ define lvm::volume (
505            volume_group => $vg,
506            size         => $size,
507            initial_size => $initial_size,
508 +          allow_reduce => $allow_reduce,
509 +          round_to_extent => $round_to_extent,
510 +          nuke_fs_on_resize_failure => $nuke_fs_on_resize_failure,
511            before       => Volume_group[$vg]
512          }
513        }
514 @@ -124,6 +130,9 @@ define lvm::volume (
515          volume_group => $vg,
516          size         => $size,
517          extents      => $extents,
518 +        allow_reduce => $allow_reduce,
519 +        round_to_extent => $round_to_extent,
520 +        nuke_fs_on_resize_failure => $nuke_fs_on_resize_failure,
521          require      => Volume_group[$vg]
522        }
523  
524 diff --git a/packstack/puppet/modules/lvm/spec/unit/puppet/provider/logical_volume/lvm_spec.rb b/packstack/puppet/modules/lvm/spec/unit/puppet/provider/logical_volume/lvm_spec.rb
525 index 56c32a5..a465a7f 100644
526 --- a/packstack/puppet/modules/lvm/spec/unit/puppet/provider/logical_volume/lvm_spec.rb
527 +++ b/packstack/puppet/modules/lvm/spec/unit/puppet/provider/logical_volume/lvm_spec.rb
528 @@ -12,23 +12,24 @@ describe provider_class do
529    describe 'when creating' do
530      context 'with size' do
531        it "should execute 'lvcreate' with a '--size' option" do
532 -        @resource.expects(:[]).with(:name).returns('mylv')
533 -        @resource.expects(:[]).with(:volume_group).returns('myvg')
534 +        @resource.expects(:[]).with(:name).returns('mylv').at_least_once
535 +        @resource.expects(:[]).with(:volume_group).returns('myvg').at_least_once
536          @resource.expects(:[]).with(:size).returns('1g').at_least_once
537          @resource.expects(:[]).with(:extents).returns(nil).at_least_once
538          @resource.expects(:[]).with(:stripes).returns(nil).at_least_once
539          @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
540          @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
541          @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
542 -        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
543 +        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
544 +        @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
545          @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
546          @provider.create
547        end
548      end
549      context 'with initial_size' do
550        it "should execute 'lvcreate' with a '--size' option" do
551 -        @resource.expects(:[]).with(:name).returns('mylv')
552 -        @resource.expects(:[]).with(:volume_group).returns('myvg')
553 +        @resource.expects(:[]).with(:name).returns('mylv').at_least_once
554 +        @resource.expects(:[]).with(:volume_group).returns('myvg').at_least_once
555          @resource.expects(:[]).with(:initial_size).returns('1g').at_least_once
556          @resource.expects(:[]).with(:size).returns(nil).at_least_once
557          @resource.expects(:[]).with(:extents).returns(nil).at_least_once
558 @@ -36,15 +37,16 @@ describe provider_class do
559          @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
560          @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
561          @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
562 -        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
563 +        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
564 +        @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
565          @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
566          @provider.create
567        end
568      end
569       context 'without size and without extents' do
570        it "should execute 'lvcreate' without a '--size' option or a '--extents' option" do
571 -        @resource.expects(:[]).with(:name).returns('mylv')
572 -        @resource.expects(:[]).with(:volume_group).returns('myvg')
573 +        @resource.expects(:[]).with(:name).returns('mylv').at_least_once
574 +        @resource.expects(:[]).with(:volume_group).returns('myvg').at_least_once
575          @resource.expects(:[]).with(:size).returns(nil).at_least_once
576          @resource.expects(:[]).with(:initial_size).returns(nil).at_least_once
577          @resource.expects(:[]).with(:extents).returns(nil).at_least_once
578 @@ -52,45 +54,47 @@ describe provider_class do
579          @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
580          @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
581          @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
582 -        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
583 +        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
584          @provider.expects(:lvcreate).with('-n', 'mylv', '--extents', '100%FREE', 'myvg')
585          @provider.create
586        end
587      end
588      context 'with extents' do
589        it "should execute 'lvcreate' with a '--extents' option" do
590 -        @resource.expects(:[]).with(:name).returns('mylv')
591 -        @resource.expects(:[]).with(:volume_group).returns('myvg')
592 +        @resource.expects(:[]).with(:name).returns('mylv').at_least_once
593 +        @resource.expects(:[]).with(:volume_group).returns('myvg').at_least_once
594          @resource.expects(:[]).with(:size).returns('1g').at_least_once
595          @resource.expects(:[]).with(:extents).returns('80%vg').at_least_once
596          @resource.expects(:[]).with(:stripes).returns(nil).at_least_once
597          @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
598          @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
599          @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
600 -        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
601 +        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
602 +        @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
603          @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', '--extents', '80%vg', 'myvg')
604          @provider.create
605        end
606      end
607      context 'without extents' do
608        it "should execute 'lvcreate' without a '--extents' option" do
609 -        @resource.expects(:[]).with(:name).returns('mylv')
610 -        @resource.expects(:[]).with(:volume_group).returns('myvg')
611 +        @resource.expects(:[]).with(:name).returns('mylv').at_least_once
612 +        @resource.expects(:[]).with(:volume_group).returns('myvg').at_least_once
613          @resource.expects(:[]).with(:size).returns('1g').at_least_once
614          @resource.expects(:[]).with(:extents).returns(nil).at_least_once
615          @resource.expects(:[]).with(:stripes).returns(nil).at_least_once
616          @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
617          @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
618          @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
619 -        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
620 +        @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
621 +        @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
622          @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
623          @provider.create
624        end
625      end
626      context 'with initial_size and mirroring' do
627        it "should execute 'lvcreate' with '--size' and '--mirrors' and '--mirrorlog' options" do
628 -        @resource.expects(:[]).with(:name).returns('mylv')
629 -        @resource.expects(:[]).with(:volume_group).returns('myvg')
630 +        @resource.expects(:[]).with(:name).returns('mylv').at_least_once
631 +        @resource.expects(:[]).with(:volume_group).returns('myvg').at_least_once
632          @resource.expects(:[]).with(:initial_size).returns('1g').at_least_once
633          @resource.expects(:[]).with(:size).returns(nil).at_least_once
634          @resource.expects(:[]).with(:extents).returns(nil).at_least_once
635 @@ -102,6 +106,7 @@ describe provider_class do
636          @resource.expects(:[]).with(:region_size).returns(nil).at_least_once
637          @resource.expects(:[]).with(:no_sync).returns(nil).at_least_once
638          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
639 +        @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
640          @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', '--mirrors', '1', '--mirrorlog', 'core', 'myvg')
641          @provider.create
642        end
643 @@ -120,13 +125,15 @@ describe provider_class do
644            @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
645            @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
646            @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
647 -          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
648 +          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
649 +          @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
650 +          @resource.expects(:[]).with(:nuke_fs_on_resize_failure).returns(false).at_least_once
651            @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
652            @provider.create
653            @provider.expects(:lvs).with('--noheading', '--unit', 'g', '/dev/myvg/mylv').returns(' 1.00g').at_least_once
654            @provider.expects(:lvs).with('--noheading', '-o', 'vg_extent_size', '--units', 'k', '/dev/myvg/mylv').returns(' 1000.00k')
655            @provider.expects(:lvextend).with('-L', '2000000k', '/dev/myvg/mylv').returns(true)
656 -          @provider.expects(:blkid).with('/dev/myvg/mylv')
657 +          #@provider.expects(:blkid).with('/dev/myvg/mylv')
658            @provider.size = '2000000k'
659          end
660        end
661 @@ -140,7 +147,8 @@ describe provider_class do
662            @resource.expects(:[]).with(:stripesize).returns(nil).at_least_once
663            @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
664            @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
665 -          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
666 +          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
667 +          @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
668            @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
669            @provider.create
670            @provider.expects(:lvs).with('--noheading', '--unit', 'g', '/dev/myvg/mylv').returns(' 1.00g').at_least_once
671 @@ -161,7 +169,9 @@ describe provider_class do
672            @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
673            @resource.expects(:[]).with(:size_is_minsize).returns(:false).at_least_once
674            @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
675 -          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once        
676 +          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
677 +          @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
678 +          @resource.expects(:[]).with(:allow_reduce).returns(false).at_least_once
679            @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
680            @provider.create
681            @provider.expects(:lvs).with('--noheading', '--unit', 'g', '/dev/myvg/mylv').returns(' 1.00g').at_least_once
682 @@ -182,7 +192,8 @@ describe provider_class do
683            @resource.expects(:[]).with(:readahead).returns(nil).at_least_once
684            @resource.expects(:[]).with(:size_is_minsize).returns(:true).at_least_once
685            @resource.expects(:[]).with(:mirror).returns(nil).at_least_once
686 -          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once       
687 +          @resource.expects(:[]).with(:alloc).returns(nil).at_least_once
688 +          @resource.expects(:[]).with(:round_to_extent).returns(false).at_least_once
689            @provider.expects(:lvcreate).with('-n', 'mylv', '--size', '1g', 'myvg')
690            @provider.create
691            @provider.expects(:lvs).with('--noheading', '--unit', 'g', '/dev/myvg/mylv').returns(' 1.00g').at_least_once
692 -- 
693 1.8.3.1
694