diff --git a/manifests/storage/disk.pp b/manifests/storage/disk.pp index dc75dae5..da509ecf 100644 --- a/manifests/storage/disk.pp +++ b/manifests/storage/disk.pp @@ -39,13 +39,26 @@ # server is fully setup or if the partition was created outside of puppet. # Defaults to true. # +# [*filesystem_type*] +# (optional) The filesystem deployed on the device. Currently only ext4 and +# xfs are supported. +# Defaults to 'xfs'. +# +# [*mount_type*] +# (optional) Define if the device is mounted by the device partition path, +# UUID, or filesystem label. +# Defaults to 'path'. +# # [*manage_filesystem*] -# (optional) If set to false, skip calling xfs_admin -l to check if a -# partition needs to be formatted with mkfs.xfs, which can, in some cases, -# increase the load on the server. This is to set to false only after the -# server is fully setup, or if the filesystem was created outside of puppet. +# (optional) If set to false, skip creating filesystem. This is to set to +# false only after the server is fully setup, or if the filesystem was +# created outside of puppet. # Defaults to true. # +# [*label*] +# (optional) Filesystem label. +# Defaults to $name. +# # =Example= # # Simply add one disk sdb: @@ -61,12 +74,15 @@ # TODO(yuxcer): maybe we can remove param $base_dir # define swift::storage::disk( - Stdlib::Absolutepath $base_dir = '/dev', - Stdlib::Absolutepath $mnt_base_dir = '/srv/node', - $byte_size = '1024', - $ext_args = '', - Boolean $manage_partition = true, - Boolean $manage_filesystem = true, + Stdlib::Absolutepath $base_dir = '/dev', + Stdlib::Absolutepath $mnt_base_dir = '/srv/node', + $byte_size = '1024', + $ext_args = '', + Boolean $manage_partition = true, + Enum['ext4', 'xfs'] $filesystem_type = 'xfs', + Enum['path', 'uuid', 'label'] $mount_type = 'path', + Boolean $manage_filesystem = true, + String[1] $label = $name, ) { include swift::deps @@ -89,15 +105,22 @@ define swift::storage::disk( onlyif => ["test -b ${base_dir}/${name}","parted ${base_dir}/${name} print|tail -1|grep 'Error'"], before => Anchor['swift::config::end'], } - Exec["create_partition_label-${name}"] ~> Swift::Storage::Xfs<| title == $name |> + + if $filesystem_type == 'xfs' { + Exec["create_partition_label-${name}"] ~> Swift::Storage::Xfs[$name] + } else { + Exec["create_partition_label-${name}"] ~> Swift::Storage::Ext4[$name] + } } - swift::storage::xfs { $name: - device => "${base_dir}/${name}", - mnt_base_dir => $mnt_base_dir, - byte_size => $byte_size, - loopback => false, - manage_filesystem => $manage_filesystem, - } + create_resources("swift::storage::${filesystem_type}", { $name => { + 'device' => "${base_dir}/${name}", + 'mnt_base_dir' => $mnt_base_dir, + 'byte_size' => $byte_size, + 'loopback' => false, + 'mount_type' => $mount_type, + 'manage_filesystem' => $manage_filesystem, + 'label' => $label, + }}) } diff --git a/releasenotes/notes/storage-disk-opts-65e4866c26090854.yaml b/releasenotes/notes/storage-disk-opts-65e4866c26090854.yaml new file mode 100644 index 00000000..6924117d --- /dev/null +++ b/releasenotes/notes/storage-disk-opts-65e4866c26090854.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + The ``swift::storage::disk`` defined resource type now supports + the following parameters. + + - ``filesystem_type`` + - ``mount_type`` + - ``label`` diff --git a/spec/defines/swift_storage_disk_spec.rb b/spec/defines/swift_storage_disk_spec.rb index d77f5294..09cef382 100644 --- a/spec/defines/swift_storage_disk_spec.rb +++ b/spec/defines/swift_storage_disk_spec.rb @@ -24,7 +24,9 @@ describe 'swift::storage::disk' do :mnt_base_dir => '/srv/node', :byte_size => '1024', :loopback => false, + :mount_type => 'path', :manage_filesystem => true, + :label => 'sdb', ) } end @@ -34,6 +36,7 @@ describe 'swift::storage::disk' do :mnt_base_dir => '/srv/data', :byte_size => '2048', :ext_args => 'mkpart primary 0% 100%', + :mount_type => 'label', :manage_filesystem => false, } end @@ -50,7 +53,34 @@ describe 'swift::storage::disk' do :mnt_base_dir => '/srv/data', :byte_size => '2048', :loopback => false, + :mount_type => 'label', :manage_filesystem => false, + :label => 'sdb', + ) } + end + + context 'with ext4 filesystem type' do + let :params do + { + :filesystem_type => 'ext4' + } + end + + it { is_expected.to contain_exec('create_partition_label-sdb').with( + :command => 'parted -s /dev/sdb mklabel gpt ', + :path => ['/usr/bin/', '/sbin', '/bin'], + :onlyif => ['test -b /dev/sdb', 'parted /dev/sdb print|tail -1|grep \'Error\''], + :before => 'Anchor[swift::config::end]' + )} + + it { is_expected.to contain_swift__storage__ext4('sdb').with( + :device => '/dev/sdb', + :mnt_base_dir => '/srv/node', + :byte_size => '1024', + :loopback => false, + :mount_type => 'path', + :manage_filesystem => true, + :label => 'sdb', ) } end