diff --git a/manifests/plugin.pp b/manifests/plugin.pp index 795bca32..bd1b2501 100644 --- a/manifests/plugin.pp +++ b/manifests/plugin.pp @@ -43,8 +43,10 @@ } if $config { + $config_file_absent = $version in ['absent', 'purged'] + file { $config_file: - ensure => bool2str($version == 'absent', 'absent', 'file'), + ensure => bool2str($config_file_absent, 'absent', 'file'), owner => $config_file_owner, group => $config_file_group, mode => $config_file_mode, diff --git a/manifests/plugin/remote_execution/cockpit.pp b/manifests/plugin/remote_execution/cockpit.pp index d5ba34e2..6b253172 100644 --- a/manifests/plugin/remote_execution/cockpit.pp +++ b/manifests/plugin/remote_execution/cockpit.pp @@ -15,7 +15,9 @@ Optional[String[1]] $ensure = undef, Array[Stdlib::HTTPUrl] $origins = [], ) { - if $ensure != 'absent' { + $ensure_absent = $ensure in ['absent', 'purged'] + + unless $ensure_absent { require foreman::plugin::remote_execution } @@ -36,7 +38,7 @@ version => $ensure, } - if $ensure != 'absent' { + unless $ensure_absent { service { 'foreman-cockpit': ensure => running, enable => true, @@ -45,7 +47,7 @@ } } - $file_ensure = bool2str($ensure == 'absent', 'absent', 'file') + $file_ensure = bool2str($ensure_absent, 'absent', 'file') file { "${config_directory}/cockpit.conf": ensure => $file_ensure, @@ -65,7 +67,7 @@ require => Foreman::Plugin['remote_execution-cockpit'], } - if $ensure == 'absent' { + if $ensure_absent { foreman_config_entry { 'remote_execution_cockpit_url': value => '', ignore_missing => true, diff --git a/spec/classes/plugin/remote_execution_cockpit_spec.rb b/spec/classes/plugin/remote_execution_cockpit_spec.rb index b26895eb..ebb92af8 100644 --- a/spec/classes/plugin/remote_execution_cockpit_spec.rb +++ b/spec/classes/plugin/remote_execution_cockpit_spec.rb @@ -139,6 +139,22 @@ class {'foreman': it { is_expected.to contain_file('/etc/foreman/cockpit/foreman-cockpit-session.yml').with_ensure('absent') } it { is_expected.to contain_foreman_config_entry('remote_execution_cockpit_url').with_value('') } end + + describe 'ensure purged' do + let(:params) do + { + ensure: 'purged', + } + end + + it { is_expected.to compile.with_all_deps } + it { is_expected.not_to contain_class('foreman::plugin::remote_execution') } + it { is_expected.to contain_foreman__plugin('remote_execution-cockpit').with_version('purged') } + it { is_expected.not_to contain_service('foreman-cockpit') } + it { is_expected.to contain_file('/etc/foreman/cockpit/cockpit.conf').with_ensure('absent') } + it { is_expected.to contain_file('/etc/foreman/cockpit/foreman-cockpit-session.yml').with_ensure('absent') } + it { is_expected.to contain_foreman_config_entry('remote_execution_cockpit_url').with_value('') } + end end end end diff --git a/spec/defines/foreman_plugin_spec.rb b/spec/defines/foreman_plugin_spec.rb index 01399c49..07e378ad 100644 --- a/spec/defines/foreman_plugin_spec.rb +++ b/spec/defines/foreman_plugin_spec.rb @@ -91,6 +91,20 @@ it { is_expected.to contain_package('myplugin').with_ensure('absent') } it { is_expected.to contain_file('/etc/foreman/plugins/foreman_myplugin.yaml').with_ensure('absent') } end + + context 'ensure purged' do + let(:params) do + { + package: 'myplugin', # fixed to make testing easier + version: 'purged', + config: 'the config content', + } + end + + it { is_expected.to compile.with_all_deps } + it { is_expected.to contain_package('myplugin').with_ensure('purged') } + it { is_expected.to contain_file('/etc/foreman/plugins/foreman_myplugin.yaml').with_ensure('absent') } + end end end end