From 70109f162bce438c429bfc2ffdc08a10ae84ab39 Mon Sep 17 00:00:00 2001 From: Cristian Juve Date: Wed, 27 Jul 2016 10:53:12 +0200 Subject: [PATCH] Riak integration --- manifests/integrations/riak.pp | 40 ++++++++++ .../datadog_agent_integrations_riak_spec.rb | 76 +++++++++++++++++++ templates/agent-conf.d/riak.yaml.erb | 12 +++ 3 files changed, 128 insertions(+) create mode 100644 manifests/integrations/riak.pp create mode 100644 spec/classes/datadog_agent_integrations_riak_spec.rb create mode 100644 templates/agent-conf.d/riak.yaml.erb diff --git a/manifests/integrations/riak.pp b/manifests/integrations/riak.pp new file mode 100644 index 00000000..d1888dfa --- /dev/null +++ b/manifests/integrations/riak.pp @@ -0,0 +1,40 @@ +# Class: datadog_agent::integrations::riak +# +# This class will install the necessary configuration for the riak integration +# +# Parameters: +# $url: +# The URL for riak +# $tags +# Optional array of tags +# +# Sample Usage: +# +# include 'datadog_agent::integrations::riak' +# +# OR +# +# class { 'datadog_agent::integrations::riak' : +# url => 'http://localhost:8098/stats', +# } +# +class datadog_agent::integrations::riak( + $url = 'http://localhost:8098/stats', + $tags = [], +) inherits datadog_agent::params { + include datadog_agent + + validate_string($url) + validate_array($tags) + + file { + "${datadog_agent::params::conf_dir}/riak.yaml": + ensure => file, + owner => $datadog_agent::params::dd_user, + group => $datadog_agent::params::dd_group, + mode => '0644', + content => template('datadog_agent/agent-conf.d/riak.yaml.erb'), + require => Package[$datadog_agent::params::package_name], + notify => Service[$datadog_agent::params::service_name] + } +} diff --git a/spec/classes/datadog_agent_integrations_riak_spec.rb b/spec/classes/datadog_agent_integrations_riak_spec.rb new file mode 100644 index 00000000..aa1f835c --- /dev/null +++ b/spec/classes/datadog_agent_integrations_riak_spec.rb @@ -0,0 +1,76 @@ +require 'spec_helper' + +describe 'datadog_agent::integrations::riak' 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}/riak.yaml" } + + it { should compile.with_all_deps } + it { should contain_file(conf_file).with( + owner: dd_user, + group: dd_group, + mode: '0644', + )} + it { should contain_file(conf_file).that_requires("Package[#{dd_package}]") } + it { should contain_file(conf_file).that_notifies("Service[#{dd_service}]") } + + context 'with default parameters' do + it { should contain_file(conf_file).with_content(%r{url: http://localhost:8098/stats}) } + it { should contain_file(conf_file).without_content(%r{tags: }) } + end + + context 'with parameters set' do + let(:params) {{ + url: 'http://foo.bar.baz:8098/stats', + tags: %w{ foo bar baz }, + }} + it { should contain_file(conf_file).with_content(%r{url: http://foo.bar.baz:8098/stats}) } + it { should contain_file(conf_file).with_content(/tags:\s+- foo\s+- bar\s+- baz\s*?[^-]/m) } + end + context 'with tags parameter single value' do + let(:params) {{ + tags: 'foo', + }} + it { should_not compile } + + skip "this is currently unimplemented behavior" do + it { should contain_file(conf_file).with_content(/tags:\s+- foo\s*?[^-]/m) } + end + end + context 'with tags parameter array' do + let(:params) {{ + tags: %w{ foo bar baz }, + }} + it { should contain_file(conf_file).with_content(/tags:\s+- foo\s+- bar\s+- baz\s*?[^-]/m) } + end + context 'with tags parameter empty values' do + context 'mixed in with other tags' do + let(:params) {{ + tags: [ 'foo', '', 'baz' ] + }} + it { should contain_file(conf_file).with_content(/tags:\s+- foo\s+- baz\s*?[^-]/m) } + end + + context 'single element array of an empty string' do + let(:params) {{ + tags: [''], + }} + + skip("undefined behavior") + end + + context 'single value empty string' do + let(:params) {{ + tags: '', + }} + + skip("doubly undefined behavior") + end + end +end diff --git a/templates/agent-conf.d/riak.yaml.erb b/templates/agent-conf.d/riak.yaml.erb new file mode 100644 index 00000000..169fc4ae --- /dev/null +++ b/templates/agent-conf.d/riak.yaml.erb @@ -0,0 +1,12 @@ +init_config: + +instances: + - url: <%= @url %> +<% if @tags and ! @tags.empty? -%> + tags: + <%- Array(@tags).each do |tag| -%> + <%- if tag != '' -%> + - <%= tag %> + <%- end -%> + <%- end -%> +<% end -%>