From 4edba509ac5fcceb1494112a270f7acae96e371b Mon Sep 17 00:00:00 2001 From: Seth Klein Date: Tue, 16 Feb 2016 17:58:25 -0500 Subject: [PATCH 1/6] Add directory check integration --- recipes/directory.rb | 16 ++++++++++++++++ templates/default/directory.yaml.erb | 10 ++++++++++ 2 files changed, 26 insertions(+) create mode 100644 recipes/directory.rb create mode 100644 templates/default/directory.yaml.erb diff --git a/recipes/directory.rb b/recipes/directory.rb new file mode 100644 index 00000000..63da793e --- /dev/null +++ b/recipes/directory.rb @@ -0,0 +1,16 @@ +include_recipe 'datadog::dd-agent' + +# Monitor files in a directory +# +# node['datadog']['directory']['instances'] = [ +# { +# 'directory' => "/path/to/directory", +# 'name' => 'tag_name', +# 'pattern' => '*.log", +# 'recursive' => true +# } +# ] + +datadog_monitor 'directory' do + instances node['datadog']['directory']['instances'] +end diff --git a/templates/default/directory.yaml.erb b/templates/default/directory.yaml.erb new file mode 100644 index 00000000..195f312b --- /dev/null +++ b/templates/default/directory.yaml.erb @@ -0,0 +1,10 @@ +instances: +<% @instances.each do |i| -%> + - directory: <%= i['directory'] %> + <% if i['name'] -%>name: <%= i['name'] %><% end -%> + <% if i['pattern'] -%>pattern: <%= i['pattern'] %><% end -%> + <% if i['recursive'] -%>recursive: <%= i['recursive'] %><% end -%> +<% end -%> + +# Nothing to configure here +init_config: From 8fbf63b55efe2a312b60c1f17c6f5bc4f21492b4 Mon Sep 17 00:00:00 2001 From: Seth Klein Date: Wed, 17 Feb 2016 13:42:01 -0500 Subject: [PATCH 2/6] Fix directory integration template --- templates/default/directory.yaml.erb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/templates/default/directory.yaml.erb b/templates/default/directory.yaml.erb index 195f312b..1c1e97ab 100644 --- a/templates/default/directory.yaml.erb +++ b/templates/default/directory.yaml.erb @@ -1,8 +1,11 @@ instances: <% @instances.each do |i| -%> - - directory: <%= i['directory'] %> - <% if i['name'] -%>name: <%= i['name'] %><% end -%> - <% if i['pattern'] -%>pattern: <%= i['pattern'] %><% end -%> + - directory: "<%= i['directory'] %>" + <% if i['name'] -%>name: "<%= i['name'] %>"<% end -%> + <% if i['dirtagname'] -%>dirtagname: "<%= i['dirtagname'] %>"<% end -%> + <% if i['filetagname'] -%>filetagname: "<%= i['filetagname'] %>"<% end -%> + <% if i['filegauges'] -%>filegauges: <%= i['filegauges'] %><% end -%> + <% if i['pattern'] -%>pattern: "<%= i['pattern'] %>"<% end -%> <% if i['recursive'] -%>recursive: <%= i['recursive'] %><% end -%> <% end -%> From 86add83a7faf38c0d78f3d0504d3ef740725d757 Mon Sep 17 00:00:00 2001 From: Seth Klein Date: Wed, 17 Feb 2016 16:27:11 -0500 Subject: [PATCH 3/6] Add directory check integration tests and more template fixes --- .kitchen.yml | 16 +++++++++ templates/default/directory.yaml.erb | 4 +-- .../datadog_directory/serverspec/Gemfile | 1 + .../serverspec/directory_spec.rb | 33 +++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 120000 test/integration/datadog_directory/serverspec/Gemfile create mode 100644 test/integration/datadog_directory/serverspec/directory_spec.rb diff --git a/.kitchen.yml b/.kitchen.yml index dce1bf6b..a955fa95 100644 --- a/.kitchen.yml +++ b/.kitchen.yml @@ -98,6 +98,22 @@ suites: - kitchen - sink +- name: datadog_directory + run_list: + - recipe[datadog::directory] + attributes: + datadog: + <<: *DATADOG + directory: + instances: + - directory: "/path/to/directory" + name: "tag_value" + dirtagname: "tag_dirname" + filetagname: "tag_filename" + filegauges: False + pattern: "*.log" + recursive: True + - name: datadog_cacti run_list: - recipe[datadog::cacti] diff --git a/templates/default/directory.yaml.erb b/templates/default/directory.yaml.erb index 1c1e97ab..9569422b 100644 --- a/templates/default/directory.yaml.erb +++ b/templates/default/directory.yaml.erb @@ -4,9 +4,9 @@ instances: <% if i['name'] -%>name: "<%= i['name'] %>"<% end -%> <% if i['dirtagname'] -%>dirtagname: "<%= i['dirtagname'] %>"<% end -%> <% if i['filetagname'] -%>filetagname: "<%= i['filetagname'] %>"<% end -%> - <% if i['filegauges'] -%>filegauges: <%= i['filegauges'] %><% end -%> + <% if i.key?('filegauges') -%>filegauges: <%= i['filegauges'] %><% end -%> <% if i['pattern'] -%>pattern: "<%= i['pattern'] %>"<% end -%> - <% if i['recursive'] -%>recursive: <%= i['recursive'] %><% end -%> + <% if i.key?('recursive') -%>recursive: <%= i['recursive'] %><% end -%> <% end -%> # Nothing to configure here diff --git a/test/integration/datadog_directory/serverspec/Gemfile b/test/integration/datadog_directory/serverspec/Gemfile new file mode 120000 index 00000000..74f9789f --- /dev/null +++ b/test/integration/datadog_directory/serverspec/Gemfile @@ -0,0 +1 @@ +../../helpers/serverspec/Gemfile \ No newline at end of file diff --git a/test/integration/datadog_directory/serverspec/directory_spec.rb b/test/integration/datadog_directory/serverspec/directory_spec.rb new file mode 100644 index 00000000..456198a5 --- /dev/null +++ b/test/integration/datadog_directory/serverspec/directory_spec.rb @@ -0,0 +1,33 @@ +# Encoding: utf-8 +require 'spec_helper' + +AGENT_CONFIG = File.join(@agent_config_dir, 'conf.d/directory.yaml') + +describe service(@agent_service_name) 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' => [ + { + 'directory' => '/path/to/directory', + 'name' => 'tag_value', + 'dirtagname' => 'tag_dirname', + 'filetagname' => 'tag_filename', + 'filegauges' => false, + 'pattern' => '*.log', + 'recursive' => true + } + ], + 'init_config' => nil + } + + expect(generated.to_json).to be_json_eql expected.to_json + end +end From 94e4fcb0374bf9341adbf581a8e6470598b0b178 Mon Sep 17 00:00:00 2001 From: Seth Klein Date: Wed, 17 Feb 2016 17:20:50 -0500 Subject: [PATCH 4/6] Fix tabs in whitespace --- .../datadog_directory/serverspec/directory_spec.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/integration/datadog_directory/serverspec/directory_spec.rb b/test/integration/datadog_directory/serverspec/directory_spec.rb index 456198a5..d1795792 100644 --- a/test/integration/datadog_directory/serverspec/directory_spec.rb +++ b/test/integration/datadog_directory/serverspec/directory_spec.rb @@ -16,13 +16,13 @@ expected = { 'instances' => [ { - 'directory' => '/path/to/directory', - 'name' => 'tag_value', - 'dirtagname' => 'tag_dirname', - 'filetagname' => 'tag_filename', - 'filegauges' => false, - 'pattern' => '*.log', - 'recursive' => true + 'directory' => '/path/to/directory', + 'name' => 'tag_value', + 'dirtagname' => 'tag_dirname', + 'filetagname' => 'tag_filename', + 'filegauges' => false, + 'pattern' => '*.log', + 'recursive' => true } ], 'init_config' => nil From 933380af8081e56274cabdd603381455a3ccfb78 Mon Sep 17 00:00:00 2001 From: Seth Klein Date: Tue, 26 Apr 2016 12:19:17 -0400 Subject: [PATCH 5/6] Convert directory integration kitchen test to rspec --- .kitchen.yml | 16 ------ spec/integrations/directory_spec.rb | 52 +++++++++++++++++++ .../datadog_directory/serverspec/Gemfile | 1 - .../serverspec/directory_spec.rb | 33 ------------ 4 files changed, 52 insertions(+), 50 deletions(-) create mode 100644 spec/integrations/directory_spec.rb delete mode 120000 test/integration/datadog_directory/serverspec/Gemfile delete mode 100644 test/integration/datadog_directory/serverspec/directory_spec.rb diff --git a/.kitchen.yml b/.kitchen.yml index a955fa95..dce1bf6b 100644 --- a/.kitchen.yml +++ b/.kitchen.yml @@ -98,22 +98,6 @@ suites: - kitchen - sink -- name: datadog_directory - run_list: - - recipe[datadog::directory] - attributes: - datadog: - <<: *DATADOG - directory: - instances: - - directory: "/path/to/directory" - name: "tag_value" - dirtagname: "tag_dirname" - filetagname: "tag_filename" - filegauges: False - pattern: "*.log" - recursive: True - - name: datadog_cacti run_list: - recipe[datadog::cacti] diff --git a/spec/integrations/directory_spec.rb b/spec/integrations/directory_spec.rb new file mode 100644 index 00000000..0ec99bd7 --- /dev/null +++ b/spec/integrations/directory_spec.rb @@ -0,0 +1,52 @@ +describe 'datadog::directory' do + + expected_yaml = <<-EOF + init_config: + instances: + - directory: "/path/to/directory" + name: "tag_value" + dirtagname: "tag_dirname" + filetagname: "tag_filename" + filegauges: False + pattern: "*.log" + recursive: True +EOF + + cached(:chef_run) do + ChefSpec::SoloRunner.new(step_into: ['datadog_monitor']) do |node| + node.automatic['languages'] = { python: { version: '2.7.2' } } + + node.set['datadog'] = { + api_key: 'someapikey', + directory: { + instances: [ + { + directory: '/path/to/directory', + name: 'tag_value', + dirtagname: 'tag_dirname', + filetagname: 'tag_filename', + filegauges: false, + pattern: '*.log', + recursive: true, + } + ] + } + } + end.converge(described_recipe) + end + + subject { chef_run } + + it_behaves_like 'datadog-agent' + + it { is_expected.to include_recipe('datadog::dd-agent') } + + it { is_expected.to add_datadog_monitor('directory') } + + it 'renders expected YAML config file' do + expect(chef_run).to render_file('/etc/dd-agent/conf.d/directory.yaml').with_content { |content| + expect(YAML.load(content).to_json).to be_json_eql(YAML.load(expected_yaml).to_json) + } + end + +end diff --git a/test/integration/datadog_directory/serverspec/Gemfile b/test/integration/datadog_directory/serverspec/Gemfile deleted file mode 120000 index 74f9789f..00000000 --- a/test/integration/datadog_directory/serverspec/Gemfile +++ /dev/null @@ -1 +0,0 @@ -../../helpers/serverspec/Gemfile \ No newline at end of file diff --git a/test/integration/datadog_directory/serverspec/directory_spec.rb b/test/integration/datadog_directory/serverspec/directory_spec.rb deleted file mode 100644 index d1795792..00000000 --- a/test/integration/datadog_directory/serverspec/directory_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -# Encoding: utf-8 -require 'spec_helper' - -AGENT_CONFIG = File.join(@agent_config_dir, 'conf.d/directory.yaml') - -describe service(@agent_service_name) 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' => [ - { - 'directory' => '/path/to/directory', - 'name' => 'tag_value', - 'dirtagname' => 'tag_dirname', - 'filetagname' => 'tag_filename', - 'filegauges' => false, - 'pattern' => '*.log', - 'recursive' => true - } - ], - 'init_config' => nil - } - - expect(generated.to_json).to be_json_eql expected.to_json - end -end From 59ceed54d56329d0de6d73a5c07e26abd8f758ab Mon Sep 17 00:00:00 2001 From: Seth Klein Date: Tue, 26 Apr 2016 12:29:14 -0400 Subject: [PATCH 6/6] Placate RoboCop --- spec/integrations/directory_spec.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/integrations/directory_spec.rb b/spec/integrations/directory_spec.rb index 0ec99bd7..62b8bb68 100644 --- a/spec/integrations/directory_spec.rb +++ b/spec/integrations/directory_spec.rb @@ -1,5 +1,4 @@ describe 'datadog::directory' do - expected_yaml = <<-EOF init_config: instances: @@ -27,7 +26,7 @@ filetagname: 'tag_filename', filegauges: false, pattern: '*.log', - recursive: true, + recursive: true } ] } @@ -48,5 +47,4 @@ expect(YAML.load(content).to_json).to be_json_eql(YAML.load(expected_yaml).to_json) } end - end