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
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(-)
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
22 commands :lvcreate => 'lvcreate',
23 :lvremove => 'lvremove',
24 + :lvresize => 'lvresize',
25 :lvextend => 'lvextend',
27 - :resize2fs => 'resize2fs',
31 :dmsetup => 'dmsetup',
33 :lvconvert => 'lvconvert',
34 - :lvdisplay => 'lvdisplay'
36 - optional_commands :xfs_growfs => 'xfs_growfs',
37 - :resize4fs => 'resize4fs'
38 + :lvdisplay => 'lvdisplay',
42 + def round_to_extent(size)
44 + "K" => 1**0, "M" => 1024**1, "G" => 1024**2, "T" => 1024**3, "P" => 1024**4, "E" => 1025**5,
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
54 + new_size_kibi = ((size_kibi + vg_extent_size_kibi - 1) / vg_extent_size_kibi) * vg_extent_size_kibi
62 args = ['-n', @resource[:name]]
64 - args.push('--size', @resource[:size])
65 + size = @resource[:size]
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)
71 + args.push('--size', size)
72 elsif @resource[:initial_size]
73 - args.push('--size', @resource[:initial_size])
76 + if @resource[:round_to_extent] then
77 + round_to_extent(@resource[:initial_size])
79 + @resource[:initial_size]
82 if @resource[:extents]
83 args.push('--extents', @resource[:extents])
84 @@ -63,6 +95,7 @@ Puppet::Type.type(:logical_volume).provide :lvm do
86 args << @resource[:volume_group]
92 @@ -75,9 +108,16 @@ Puppet::Type.type(:logical_volume).provide :lvm do
93 lvs(@resource[:volume_group]) =~ lvs_pattern
97 + output = Puppet::Util::Execution.execute(cmd, :failonfail => false, :combine => true)
98 + {:out => output, :exit => $CHILD_STATUS.exitstatus}
102 if @resource[:size] =~ /^\d+\.?\d{0,2}([KMGTPE])/i
108 raw = lvs('--noheading', '--unit', unit, path)
109 @@ -92,64 +132,87 @@ Puppet::Type.type(:logical_volume).provide :lvm do
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('|')
116 + "K" => 1**0, "M" => 1024**1, "G" => 1024**2, "T" => 1024**3, "P" => 1024**4, "E" => 1025**5,
120 - current_size = size()
121 + current_size = size()
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
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
133 - if new_size =~ /(\d+)(#{lvm_size_units_match})/i
134 - new_size_bytes = $1.to_i
135 - new_size_unit = $2.upcase
137 + info( "Current: value=#{current_size_value}, unit=#{current_size_unit}, kibi=#{current_size}" )
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
143 + if new_size == 'max'
144 + new_size = vgs('--noheading', '-o', 'vg_size', '--units', 'k', "#{@resource[:volume_group]}").strip
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]
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])
154 - elsif lvm_size_units[current_size_unit] == lvm_size_units[new_size_unit]
155 - if new_size_bytes > current_size_bytes
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
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})" )
169 - fail( "Decreasing the size requires manual intervention (#{new_size} < #{current_size})" )
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" )
176 + info( "New: value=#{new_size_value}, unit=#{new_size_unit}, kibi=#{new_size}" )
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
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})" )
195 + if not @resource[:allow_reduce]
196 + fail( "Decreasing the size requires manual intervention (#{new_size} < #{current_size})" )
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}" )
206 + fail( "Cannot reduce to size #{new_size} because VG extent size is #{vg_extent_size} KB" )
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")
217 + lvresize( '-f', '-L', "#{new_size}k", path) || fail( "Cannot reduce to size #{new_size} because lvresize failed." )
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}" )
228 + fail( "Cannot extend to size #{new_size} because VG extent size is #{vg_extent_size} KB" )
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")
240 + info( "Logical volume already has a size of #{current_size}" )
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.
248 #puts " current mirrors: #{n}"
254 @@ -176,7 +239,7 @@ Puppet::Type.type(:logical_volume).provide :lvm do
257 # Region size cannot be changed on an existing mirror (not even when changing to zero mirrors).
261 args.push( '--alloc', @resource[:alloc] )
263 @@ -222,9 +285,6 @@ Puppet::Type.type(:logical_volume).provide :lvm do
273 @@ -240,4 +300,18 @@ Puppet::Type.type(:logical_volume).provide :lvm do
274 "/dev/#{@resource[:volume_group]}"
278 + if lvs('--noheading', '-o', 'lv_size', '--units', 'm', path) =~ /\s+(\d+)\.\d+m/i
280 + lv_size = lv_size - 2
282 + dd('if=/dev/zero', 'of=' + path, 'bs=1M', "seek=#{lv_size}")
286 + dd('if=/dev/zero', 'of=' + path, 'bs=1M', 'count=100')
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'
300 - pvcreate(@resource[:name])
301 + pvcreate('-y', @resource[:name])
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
312 Puppet::Type.type(:volume_group).provide :lvm do
313 desc "Manages LVM volume groups"
315 commands :vgcreate => 'vgcreate',
316 :vgremove => 'vgremove',
317 + :pvremove => 'pvremove',
319 :vgextend => 'vgextend',
320 :vgreduce => 'vgreduce',
322 + :vgscan => 'vgscan',
324 + :lvremove => 'lvremove',
325 + :umount => 'umount'
328 vgcreate(@resource[:name], *@resource.should(:physical_volumes))
329 @@ -22,17 +28,55 @@ Puppet::Type.type(:volume_group).provide :lvm do
334 + output = Puppet::Util::Execution.execute(cmd, :failonfail => false, :combine => true)
335 + {:out => output, :exit => $CHILD_STATUS.exitstatus}
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
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|
359 + pv_to_lv[m[:_pv].strip] = "#{m[:vg]}/#{m[:lv]}"
360 + pv_to_dev[m[:_pv].strip] = "#{m[:vg].gsub('-','--')}-#{m[:lv].gsub('-','--')}"
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])
371 + vgremove(@resource[:name], '--force')
372 + extraneous.each do |volume|
375 + vgcreate(@resource[:name], *new_volumes)
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])
382 + reduce_with(volume)
385 missing = new_volumes - existing_volumes
386 missing.each { |volume| extend_with(volume) }
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"
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"
405 @@ -50,6 +50,36 @@ Puppet::Type.newtype(:logical_volume) do
406 desc "Configures the logical volume type. AIX only"
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"
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"
429 + newparam(:nuke_fs_on_resize_failure) do
430 + desc "Remove filesystem on logical volume resize failure."
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"
440 desc "Sets the inter-physical volume allocation policy. AIX only"
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
447 define lvm::logical_volume (
450 + $size_is_minsize = false,
451 $initial_size = undef,
452 + $round_to_extent = false,
454 $options = 'defaults',
456 @@ -12,6 +14,7 @@ define lvm::logical_volume (
457 $mkfs_options = undef,
458 $mountpath = "/${name}",
459 $mountpath_require = false,
464 @@ -21,6 +24,7 @@ define lvm::logical_volume (
467 validate_bool($mountpath_require)
468 + validate_bool($size_is_minsize)
470 if ($name == undef) {
471 fail("lvm::logical_volume \$name can't be undefined")
472 @@ -51,6 +55,7 @@ define lvm::logical_volume (
474 volume_group => $volume_group,
476 + size_is_minsize => $size_is_minsize,
477 initial_size => $initial_size,
479 stripesize => $stripesize,
480 @@ -81,6 +86,7 @@ define lvm::logical_volume (
484 + remounts => $remounts,
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 (
496 - $initial_size = undef
497 + $initial_size = undef,
498 + $allow_reduce = false,
499 + $round_to_extent = false,
500 + $nuke_fs_on_resize_failure = false
503 if ($name == undef) {
504 @@ -88,6 +91,9 @@ define lvm::volume (
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]
514 @@ -124,6 +130,9 @@ define lvm::volume (
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]
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')
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')
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')
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')
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')
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')
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')
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'
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')
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')
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')
691 @provider.expects(:lvs).with('--noheading', '--unit', 'g', '/dev/myvg/mylv').returns(' 1.00g').at_least_once