diff --git a/README.md b/README.md index 2f196db..c2c66f7 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,16 @@ optional. The available parameters are the following: +#### Note on parameters with RedHat OSFamily: +The following parameters do not work with RedHat based systems: +```puppet +mdadm { $name : + ... + generate_conf => $generate_conf, + update_initramfs => $update_initramfs, + } +``` + ### Parameters *See puppet doc* diff --git a/lib/puppet/provider/mdadm/mdadm.rb b/lib/puppet/provider/mdadm/mdadm_debian.rb similarity index 98% rename from lib/puppet/provider/mdadm/mdadm.rb rename to lib/puppet/provider/mdadm/mdadm_debian.rb index 345a4df..79be58d 100644 --- a/lib/puppet/provider/mdadm/mdadm.rb +++ b/lib/puppet/provider/mdadm/mdadm_debian.rb @@ -2,7 +2,8 @@ Puppet::Type.type(:mdadm).provide(:mdadm) do desc "Manage Md raid devices" - + confine :osfamily => [:debian] + commands :mdadm_cmd => 'mdadm', :mkconf => '/usr/share/mdadm/mkconf', :yes => 'yes', diff --git a/lib/puppet/provider/mdadm/mdadm_redhat.rb b/lib/puppet/provider/mdadm/mdadm_redhat.rb new file mode 100644 index 0000000..2f940f5 --- /dev/null +++ b/lib/puppet/provider/mdadm/mdadm_redhat.rb @@ -0,0 +1,60 @@ +require 'puppet' + +Puppet::Type.type(:mdadm).provide(:mdadm) do + desc "Manage Md raid devices" + confine :osfamily => [:redhat] + + commands :mdadm_cmd => 'mdadm', + :yes => 'yes' + + def create + cmd = [command(:mdadm_cmd)] + cmd << "--create" + cmd << "-e #{resource[:metadata]}" + cmd << resource.name + cmd << "--level=#{resource[:level]}" + cmd << "--raid-devices=#{resource[:active_devices] || resource[:devices].size}" + cmd << "--spare-devices=#{resource[:spare_devices]}" if resource[:spare_devices] + cmd << "--parity=#{resource[:parity]}" if resource[:parity] + cmd << "--chunk=#{resource[:chunk]}" if resource[:chunk] + cmd << resource[:devices] + + if resource[:force] + cmd.unshift(command(:yes), "|") + end + + execute(cmd.join(" ")) + end + + def assemble + cmd = [command(:mdadm_cmd)] + cmd << "--assemble" + cmd << resource.name + cmd << resource[:devices] + execute(cmd) + end + + def stop + cmd = [command(:mdadm_cmd)] + cmd << "--misc" + cmd << "--stop" + cmd << resource.name + execute(cmd) + end + + def exists? + device_not_found = 4 + begin + execute([command(:mdadm_cmd), "--detail", "--test", resource.name]) + debug "Device #{resource.name} found" + return ($CHILD_STATUS.exitstatus == 0) + rescue Puppet::ExecutionFailure + if ($CHILD_STATUS.exitstatus == device_not_found) + debug "Device #{resource.name} not found" + return false + else + raise + end + end + end +end diff --git a/manifests/config.pp b/manifests/config.pp index 2d6f2f7..08c98fc 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -5,7 +5,7 @@ class mdadm::config { if ($mdadm::include_cron) { - file { '/etc/cron.d/mdadm' : + file { $mdadm::params::cron_name : ensure => 'present', } } diff --git a/manifests/params.pp b/manifests/params.pp index c516dfb..33cc27a 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -18,9 +18,20 @@ $service_hasstatus = true } $include_cron = true + $cron_name = '/etc/cron.d/mdadm' + } + 'RedHat': { + $package_name = 'mdadm' + $package_ensure = 'present' + $service_name = 'mdmonitor' + $service_ensure = 'stopped' + $service_manage = false + $service_hasstatus = true + $include_cron = true + $cron_name = '/etc/cron.d/raid-check' } default: { - fail("${::operatingsystem} not supported") + fail(" osfamily: ${::osfamily}, operatingsystem: ${::operatingsystem} not supported") } } }