Skip to content

Commit 43679ad

Browse files
committed
feat: allow uninstalling the Zabbix agent
feat: add tests for new "ensure" parameter in zabbix::agent
1 parent 051f24c commit 43679ad

File tree

2 files changed

+48
-9
lines changed

2 files changed

+48
-9
lines changed

manifests/agent.pp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# @summary This will install and configure the zabbix-agent deamon
2+
# @param ensure Ensure that the agent is either present or absent
23
# @param zabbix_version This is the zabbix version.
34
# @param zabbix_package_state The state of the package that needs to be installed: present or latest.
45
# @param zabbix_package_agent The name of the agent package that we manage
@@ -147,6 +148,7 @@
147148
#
148149
# @author Werner Dijkerman [email protected]
149150
class zabbix::agent (
151+
Enum['absent', 'present'] $ensure = 'present',
150152
$zabbix_version = $zabbix::params::zabbix_version,
151153
$zabbix_package_state = $zabbix::params::zabbix_package_state,
152154
$zabbix_package_agent = $zabbix::params::zabbix_package_agent,
@@ -232,6 +234,16 @@
232234
) inherits zabbix::params {
233235
$agent2 = $zabbix_package_agent == 'zabbix-agent2'
234236

237+
# Set up overrides if the ensure parameter is set to 'absent'
238+
$dir_ensure = $ensure ? { 'absent' => $ensure, default => 'directory' }
239+
$file_ensure = $ensure ? { 'absent' => $ensure, default => 'file' }
240+
$include_dir_force = $ensure ? { 'absent' => true, default => undef }
241+
$_include_dir_purge = $ensure ? { 'absent' => true, default => $include_dir_purge }
242+
$_manage_repo = $ensure ? { 'absent' => false, default => $manage_repo }
243+
$_service_enable = $ensure ? { 'absent' => false, default => $service_enable }
244+
$_service_ensure = $ensure ? { 'absent' => 'stopped', default => $service_ensure }
245+
$_zabbix_package_state = $ensure ? { 'absent' => $ensure, default => $zabbix_package_state }
246+
235247
# Find if listenip is set. If not, we can set to specific ip or
236248
# to network name. If more than 1 interfaces are available, we
237249
# can find the ipaddress of this specific interface if listenip
@@ -276,7 +288,7 @@
276288
# Only include the repo class if it has not yet been included
277289
unless defined(Class['Zabbix::Repo']) {
278290
class { 'zabbix::repo':
279-
manage_repo => $manage_repo,
291+
manage_repo => $_manage_repo,
280292
zabbix_version => $zabbix_version,
281293
}
282294
}
@@ -291,7 +303,7 @@
291303
} else {
292304
assert_type(Stdlib::Windowspath, $zabbix_package_source)
293305
package { $zabbix_package_agent:
294-
ensure => $zabbix_package_state,
306+
ensure => $_zabbix_package_state,
295307
tag => 'zabbix',
296308
provider => $zabbix_package_provider,
297309
source => $zabbix_package_source,
@@ -302,7 +314,7 @@
302314
else {
303315
# Installing the package
304316
package { $zabbix_package_agent:
305-
ensure => $zabbix_package_state,
317+
ensure => $_zabbix_package_state,
306318
require => Class['zabbix::repo'],
307319
tag => 'zabbix',
308320
provider => $zabbix_package_provider,
@@ -336,8 +348,8 @@
336348

337349
# Controlling the 'zabbix-agent' service
338350
service { $servicename:
339-
ensure => $service_ensure,
340-
enable => $service_enable,
351+
ensure => $_service_ensure,
352+
enable => $_service_enable,
341353
require => $service_require,
342354
}
343355

@@ -352,7 +364,7 @@
352364

353365
# Configuring the zabbix-agent configuration file
354366
file { $agent_configfile_path:
355-
ensure => file,
367+
ensure => $file_ensure,
356368
owner => $agent_config_owner,
357369
group => $agent_config_group,
358370
mode => '0644',
@@ -364,11 +376,12 @@
364376

365377
# Include dir for specific zabbix-agent checks.
366378
file { $include_dir:
367-
ensure => directory,
379+
ensure => $dir_ensure,
368380
owner => $agent_config_owner,
369381
group => $agent_config_group,
382+
force => $include_dir_force,
370383
recurse => true,
371-
purge => $include_dir_purge,
384+
purge => $_include_dir_purge,
372385
notify => Service[$servicename],
373386
require => File[$agent_configfile_path],
374387
}
@@ -394,7 +407,7 @@
394407
# https://support.zabbix.com/browse/ZBX-11631
395408
if fact('os.selinux.enabled') == true and $manage_selinux {
396409
selinux::module { 'zabbix-agent':
397-
ensure => 'present',
410+
ensure => $ensure,
398411
content_te => template('zabbix/selinux/zabbix-agent.te.erb'),
399412
before => Service[$servicename],
400413
}

spec/classes/agent_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,32 @@
264264
it { is_expected.to contain_file(config_path).with_content %r{^Alias=name2$} }
265265
end
266266

267+
context 'when declaring ensure is absent' do
268+
let :params do
269+
{
270+
ensure: 'absent'
271+
}
272+
end
273+
274+
if facts[:kernel] == 'Linux'
275+
it { is_expected.to contain_package(package_name).with_ensure('absent') }
276+
end
277+
278+
it { is_expected.to contain_class('zabbix::repo').with_manage_repo(false) }
279+
it do
280+
is_expected.to contain_service(service_name).
281+
with_ensure('stopped').
282+
with_enable(false).
283+
that_requires("Package[#{package_name}]")
284+
end
285+
it do
286+
is_expected.to contain_file(include_dir).
287+
with_ensure('absent').
288+
with_force(true).
289+
with_purge(true)
290+
end
291+
end
292+
267293
context 'configuration file with full options' do
268294
if facts[:kernel] == 'Linux'
269295
let :params do

0 commit comments

Comments
 (0)