diff --git a/manifests/init.pp b/manifests/init.pp index 278f9c3c..db1dbf03 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -32,6 +32,8 @@ # the scheme: "fact_name:fact_value". # $puppet_run_reports # Will send results from your puppet agent runs back to the datadog service. +# $manage_dogapi_gem +# When reports are enabled, ensure the dogapi gem (required) is installed. # $puppetmaster_user # Will chown the api key used by the report processor to this user. # Defaults to the user the puppetmaster is configured to run as. @@ -246,6 +248,7 @@ $service_ensure = 'running', $service_enable = true, Boolean $manage_repo = true, + Boolean $manage_dogapi_gem = true, Boolean $manage_install = true, $hostname_extraction_regex = undef, Boolean $hostname_fqdn = false, @@ -715,6 +718,7 @@ class { 'datadog_agent::reports': api_key => $api_key, datadog_site => $datadog_site, + manage_dogapi_gem => $manage_dogapi_gem, puppet_gem_provider => $puppet_gem_provider, dogapi_version => $datadog_agent::params::dogapi_version, puppetmaster_user => $puppetmaster_user, diff --git a/manifests/reports.pp b/manifests/reports.pp index 7e5fa9a8..7b583429 100644 --- a/manifests/reports.pp +++ b/manifests/reports.pp @@ -17,6 +17,7 @@ $api_key, $puppetmaster_user, $dogapi_version, + $manage_dogapi_gem = true, $hostname_extraction_regex = undef, $datadog_site = 'datadoghq.com', $puppet_gem_provider = $datadog_agent::params::gem_provider, @@ -29,20 +30,28 @@ } else { include datadog_agent - $rubydev_package = $datadog_agent::params::rubydev_package - # check to make sure that you're not installing rubydev somewhere else - if ! defined(Package[$rubydev_package]) { - package {$rubydev_package: - ensure => installed, - before => Package['dogapi'] + if $manage_dogapi_gem { + $rubydev_package = $datadog_agent::params::rubydev_package + + # check to make sure that you're not installing rubydev somewhere else + if ! defined(Package[$rubydev_package]) { + package {$rubydev_package: + ensure => installed, + before => Package['dogapi'] + } + } + + if (! defined(Package['rubygems'])) { + # Ensure rubygems is installed + class { 'ruby': + rubygems_update => false + } } - } - if (! defined(Package['rubygems'])) { - # Ensure rubygems is installed - class { 'ruby': - rubygems_update => false + package{ 'dogapi': + ensure => $dogapi_version, + provider => $puppet_gem_provider, } } @@ -55,10 +64,5 @@ require => File['/etc/datadog-agent'], } - package{ 'dogapi': - ensure => $dogapi_version, - provider => $puppet_gem_provider, - } - } } diff --git a/spec/classes/datadog_agent_reports_spec.rb b/spec/classes/datadog_agent_reports_spec.rb index d34246d4..67f6ac7b 100644 --- a/spec/classes/datadog_agent_reports_spec.rb +++ b/spec/classes/datadog_agent_reports_spec.rb @@ -188,4 +188,41 @@ it { is_expected.to contain_file(conf_file).without_content(%r{hostname_extraction_regex:}) } end end + + context 'disabled ruby-manage' do + let(:params) do + { + api_key: 'notanapikey', + hostname_extraction_regex: nil, + dogapi_version: 'installed', + puppetmaster_user: 'puppet', + puppet_gem_provider: 'gem', + manage_dogapi_gem: false, + } + end + + describe 'datadog_agent class dogapi version override' do + let(:facts) do + { + operatingsystem: 'Debian', + osfamily: 'debian', + } + end + + it { is_expected.not_to contain_class('ruby').with_rubygems_update(false) } + it { is_expected.not_to contain_class('ruby::params') } + it { is_expected.not_to contain_package('ruby').with_ensure('installed') } + it { is_expected.not_to contain_package('rubygems').with_ensure('installed') } + + it { is_expected.not_to contain_package('ruby-dev') } + + it { is_expected.not_to contain_package('dogapi') } + + it do + is_expected.to contain_file('/etc/datadog-agent/datadog-reports.yaml')\ + .with_owner('puppet')\ + .with_group('root') + end + end + end end