diff --git a/.kitchen.yml b/.kitchen.yml index a4efa261..eab2756b 100644 --- a/.kitchen.yml +++ b/.kitchen.yml @@ -317,6 +317,22 @@ suites: init_config: default_timeout: 10 +- name: datadog_pgbouncer + run_list: + - recipe[datadog::pgbouncer] + attributes: + datadog: + <<: *DATADOG + pgbouncer: + instances: + - host: localhost + port: 6432 + username: john + password: doe + tags: + - toto + - tata + - name: datadog_process run_list: - recipe[datadog::process] diff --git a/recipes/pgbouncer.rb b/recipes/pgbouncer.rb new file mode 100644 index 00000000..fe1c6770 --- /dev/null +++ b/recipes/pgbouncer.rb @@ -0,0 +1,39 @@ +# +# Cookbook Name:: datadog +# Recipe:: pgbouncer +# +# Copyright 2011-2015, Datadog +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +include_recipe 'datadog::dd-agent' + +# Build a data structure with configuration. +# @see https://github.com/DataDog/dd-agent/blob/master/conf.d/pgbouncer.yaml.example Pgbouncer Example +# @example +# node.override['datadog']['pgbouncer']['instances'] = [ +# { +# host: 'localhost', +# port: '15432', +# username: 'john', +# password: 'doe', +# tags: [ +# 'optional_tag1', +# 'optional_tag2' +# ] +# } +# ] + +datadog_monitor 'pgbouncer' do + instances node['datadog']['pgbouncer']['instances'] +end diff --git a/templates/default/pgbouncer.yaml.erb b/templates/default/pgbouncer.yaml.erb new file mode 100644 index 00000000..511b75ee --- /dev/null +++ b/templates/default/pgbouncer.yaml.erb @@ -0,0 +1,6 @@ +# Generated by Chef, local modifications will be overwritten + +<%= JSON.parse(({ 'instances' => @instances }).to_json).to_yaml %> + +init_config: +# Nothing to configure here diff --git a/test/integration/datadog_pgbouncer/serverspec/Gemfile b/test/integration/datadog_pgbouncer/serverspec/Gemfile new file mode 120000 index 00000000..74f9789f --- /dev/null +++ b/test/integration/datadog_pgbouncer/serverspec/Gemfile @@ -0,0 +1 @@ +../../helpers/serverspec/Gemfile \ No newline at end of file diff --git a/test/integration/datadog_pgbouncer/serverspec/pgbouncer_spec.rb b/test/integration/datadog_pgbouncer/serverspec/pgbouncer_spec.rb new file mode 100644 index 00000000..74900c9e --- /dev/null +++ b/test/integration/datadog_pgbouncer/serverspec/pgbouncer_spec.rb @@ -0,0 +1,36 @@ +# Encoding: utf-8 +require 'json_spec' +require 'serverspec' +require 'yaml' + +set :backend, :exec +set :path, '/sbin:/usr/local/sbin:$PATH' + +AGENT_CONFIG = '/etc/dd-agent/conf.d/pgbouncer.yaml' + +describe service('datadog-agent') do + it { should be_running } +end + +describe file(AGENT_CONFIG) do + it { should be_a_file } + + it 'is valid yaml matching input values' do + generated = YAML.load_file(AGENT_CONFIG) + + expected = { + instances: [ + { + host: 'localhost', + port: 6432, + username: 'john', + password: 'doe', + tags: ['toto', 'tata'] + } + ], + init_config: nil + } + + expect(generated.to_json).to be_json_eql expected.to_json + end +end