diff --git a/REFERENCE.md b/REFERENCE.md
index 92e260d7..9363ee73 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -1359,6 +1359,7 @@ class { 'zabbix::agent':
The following parameters are available in the `zabbix::agent` class:
+* [`ensure`](#-zabbix--agent--ensure)
* [`zabbix_version`](#-zabbix--agent--zabbix_version)
* [`zabbix_package_state`](#-zabbix--agent--zabbix_package_state)
* [`zabbix_package_agent`](#-zabbix--agent--zabbix_package_agent)
@@ -1442,6 +1443,14 @@ The following parameters are available in the `zabbix::agent` class:
* [`loadmodule`](#-zabbix--agent--loadmodule)
* [`manage_startup_script`](#-zabbix--agent--manage_startup_script)
+##### `ensure`
+
+Data type: `Enum['absent', 'present']`
+
+Ensure that the agent is either present or absent
+
+Default value: `'present'`
+
##### `zabbix_version`
Data type: `Any`
diff --git a/manifests/agent.pp b/manifests/agent.pp
index 9db33a8e..74bdeb7f 100644
--- a/manifests/agent.pp
+++ b/manifests/agent.pp
@@ -1,4 +1,5 @@
# @summary This will install and configure the zabbix-agent deamon
+# @param ensure Ensure that the agent is either present or absent
# @param zabbix_version This is the zabbix version.
# @param zabbix_package_state The state of the package that needs to be installed: present or latest.
# @param zabbix_package_agent The name of the agent package that we manage
@@ -147,6 +148,7 @@
#
# @author Werner Dijkerman ikben@werner-dijkerman.nl
class zabbix::agent (
+ Enum['absent', 'present'] $ensure = 'present',
$zabbix_version = $zabbix::params::zabbix_version,
$zabbix_package_state = $zabbix::params::zabbix_package_state,
$zabbix_package_agent = $zabbix::params::zabbix_package_agent,
@@ -232,6 +234,16 @@
) inherits zabbix::params {
$agent2 = $zabbix_package_agent == 'zabbix-agent2'
+ # Set up overrides if the ensure parameter is set to 'absent'
+ $dir_ensure = $ensure ? { 'absent' => $ensure, default => 'directory' }
+ $file_ensure = $ensure ? { 'absent' => $ensure, default => 'file' }
+ $include_dir_force = $ensure ? { 'absent' => true, default => undef }
+ $_include_dir_purge = $ensure ? { 'absent' => true, default => $include_dir_purge }
+ $_manage_repo = $ensure ? { 'absent' => false, default => $manage_repo }
+ $_service_enable = $ensure ? { 'absent' => false, default => $service_enable }
+ $_service_ensure = $ensure ? { 'absent' => 'stopped', default => $service_ensure }
+ $_zabbix_package_state = $ensure ? { 'absent' => $ensure, default => $zabbix_package_state }
+
# Find if listenip is set. If not, we can set to specific ip or
# to network name. If more than 1 interfaces are available, we
# can find the ipaddress of this specific interface if listenip
@@ -276,7 +288,7 @@
# Only include the repo class if it has not yet been included
unless defined(Class['Zabbix::Repo']) {
class { 'zabbix::repo':
- manage_repo => $manage_repo,
+ manage_repo => $_manage_repo,
zabbix_version => $zabbix_version,
}
}
@@ -291,7 +303,7 @@
} else {
assert_type(Stdlib::Windowspath, $zabbix_package_source)
package { $zabbix_package_agent:
- ensure => $zabbix_package_state,
+ ensure => $_zabbix_package_state,
tag => 'zabbix',
provider => $zabbix_package_provider,
source => $zabbix_package_source,
@@ -302,7 +314,7 @@
else {
# Installing the package
package { $zabbix_package_agent:
- ensure => $zabbix_package_state,
+ ensure => $_zabbix_package_state,
require => Class['zabbix::repo'],
tag => 'zabbix',
provider => $zabbix_package_provider,
@@ -336,8 +348,8 @@
# Controlling the 'zabbix-agent' service
service { $servicename:
- ensure => $service_ensure,
- enable => $service_enable,
+ ensure => $_service_ensure,
+ enable => $_service_enable,
require => $service_require,
}
@@ -352,7 +364,7 @@
# Configuring the zabbix-agent configuration file
file { $agent_configfile_path:
- ensure => file,
+ ensure => $file_ensure,
owner => $agent_config_owner,
group => $agent_config_group,
mode => '0644',
@@ -364,11 +376,12 @@
# Include dir for specific zabbix-agent checks.
file { $include_dir:
- ensure => directory,
+ ensure => $dir_ensure,
owner => $agent_config_owner,
group => $agent_config_group,
+ force => $include_dir_force,
recurse => true,
- purge => $include_dir_purge,
+ purge => $_include_dir_purge,
notify => Service[$servicename],
require => File[$agent_configfile_path],
}
@@ -394,7 +407,7 @@
# https://support.zabbix.com/browse/ZBX-11631
if fact('os.selinux.enabled') == true and $manage_selinux {
selinux::module { 'zabbix-agent':
- ensure => 'present',
+ ensure => $ensure,
content_te => template('zabbix/selinux/zabbix-agent.te.erb'),
before => Service[$servicename],
}
diff --git a/spec/classes/agent_spec.rb b/spec/classes/agent_spec.rb
index 856c3c95..d267a0cd 100644
--- a/spec/classes/agent_spec.rb
+++ b/spec/classes/agent_spec.rb
@@ -264,6 +264,32 @@
it { is_expected.to contain_file(config_path).with_content %r{^Alias=name2$} }
end
+ context 'when declaring ensure is absent' do
+ let :params do
+ {
+ ensure: 'absent'
+ }
+ end
+
+ it { is_expected.to contain_package(package_name).with_ensure('absent') } if facts[:kernel] == 'Linux'
+
+ it { is_expected.to contain_class('zabbix::repo').with_manage_repo(false) }
+
+ it do
+ is_expected.to contain_service(service_name).
+ with_ensure('stopped').
+ with_enable(false).
+ that_requires("Package[#{package_name}]")
+ end
+
+ it do
+ is_expected.to contain_file(include_dir).
+ with_ensure('absent').
+ with_force(true).
+ with_purge(true)
+ end
+ end
+
context 'configuration file with full options' do
if facts[:kernel] == 'Linux'
let :params do