diff --git a/REFERENCE.md b/REFERENCE.md
index 61f3db43..cdbf1a11 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -864,6 +864,8 @@ The following parameters are available in the `splunk::forwarder` class:
* [`forwarder_homedir`](#-splunk--forwarder--forwarder_homedir)
* [`forwarder_confdir`](#-splunk--forwarder--forwarder_confdir)
* [`service_name`](#-splunk--forwarder--service_name)
+* [`service_ensure`](#-splunk--forwarder--service_ensure)
+* [`service_enable`](#-splunk--forwarder--service_enable)
* [`service_file`](#-splunk--forwarder--service_file)
* [`boot_start`](#-splunk--forwarder--boot_start)
* [`use_default_config`](#-splunk--forwarder--use_default_config)
@@ -1026,6 +1028,22 @@ The name of the Splunk Forwarder service.
Default value: `$splunk::params::forwarder_service`
+##### `service_ensure`
+
+Data type: `String[1]`
+
+Ensure passed to the splunk service resource.
+
+Default value: `$splunk::params::forwarder_service_ensure`
+
+##### `service_enable`
+
+Data type: `String[1]`
+
+Enable passed to the splunk service resource.
+
+Default value: `$splunk::params::forwarder_service_enable`
+
##### `service_file`
Data type: `Stdlib::Absolutepath`
diff --git a/manifests/forwarder.pp b/manifests/forwarder.pp
index d9ca0876..29a28d3d 100644
--- a/manifests/forwarder.pp
+++ b/manifests/forwarder.pp
@@ -68,6 +68,12 @@
# @param service_name
# The name of the Splunk Forwarder service.
#
+# @param service_ensure
+# Ensure passed to the splunk service resource.
+#
+# @param service_enable
+# Enable passed to the splunk service resource.
+#
# @param service_file
# The path to the Splunk Forwarder service file.
#
@@ -172,6 +178,8 @@
Stdlib::Absolutepath $forwarder_homedir = $splunk::params::forwarder_homedir,
Stdlib::Absolutepath $forwarder_confdir = $splunk::params::forwarder_confdir,
String[1] $service_name = $splunk::params::forwarder_service,
+ String[1] $service_ensure = $splunk::params::forwarder_service_ensure,
+ String[1] $service_enable = $splunk::params::forwarder_service_enable,
Stdlib::Absolutepath $service_file = $splunk::params::forwarder_service_file,
Boolean $boot_start = $splunk::params::boot_start,
Boolean $use_default_config = true,
diff --git a/manifests/forwarder/service.pp b/manifests/forwarder/service.pp
index 8d616aeb..68a03205 100644
--- a/manifests/forwarder/service.pp
+++ b/manifests/forwarder/service.pp
@@ -5,8 +5,8 @@
#
class splunk::forwarder::service {
service { $splunk::forwarder::service_name:
- ensure => running,
- enable => true,
+ ensure => $splunk::forwarder::service_ensure,
+ enable => $splunk::forwarder::service_enable,
hasstatus => true,
hasrestart => true,
}
diff --git a/manifests/params.pp b/manifests/params.pp
index 31cdb4d3..3d0cf5a5 100644
--- a/manifests/params.pp
+++ b/manifests/params.pp
@@ -166,6 +166,8 @@
$enterprise_confdir = "${enterprise_homedir}/etc"
$forwarder_install_options = []
$enterprise_install_options = []
+ $forwarder_service_ensure = 'running'
+ $forwarder_service_enable = 'true'
# Systemd not supported until Splunk 7.2.2
if $facts['service_provider'] == 'systemd' and versioncmp($version, '7.2.2') >= 0 {
$enterprise_service = 'Splunkd'
@@ -198,6 +200,8 @@
$enterprise_confdir = "${enterprise_homedir}/etc"
$forwarder_install_options = []
$enterprise_install_options = []
+ $forwarder_service_ensure = 'running'
+ $forwarder_service_enable = 'true'
# Systemd not supported until Splunk 7.2.2
if $facts['service_provider'] == 'systemd' and versioncmp($version, '7.2.2') >= 0 {
$enterprise_service = 'Splunkd'
@@ -232,6 +236,8 @@
$enterprise_install_options = []
$enterprise_service = 'splunk'
$forwarder_service = 'splunk'
+ $forwarder_service_ensure = 'running'
+ $forwarder_service_enable = 'true'
$enterprise_service_file = '/etc/rc.d/splunk'
$forwarder_service_file = '/etc/rc.d/splunk'
$boot_start_args = ''
@@ -247,6 +253,8 @@
$forwarder_secret_file = "${forwarder_homedir}\\etc\\auth\\splunk.secret"
$enterprise_secret_file = "${enterprise_homedir}\\etc\\auth\\splunk.secret"
$forwarder_service = 'SplunkForwarder'
+ $forwarder_service_ensure = 'running'
+ $forwarder_service_enable = 'delayed'
$forwarder_service_file = "${forwarder_homedir}\\dummy" # Not used in Windows, but attribute must be defined with a valid path
$forwarder_confdir = "${forwarder_homedir}\\etc"
$enterprise_src_subdir = 'windows'
diff --git a/spec/acceptance/splunk_forwarder_spec.rb b/spec/acceptance/splunk_forwarder_spec.rb
index 6a539b46..570851f4 100644
--- a/spec/acceptance/splunk_forwarder_spec.rb
+++ b/spec/acceptance/splunk_forwarder_spec.rb
@@ -82,6 +82,32 @@ class { 'splunk::forwarder':
end
end
+ context 'stopped' do
+ # Using puppet_apply as a helper
+ it 'works idempotently with no errors' do
+ pp = <<-EOS
+ class { 'splunk::params':
+ }
+ class { 'splunk::forwarder':
+ splunkd_port => 8090,
+ service_ensure => 'stopped',
+ }
+ EOS
+
+ # Run it twice and test for idempotency
+ apply_manifest(pp, catch_failures: true)
+ apply_manifest(pp, catch_changes: true)
+ end
+
+ describe package('splunkforwarder') do
+ it { is_expected.to be_installed }
+ end
+
+ describe service(service_name) do
+ it { is_expected.to be_stopped }
+ end
+ end
+
context 'purging' do
context 'purge_outputs => false' do
it 'works idempotently with no errors' do
diff --git a/spec/classes/forwarder_spec.rb b/spec/classes/forwarder_spec.rb
index f1f9cd0a..e7c5a416 100644
--- a/spec/classes/forwarder_spec.rb
+++ b/spec/classes/forwarder_spec.rb
@@ -33,6 +33,7 @@
it { is_expected.to contain_file('C:\\Program Files\\SplunkUniversalForwarder/etc/system/local/props.conf') }
it { is_expected.to contain_file('C:\\Program Files\\SplunkUniversalForwarder/etc/system/local/transforms.conf') }
it { is_expected.to contain_file('C:\\Program Files\\SplunkUniversalForwarder/etc/system/local/web.conf') }
+ it { is_expected.to contain_service('SplunkForwarder').with(ensure: 'running', enable: 'delayed', status: nil, restart: nil, start: nil, stop: nil) }
it { is_expected.to contain_file('C:\\Program Files\\SplunkUniversalForwarder/etc/system/local/server.conf') }
it { is_expected.not_to contain_file('C:\\Program Files\\SplunkUniversalForwarder/etc/auth/splunk.secret') }
it { is_expected.not_to contain_file('C:\\Program Files\\SplunkUniversalForwarder/etc/passwd') }
@@ -77,6 +78,29 @@
end
end
+ context 'when service_ensure = stopped' do
+ let(:params) { { 'service_ensure' => 'stopped' } }
+
+ case facts[:kernel]
+ when 'windows'
+ it { is_expected.to contain_service('SplunkForwarder').with(ensure: 'stopped', enable: 'delayed', status: nil, restart: nil, start: nil, stop: nil) }
+ when 'FreeBSD'
+ it { is_expected.to contain_service('splunk').with(ensure: 'stopped', enable: 'true', status: nil, restart: nil, start: nil, stop: nil) }
+ else
+ it { is_expected.to contain_service('SplunkForwarder').with(ensure: 'stopped', enable: 'true', status: nil, restart: nil, start: nil, stop: nil) }
+ end
+ end
+
+ context 'when service_enable = false' do
+ let(:params) { { 'service_enable' => 'false' } }
+
+ if facts[:kernel] == 'FreeBSD'
+ it { is_expected.to contain_service('splunk').with(ensure: 'running', enable: false, status: nil, restart: nil, start: nil, stop: nil) }
+ else
+ it { is_expected.to contain_service('SplunkForwarder').with(ensure: 'running', enable: false, status: nil, restart: nil, start: nil, stop: nil) }
+ end
+ end
+
context 'with $boot_start = true (defaults)' do
if facts[:kernel] == 'Linux' || facts[:kernel] == 'SunOS'