diff --git a/manifests/addon.pp b/manifests/addon.pp new file mode 100644 index 00000000..afe89add --- /dev/null +++ b/manifests/addon.pp @@ -0,0 +1,65 @@ +# +# Defined type: splunk::addon +# +# This define sets up a TA (Technology Addon) for Splunk. It (optionally) +# installed a package, and configures input forwarders in +# $SPLUNK_HOME/etc/apps//local/inputs.conf +# +# Examples +# +# splunk::addon { 'search': +# package_manage => false, +# } +# +# splunk::addon::input { 'monitor:///var/log/messages': +# attributes => { +# 'index' => 'server_t', +# }, +# } +# +# Alternatively you can feed inputs directly into splunk::addon using the +# inputs parameter (useful if you are configuring from Hiera) +# +# +# splunk::addon { 'search': +# package_manage => false, +# inputs => { +# 'monitor:///var/log/messages' => { +# 'attributes' => { +# 'index' => 'server_t', +# } +# } +# } +# } +# +define splunk::addon ( + $splunk_home = '/opt/splunkforwarder', + $package_manage = true, + $package_name = undef, + $inputs = {}, +) { + + + if ( $package_manage ) { + validate_string($package_name) + package { $package_name: + ensure => installed, + before => File["${splunk_home}/etc/apps/${name}/local"], + } + } + + file { "${splunk_home}/etc/apps/${name}/local": + ensure => directory, + } + + if $inputs { + concat { "splunk::addon::inputs_${name}": + path => "${splunk_home}/etc/apps/${name}/local/inputs.conf", + require => File["${splunk_home}/etc/apps/${name}/local"] + } + + create_resources('splunk::addon::input', $inputs, {"addon" => $name }) + } + +} + diff --git a/manifests/addon/input.pp b/manifests/addon/input.pp new file mode 100644 index 00000000..8619a7b2 --- /dev/null +++ b/manifests/addon/input.pp @@ -0,0 +1,17 @@ +# Private defined type callled by splunk::addon + +define splunk::addon::input ( + $addon, + $attributes={}, +) { + + assert_private() + + concat::fragment { "splunk::addon::input::${addon}::${name}:": + target => "splunk::addon::inputs_${addon}", + content => template('splunk/addon/_input.erb'), + order => '10', + } +} + + diff --git a/manifests/forwarder.pp b/manifests/forwarder.pp index 8a462f2c..02ceec4c 100644 --- a/manifests/forwarder.pp +++ b/manifests/forwarder.pp @@ -54,6 +54,7 @@ $forwarder_output = $splunk::params::forwarder_output, $forwarder_input = $splunk::params::forwarder_input, $create_password = $splunk::params::create_password, + $addons = {}, ) inherits splunk::params { $virtual_service = $splunk::params::forwarder_service @@ -81,6 +82,10 @@ install_options => $splunk::params::forwarder_install_options, tag => 'splunk_forwarder', } + + # Declare addons + create_resources('splunk::addon', $addons) + # Declare inputs and outputs specific to the forwarder profile create_resources( 'splunkforwarder_input',$forwarder_input) create_resources( 'splunkforwarder_output',$forwarder_output) diff --git a/templates/addon/_input.erb b/templates/addon/_input.erb new file mode 100644 index 00000000..275d504e --- /dev/null +++ b/templates/addon/_input.erb @@ -0,0 +1,6 @@ +[<%= @name %>] +<% @attributes.each do |key,val| -%> +<%= key %>=<%= val %> +<% end -%> + +