diff --git a/functions/ensure.pp b/functions/ensure.pp new file mode 100644 index 0000000..d509a74 --- /dev/null +++ b/functions/ensure.pp @@ -0,0 +1,24 @@ +# @summary function to cast ensure parameter to resource specific value +function stdlib::ensure( + Variant[Boolean, Enum['present', 'absent']] $ensure, + Enum['directory', 'link', 'mounted', 'service', 'file'] $resource, +) >> String { + $_ensure = $ensure ? { + Boolean => $ensure.bool2str('present', 'absent'), + default => $ensure, + } + case $resource { + 'service': { + $_ensure ? { + 'present' => 'running', + default => 'stopped', + } + } + default: { + $_ensure ? { + 'present' => $resource, + default => $_ensure, + } + } + } +} diff --git a/spec/functions/stdlib_ensure_spec.rb b/spec/functions/stdlib_ensure_spec.rb new file mode 100644 index 0000000..ebdcb9c --- /dev/null +++ b/spec/functions/stdlib_ensure_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe 'stdlib::ensure' do + context 'work with service resource' do + it { is_expected.to run.with_params('present', 'service').and_return('running') } + it { is_expected.to run.with_params(true, 'service').and_return('running') } + it { is_expected.to run.with_params('absent', 'service').and_return('stopped') } + it { is_expected.to run.with_params(false, 'service').and_return('stopped') } + end + ['directory', 'link', 'mounted', 'file'].each do |resource| + context "work with #{resource} resource" do + it { is_expected.to run.with_params('present', resource).and_return(resource) } + it { is_expected.to run.with_params(true, resource).and_return(resource) } + it { is_expected.to run.with_params('absent', resource).and_return('absent') } + it { is_expected.to run.with_params(false, resource).and_return('absent') } + end + end +end