From ff083b6b8828294f188484f1ab8a244644bca98b Mon Sep 17 00:00:00 2001 From: Aaron Miller Date: Thu, 16 Jun 2016 15:31:52 -0500 Subject: [PATCH] Initial commit for fluentd configuration --- manifests/integrations/fluentd.pp | 37 +++++++++++++ ...datadog_agent_integrations_fluentd_spec.rb | 52 +++++++++++++++++++ templates/agent-conf.d/fluentd.yaml.erb | 14 +++++ 3 files changed, 103 insertions(+) create mode 100644 manifests/integrations/fluentd.pp create mode 100644 spec/classes/datadog_agent_integrations_fluentd_spec.rb create mode 100644 templates/agent-conf.d/fluentd.yaml.erb diff --git a/manifests/integrations/fluentd.pp b/manifests/integrations/fluentd.pp new file mode 100644 index 00000000..8b96a7fe --- /dev/null +++ b/manifests/integrations/fluentd.pp @@ -0,0 +1,37 @@ +# Class: datadog_agent::integrations::fluentd +# +# This class will install the fluentd integration +# +# Parameters: +# $monitor_agent_url +# The url fluentd lists it's plugins on +# +# Sample Usage: +# +# class { 'datadog_agent::integrations::fluentd' : +# monitor_agent_url => 'http://localhost:24220/api/plugins.json', +# plugin_ids => [ +# 'elasticsearch_out', +# 'rsyslog_in', +# ], +# } +# +# +class datadog_agent::integrations::fluentd( + $monitor_agent_url = 'http://localhost:24220/api/plugins.json', + $plugin_ids = [], +) inherits datadog_agent::params { + include ::datadog_agent + + validate_array($plugin_ids) + + file { "${datadog_agent::params::conf_dir}/fluentd.yaml": + ensure => file, + owner => $datadog_agent::params::dd_user, + group => $datadog_agent::params::dd_group, + mode => '0600', + content => template('datadog_agent/agent-conf.d/fluentd.yaml.erb'), + require => Package[$datadog_agent::params::package_name], + notify => Service[$datadog_agent::params::service_name], + } +} diff --git a/spec/classes/datadog_agent_integrations_fluentd_spec.rb b/spec/classes/datadog_agent_integrations_fluentd_spec.rb new file mode 100644 index 00000000..2680a59e --- /dev/null +++ b/spec/classes/datadog_agent_integrations_fluentd_spec.rb @@ -0,0 +1,52 @@ +require 'spec_helper' + +describe 'datadog_agent::integrations::fluentd' do + let(:facts) {{ + operatingsystem: 'Ubuntu', + }} + let(:conf_dir) { '/etc/dd-agent/conf.d' } + let(:dd_user) { 'dd-agent' } + let(:dd_group) { 'root' } + let(:dd_package) { 'datadog-agent' } + let(:dd_service) { 'datadog-agent' } + let(:conf_file) { "#{conf_dir}/fluentd.yaml" } + + context 'with default parameters' do + it { should compile } + end + + context 'with monitor_agent_url set' do + let(:params) {{ + monitor_agent_url: 'foobar', + }} + + it { should compile.with_all_deps } + it { should contain_file(conf_file).with( + owner: dd_user, + group: dd_group, + mode: '0600', + )} + it { should contain_file(conf_file).that_requires("Package[#{dd_package}]") } + it { should contain_file(conf_file).that_notifies("Service[#{dd_service}]") } + + it { should contain_file(conf_file).with_content(%r{monitor_agent_url: foobar}) } + it { should contain_file(conf_file).without_content(%r{tags: }) } + + context 'with plugin_ids parameter array' do + let(:params) {{ + monitor_agent_url: 'foobar', + plugin_ids: %w{ foo bar baz }, + }} + it { should contain_file(conf_file).with_content(/plugin_ids:[^-]+- foo\s+- bar\s+- baz\s*?[^-]/m) } + end + + context 'plugin_ids not array' do + let(:params) {{ + monitor_agent_url: 'foobar', + plugin_ids: 'aoeu', + }} + + it { should_not compile } + end + end +end diff --git a/templates/agent-conf.d/fluentd.yaml.erb b/templates/agent-conf.d/fluentd.yaml.erb new file mode 100644 index 00000000..6d0379f9 --- /dev/null +++ b/templates/agent-conf.d/fluentd.yaml.erb @@ -0,0 +1,14 @@ +# +# MANAGED BY PUPPET +# + +init_config: + +instances: + - monitor_agent_url: <%= @monitor_agent_url %> +<% if !@plugin_ids.empty? -%> + plugin_ids: +<% @plugin_ids.each do |plugin| -%> + - <%= plugin %> +<% end -%> +<% end -%>