From 0e156fb29ada947217756317c20d657b3f253c47 Mon Sep 17 00:00:00 2001 From: John Bellone Date: Tue, 28 Jul 2015 11:20:30 -0400 Subject: [PATCH 01/10] Update the handler to use latest version of Raven. /cc @coderanger This updates the cookbook to use the latest version of the Raven gem available at the time. It bumps the major version and adds a >= 12.1 requirement into the metadata. --- README.md | 45 +++++++++------------- attributes/default.rb | 24 ++++++++++-- files/default/sentry.rb | 85 +++++++++++++++++++++++++++-------------- metadata.rb | 21 ++++++---- recipes/default.rb | 52 ++++++++++++++----------- 5 files changed, 137 insertions(+), 90 deletions(-) diff --git a/README.md b/README.md index de104f2..48168e3 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,33 @@ -Description -=========== +# Chef Handler for Sentry -Configures and activates an error handler to send run failures to a [Sentry](htt://getsentry.com/) server. +A [Chef](https://www.chef.io) cookbook that configures and activates +an error handler to send failures to +a [Sentry](https://www.getsentry.com) server. -Requirements -============ +## Requirements -## Platform +Chef 12.1 or newer is required. -Tested on Ubuntu 12.04 and higher. +## Usage -## Cookbooks: +All you need to do is set the `node['sentry']['dsn']` value and add +the default recipe of this cookbook to your run-list. You can do this +from a wrapper cookbook recipe: -Depends on the `chef_handler` cookbook to activate the error handler. +``` ruby +node.default['sentry']['dsn'] = 'https://xxxx:yyyy@sentry.corporate.com/1' +include_recipe 'chef-handler-sentry::default' +``` -Attributes -========== +## License -* `node['sentry']['dsn']` – **Required** The DSN for your Sentry server. -* `node['sentry']['enabled']` - Boolean to enable/disable the error reporter. Defaults to `true`. - -Usage -===== - -Simply add the `chef-sentry-handler` recipe to your base role, preferably at the front -of the run list to ensure any subsequent errors are reported, and then set the -DSN in the node attributes. - -License and Author -================== - -Author:: Noah Kantrowitz () - -Copyright:: 2012, Noah Kantrowitz +Copyright 2012-2016, Noah Kantrowitz 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 +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, diff --git a/attributes/default.rb b/attributes/default.rb index 1bdba02..8e94f35 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -1,3 +1,21 @@ -default['sentry']['dsn'] = nil -default['sentry']['enabled'] = true -default['sentry']['verify_ssl'] = true +# +# Copyright 2012-2016, Noah Kantrowitz +# +# 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. +# + +default['sentry']['options']['dsn'] = nil +default['sentry']['options']['ssl_verify'] = true +default['sentry']['options']['environment'] = node.chef_environment + +default['sentry']['gem_version'] = '2.0.2' diff --git a/files/default/sentry.rb b/files/default/sentry.rb index 026bd85..7472b38 100644 --- a/files/default/sentry.rb +++ b/files/default/sentry.rb @@ -1,35 +1,62 @@ +# +# Copyright 2012-2016, Noah Kantrowitz +# +# 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. +# + +require 'chef' +require 'chef/handler' require 'raven' -module Raven - module Chef - class SentryHandler < ::Chef::Handler - def initialize(node) - Raven.configure(true) do |config| - config.ssl_verification = node['sentry']['verify_ssl'] - config.dsn = node['sentry']['dsn'] - config.logger = ::Chef::Log - config.current_environment = node.chef_environment - config.environments = [node.chef_environment] - config.send_modules = Gem::Specification.respond_to?(:map) - end - Raven.logger.debug "Raven ready to report errors" - end +# A handler which uses the Raven gem to report errors to Sentry. +# @see https://docs.chef.io/resource_chef_handler.html +# @since 1.0 +class Chef::Handler::Sentry < Chef::Handler + def initialize(options = {}) + Raven.configure do |config| + config.logger = Chef::Log + config.dsn = options[:dsn] + config.ssl_verification = options[:ssl_verify] + config.current_environment = options[:environment] + config.environments = [options[:environment]] + config.send_modules = Gem::Specification.respond_to?(:map) + end + + if options[:dsn] + Raven.logger.debug 'Raven ready to reports errors to Sentry' + else + Raven.logger.warn "node['sentry']['options']['dsn'] is not set! Raven will not send errors to Sentry!" + end + end - def report - return if success? - Raven.logger.info "Logging run failure to Sentry server" - if exception - evt = Raven::Event.capture_exception(exception) - else - evt = Raven::Event.new do |evt| - evt.message = "Unknown error during Chef run" - evt.level = :error - end - end - # Use the node name, not the FQDN - evt.server_name = node.name - Raven.send(evt) - end + def report + return if success? + event = if exception + Raven::Event.capture_exception(exception) + else + Raven::Event.new do |e| + e.message = 'Unknown fatal error during Chef run' + e.level = :fatal + end + end + event.server_name = node.name + event.timestamp = run_status.start_time + event.time_spent = run_status.elapsed_time + event.extra = { run_id: run_status.run_id }.tap do |h| + h[:policy_name] = node.policy_name if node.policy_name + h[:policy_group] = node.policy_group if node.policy_group + h[:policy_revision] = node['policy_revision'] if node['policy_revision'] end + Raven.send(event) end end diff --git a/metadata.rb b/metadata.rb index 782c6d8..a95e28b 100644 --- a/metadata.rb +++ b/metadata.rb @@ -1,9 +1,14 @@ -name "chef-sentry-handler" -maintainer "Noah Kantrowitz" -maintainer_email "noah@coderanger.net" -license "Apache 2.0" -description "Report failed runs to Sentry" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "1.0.0" +name 'chef-sentry-handler' +maintainer 'Noah Kantrowitz' +maintainer_email 'noah@coderanger.net' +license 'Apache 2.0' +description 'Report failed runs to Sentry.' +long_description 'Report failed runs to Sentry.' +version '2.0.0' -depends "chef_handler" +depends 'chef_handler', '~> 2.0' +depends 'poise-derived', '~> 1.0' + +chef_version '>= 12.1' +issues_url 'https://github.com/coderanger/chef-sentry-handler/issues' +source_url 'https://github.com/coderanger/chef-sentry-handler' diff --git a/recipes/default.rb b/recipes/default.rb index e07741e..b0ccace 100644 --- a/recipes/default.rb +++ b/recipes/default.rb @@ -1,31 +1,39 @@ -# Make sure the handlers folder exists -directory node["chef_handler"]["handler_path"] do - owner "root" - group "root" - mode "755" - recursive true - action :nothing -end.run_action(:create) +# +# Copyright 2012-2016, Noah Kantrowitz +# +# 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. +# -chef_gem "uuidtools" +include_recipe 'chef_handler::default' -chef_gem "sentry-raven" do - version "0.9.4" +chef_gem 'uuidtools' do + compile_time true end -handler_file = ::File.join(node["chef_handler"]["handler_path"], 'sentry.rb') +chef_gem 'sentry-raven' do + version node['sentry']['gem_version'] + compile_time true +end -cookbook_file handler_file do - source "sentry.rb" - owner "root" - group "root" - mode "644" +cookbook_file File.join(node['chef_handler']['handler_path'], 'sentry.rb') do action :nothing + source 'sentry.rb' + mode '0644' end.run_action(:create) -chef_handler "Raven::Chef::SentryHandler" do - source handler_file - supports({:exception => true}) - arguments [node] +chef_handler 'Chef::Handler::Sentry' do action :nothing -end.run_action(node['sentry']['enabled'] ? :enable : :disable) + source File.join(node['chef_handler']['handler_path'], 'sentry.rb') + arguments node['sentry']['options'] + supports exception: true, report: true, start: false +end.run_action(:enable) From 8e1a15094bbda7969b4fb5429fbceaad9e1296c8 Mon Sep 17 00:00:00 2001 From: John Bellone Date: Mon, 10 Oct 2016 17:06:10 -0400 Subject: [PATCH 02/10] Remove poise-derived from the run-list. --- metadata.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/metadata.rb b/metadata.rb index a95e28b..f6997d1 100644 --- a/metadata.rb +++ b/metadata.rb @@ -7,7 +7,6 @@ version '2.0.0' depends 'chef_handler', '~> 2.0' -depends 'poise-derived', '~> 1.0' chef_version '>= 12.1' issues_url 'https://github.com/coderanger/chef-sentry-handler/issues' From a301779089b8eaf2490e560287ead040d45af94d Mon Sep 17 00:00:00 2001 From: John Bellone Date: Tue, 25 Oct 2016 10:54:35 -0400 Subject: [PATCH 03/10] Upgrade the sentry-raven gem to latest version. --- metadata.rb | 2 +- recipes/default.rb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata.rb b/metadata.rb index f6997d1..82120ef 100644 --- a/metadata.rb +++ b/metadata.rb @@ -4,7 +4,7 @@ license 'Apache 2.0' description 'Report failed runs to Sentry.' long_description 'Report failed runs to Sentry.' -version '2.0.0' +version '2.0.1' depends 'chef_handler', '~> 2.0' diff --git a/recipes/default.rb b/recipes/default.rb index b0ccace..150f0d4 100644 --- a/recipes/default.rb +++ b/recipes/default.rb @@ -21,6 +21,7 @@ end chef_gem 'sentry-raven' do + action :upgrade version node['sentry']['gem_version'] compile_time true end From 80200da3c0e708c47080718d08c2774711b4d60f Mon Sep 17 00:00:00 2001 From: John Bellone Date: Tue, 25 Oct 2016 11:04:12 -0400 Subject: [PATCH 04/10] Update license information and readme. --- LICENSE | 202 ++++++++++++++++++++++++++++++++++++++++ README.md | 36 ++++--- attributes/default.rb | 1 + files/default/sentry.rb | 1 + metadata.rb | 8 +- recipes/default.rb | 1 + 6 files changed, 225 insertions(+), 24 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5cb0232 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2012-2016, Noah Kantrowitz + Copyright 2016, Bloomberg Finance L.P. + + 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. diff --git a/README.md b/README.md index 48168e3..76a8539 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,21 @@ # Chef Handler for Sentry -A [Chef](https://www.chef.io) cookbook that configures and activates -an error handler to send failures to -a [Sentry](https://www.getsentry.com) server. +Installs and configures a [Chef handler][0] for sending errors +to [Sentry][1]. ## Requirements -Chef 12.1 or newer is required. +Chef Client 12.1 or above. + +## Platforms + +This cookbook has been verified to work on the following platforms: + +- Ubuntu 14.04/16.04 +- RHEL (CentOS) 5/6/7 +- AIX 7.1 +- Solaris 11 +- Windows 2008r2/2012r2 ## Usage @@ -16,21 +25,8 @@ from a wrapper cookbook recipe: ``` ruby node.default['sentry']['dsn'] = 'https://xxxx:yyyy@sentry.corporate.com/1' -include_recipe 'chef-handler-sentry::default' +include_recipe 'chef-sentry-handler::default' ``` -## License - -Copyright 2012-2016, Noah Kantrowitz - -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. +[0]: https://docs.chef.io/handlers.html +[1]: https://getsentry.com diff --git a/attributes/default.rb b/attributes/default.rb index 8e94f35..b84bad7 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -1,5 +1,6 @@ # # Copyright 2012-2016, Noah Kantrowitz +# Copyright 2016, Bloomberg Finance L.P. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/files/default/sentry.rb b/files/default/sentry.rb index 7472b38..0d015b3 100644 --- a/files/default/sentry.rb +++ b/files/default/sentry.rb @@ -1,5 +1,6 @@ # # Copyright 2012-2016, Noah Kantrowitz +# Copyright 2016, Bloomberg Finance L.P. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/metadata.rb b/metadata.rb index 82120ef..b6036bc 100644 --- a/metadata.rb +++ b/metadata.rb @@ -2,12 +2,12 @@ maintainer 'Noah Kantrowitz' maintainer_email 'noah@coderanger.net' license 'Apache 2.0' -description 'Report failed runs to Sentry.' -long_description 'Report failed runs to Sentry.' -version '2.0.1' +description 'Installs and configures a Chef handler for sending errors to Sentry.' +long_description 'Installs and configures a Chef handler for sending errors to Sentry.' +version '2.0.0' +chef_version '>= 12.1' depends 'chef_handler', '~> 2.0' -chef_version '>= 12.1' issues_url 'https://github.com/coderanger/chef-sentry-handler/issues' source_url 'https://github.com/coderanger/chef-sentry-handler' diff --git a/recipes/default.rb b/recipes/default.rb index 150f0d4..8ece6ce 100644 --- a/recipes/default.rb +++ b/recipes/default.rb @@ -1,5 +1,6 @@ # # Copyright 2012-2016, Noah Kantrowitz +# Copyright 2016, Bloomberg Finance L.P. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 32f8aea33b1dd8f595175a6edd825257594de27f Mon Sep 17 00:00:00 2001 From: John Bellone Date: Tue, 25 Oct 2016 11:13:50 -0400 Subject: [PATCH 05/10] Modify maintainership to myself. --- metadata.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/metadata.rb b/metadata.rb index b6036bc..0c0f850 100644 --- a/metadata.rb +++ b/metadata.rb @@ -1,6 +1,6 @@ name 'chef-sentry-handler' -maintainer 'Noah Kantrowitz' -maintainer_email 'noah@coderanger.net' +maintainer 'John Bellone' +maintainer_email 'jbellone@bloomberg.net' license 'Apache 2.0' description 'Installs and configures a Chef handler for sending errors to Sentry.' long_description 'Installs and configures a Chef handler for sending errors to Sentry.' @@ -9,5 +9,5 @@ depends 'chef_handler', '~> 2.0' -issues_url 'https://github.com/coderanger/chef-sentry-handler/issues' -source_url 'https://github.com/coderanger/chef-sentry-handler' +issues_url 'https://github.com/johnbellone/chef-sentry-handler/issues' +source_url 'https://github.com/johnbellone/chef-sentry-handler' From 914b606454cad22e5f6b6cf97eced678e7ac500b Mon Sep 17 00:00:00 2001 From: John Bellone Date: Wed, 26 Oct 2016 09:50:02 -0400 Subject: [PATCH 06/10] Remove the uuidtools gem from installation. I am not sure if this was just requirement of an older version of the sentry-raven gem, but it is no longer. --- recipes/default.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/recipes/default.rb b/recipes/default.rb index 8ece6ce..e2b5258 100644 --- a/recipes/default.rb +++ b/recipes/default.rb @@ -17,10 +17,6 @@ include_recipe 'chef_handler::default' -chef_gem 'uuidtools' do - compile_time true -end - chef_gem 'sentry-raven' do action :upgrade version node['sentry']['gem_version'] From bfd88a59eb6cc87a387fd26385617931c3c599dd Mon Sep 17 00:00:00 2001 From: John Bellone Date: Wed, 26 Oct 2016 09:57:17 -0400 Subject: [PATCH 07/10] Add a bunch of cargo-cult config files for testing. --- .gitignore | 56 ++++++++++++++++ .kitchen.dokken.yml | 82 ++++++++++++++++++++++++ .rubocop.yml | 48 ++++++++++++++ .travis.yml | 42 ++++++++++++ Gemfile | 23 +++++++ Policyfile.rb | 8 +++ Rakefile | 39 +++++++++++ test/integration/default/default_spec.rb | 4 ++ 8 files changed, 302 insertions(+) create mode 100644 .gitignore create mode 100644 .kitchen.dokken.yml create mode 100644 .rubocop.yml create mode 100644 .travis.yml create mode 100644 Gemfile create mode 100644 Policyfile.rb create mode 100755 Rakefile create mode 100644 test/integration/default/default_spec.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a027490 --- /dev/null +++ b/.gitignore @@ -0,0 +1,56 @@ +# Ignore docs files +_gh_pages +_site +.ruby-version +.node-version +Gemfile.lock + +# Numerous always-ignore extensions +*.diff +*.err +*.orig +*.log +*.rej +*.swo +*.swp +*.zip +*.vi +*~ + +# OS or Editor folders +.DS_Store +._* +Thumbs.db +.cache +.project +.settings +.tmproj +*.esproj +nbproject +*.sublime-project +*.sublime-workspace +.idea + +# Komodo +*.komodoproject +.komodotools + +# grunt-html-validation +validation-status.json +validation-report.json + +# Folders to ignore +bin +node_modules +tmp +vendor +.bundle + +# Chef specifics to ignore +.chef +.chefdk +.kitchen +.kitchen.local.yml +.vagrant +Berksfile.lock +*.lock.json diff --git a/.kitchen.dokken.yml b/.kitchen.dokken.yml new file mode 100644 index 0000000..bbff811 --- /dev/null +++ b/.kitchen.dokken.yml @@ -0,0 +1,82 @@ +--- +driver: + name: dokken + chef_version: latest + privileged: true +transport: + name: dokken +provisioner: + name: dokken +verifier: + name: inspec +platforms: + - name: centos-7 + named_run_list: centos + driver: + image: centos:7 + platform: rhel + pid_one_command: /usr/lib/systemd/systemd + intermediate_instructions: + - RUN yum -y install lsof which systemd-sysv initscripts sudo + attributes: + poise-service: + redis: + provider: systemd + - name: centos-6 + named_run_list: centos + driver: + image: centos:6 + platform: rhel + pid_one_command: /sbin/init + intermediate_instructions: + - RUN yum -y install which initscripts sudo + - name: ubuntu-16.04 + named_run_list: debian + driver: + image: ubuntu:16.04 + pid_one_command: /bin/systemd + intermediate_instructions: + - RUN /usr/bin/apt-get update -y + - RUN /usr/bin/apt-get install sudo -y + attributes: + poise-service: + redis: + provider: systemd + - name: ubuntu-14.04 + named_run_list: debian + driver: + image: ubuntu:14.04 + pid_one_command: /sbin/init + intermediate_instructions: + - RUN /usr/bin/apt-get update -y + - RUN /usr/bin/apt-get install sudo -y + - name: ubuntu-12.04 + named_run_list: debian + driver: + image: ubuntu:12.04 + pid_one_command: /sbin/init + intermediate_instructions: + - RUN /usr/bin/apt-get update -y + - RUN /usr/bin/apt-get install sudo -y + - name: debian-8 + named_run_list: debian + driver: + image: debian:8 + pid_one_command: /bin/systemd + intermediate_instructions: + - RUN /usr/bin/apt-get update + - RUN /usr/bin/apt-get install lsb-release sudo -y + attributes: + poise-service: + redis: + provider: systemd + - name: debian-7 + named_run_list: debian + driver: + image: debian:7 + pid_one_command: /sbin/init + intermediate_instructions: + - RUN /usr/bin/apt-get update + - RUN /usr/bin/apt-get install lsb-release sudo -y +suites: + - name: default diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..1951c3b --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,48 @@ +--- +AllCops: + Exclude: + - 'Rakefile' + - 'Vagrantfile' + - 'Policyfile.rb' + - 'Berksfile' + - 'Gemfile' + - 'metadata.rb' + - 'test/**/*' + - 'bin/**' + - 'vendor/**/*' +AlignParameters: + Enabled: false +ClassLength: + Enabled: false +CyclomaticComplexity: + Enabled: false +Documentation: + Enabled: false +Encoding: + Enabled: false +Style/FileName: + Enabled: false +LineLength: + Enabled: false +MethodLength: + Enabled: false +Metrics/AbcSize: + Enabled: false +PerceivedComplexity: + Enabled: false +Style/SpaceBeforeFirstArg: + Enabled: false +Style/ClassAndModuleChildren: + Enabled: false +Style/FileName: + Enabled: false +Style/GuardClause: + Enabled: false +Style/PercentLiteralDelimiters: + Enabled: false +Style/ModuleFunction: + Enabled: false +Style/AlignHash: + Enabled: false +Style/SpaceInsideHashLiteralBraces: + Enabled: false diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0c43066 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,42 @@ +--- +sudo: required +dist: trusty +language: generic +cache: bundler +addons: + apt: + sources: + - chef-current-trusty + packages: + - chefdk +services: docker +env: + matrix: + - INSTANCE=default-centos-7 + - INSTANCE=default-centos-6 + - INSTANCE=default-ubuntu-1604 + - INSTANCE=default-ubuntu-1404 + - INSTANCE=default-ubuntu-1204 +before_script: + # https://github.com/zuazo/kitchen-in-travis-native/issues/1#issuecomment-142230889 + - sudo iptables -L DOCKER || ( echo "DOCKER iptables chain missing" ; sudo iptables -N DOCKER ) + - eval "$(/opt/chefdk/bin/chef shell-init bash)" + - /opt/chefdk/embedded/bin/chef gem install kitchen-dokken + - /opt/chefdk/embedded/bin/chef --version + - /opt/chefdk/embedded/bin/cookstyle --version + - /opt/chefdk/embedded/bin/foodcritic --version +script: KITCHEN_LOCAL_YAML=.kitchen.dokken.yml kitchen verify ${INSTANCE} +after_script: + - docker images + - docker ps -a + - cat .kitchen/logs/kitchen.log +matrix: + include: + - script: /opt/chefdk/embedded/bin/cookstyle + env: COOKSTYLE=1 + - script: /opt/chefdk/embedded/bin/foodcritic . --exclude spec -f any + env: FOODCRITIC=1 + - script: /opt/chefdk/embedded/bin/rspec --color --default-path test/spec + env: CHEFSPEC=1 +notifications: + slack: bloomberg-rnd:BvYmxrV9xj902XWTRNrkLNkR diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..44de656 --- /dev/null +++ b/Gemfile @@ -0,0 +1,23 @@ +source 'https://rubygems.org' + +group :lint do + gem 'cookstyle' + gem 'foodcritic' +end + +group :unit, :integration do + gem 'chefspec' + gem 'berkshelf' + gem 'test-kitchen' + gem 'serverspec' +end + +group :development do + gem 'awesome_print' + gem 'rake' + gem 'stove' +end + +group :doc do + gem 'yard' +end diff --git a/Policyfile.rb b/Policyfile.rb new file mode 100644 index 0000000..2b84281 --- /dev/null +++ b/Policyfile.rb @@ -0,0 +1,8 @@ +name 'default' +default_source :community +default_source :chef_repo, '..' +cookbook 'chef-sentry-handler', path: '.' +run_list 'chef-sentry-handler::default' +named_run_list :centos, 'yum::default', 'yum-epel::default', run_list +named_run_list :debian, 'apt::default', run_list +named_run_list :freebsd, 'freebsd::default', run_list diff --git a/Rakefile b/Rakefile new file mode 100755 index 0000000..82154a7 --- /dev/null +++ b/Rakefile @@ -0,0 +1,39 @@ +#!/usr/bin/env rake + +require 'bundler/setup' +require 'rspec/core/rake_task' +require 'rubocop/rake_task' +require 'foodcritic' +require 'kitchen' + +namespace :style do + desc 'Run Ruby style checks' + RuboCop::RakeTask.new(:ruby) + + desc 'Run Chef style checks' + FoodCritic::Rake::LintTask.new(:chef) +end + +desc 'Run all style checks' +task style: ['style:chef', 'style:ruby'] + +desc 'Run ChefSpec unit tests' +RSpec::Core::RakeTask.new(:unit) do |t| + t.pattern = 'test/unit/**{,/*/**}/*_spec.rb' +end + +# Integration tests. Kitchen.ci +desc 'Run Test Kitchen with Vagrant' +task :vagrant do + Kitchen.logger = Kitchen.default_file_logger + Kitchen::Config.new.instances.each do |instance| + instance.test(:always) + end +end + +desc 'Run style & unit tests on Travis' +task travis: %w(style unit) + +# Default +desc 'Run style, unit, and Vagrant-based integration tests' +task default: %w(style unit vagrant) diff --git a/test/integration/default/default_spec.rb b/test/integration/default/default_spec.rb new file mode 100644 index 0000000..ad7d1db --- /dev/null +++ b/test/integration/default/default_spec.rb @@ -0,0 +1,4 @@ +describe file('/var/chef/handlers/sentry.rb') do + it { should exist } + it { should be_file } +end From a2a80040b8739aec4be880dcc1b2316b84e01d81 Mon Sep 17 00:00:00 2001 From: John Bellone Date: Tue, 1 Nov 2016 15:19:33 -0400 Subject: [PATCH 08/10] Add policy revision tagging to release. --- files/default/sentry.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/files/default/sentry.rb b/files/default/sentry.rb index 0d015b3..e39a800 100644 --- a/files/default/sentry.rb +++ b/files/default/sentry.rb @@ -51,6 +51,7 @@ def report end end event.server_name = node.name + event.release = node['policy_revision'] if node['policy_revision'] event.timestamp = run_status.start_time event.time_spent = run_status.elapsed_time event.extra = { run_id: run_status.run_id }.tap do |h| From 281d6a1775c754fe5ca2cd3e84740cae048374b7 Mon Sep 17 00:00:00 2001 From: Kelvin Lu Date: Tue, 17 Jan 2017 15:09:58 -0800 Subject: [PATCH 09/10] Call send_event rather than Object#send --- README.md | 4 ++-- files/default/sentry.rb | 2 +- metadata.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 76a8539..d570c09 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,12 @@ This cookbook has been verified to work on the following platforms: ## Usage -All you need to do is set the `node['sentry']['dsn']` value and add +All you need to do is set the `node['sentry']['options']['dsn']` value and add the default recipe of this cookbook to your run-list. You can do this from a wrapper cookbook recipe: ``` ruby -node.default['sentry']['dsn'] = 'https://xxxx:yyyy@sentry.corporate.com/1' +node.default['sentry']['options']['dsn'] = 'https://xxxx:yyyy@sentry.corporate.com/1' include_recipe 'chef-sentry-handler::default' ``` diff --git a/files/default/sentry.rb b/files/default/sentry.rb index e39a800..7c2e5e9 100644 --- a/files/default/sentry.rb +++ b/files/default/sentry.rb @@ -59,6 +59,6 @@ def report h[:policy_group] = node.policy_group if node.policy_group h[:policy_revision] = node['policy_revision'] if node['policy_revision'] end - Raven.send(event) + Raven.send_event(event) end end diff --git a/metadata.rb b/metadata.rb index 0c0f850..85b4a86 100644 --- a/metadata.rb +++ b/metadata.rb @@ -4,7 +4,7 @@ license 'Apache 2.0' description 'Installs and configures a Chef handler for sending errors to Sentry.' long_description 'Installs and configures a Chef handler for sending errors to Sentry.' -version '2.0.0' +version '2.1.0' chef_version '>= 12.1' depends 'chef_handler', '~> 2.0' From 3aa76bb864b4320fc7fbb1264d6d2ab8eb93cb09 Mon Sep 17 00:00:00 2001 From: jjustice6 Date: Mon, 9 Apr 2018 10:40:16 -0400 Subject: [PATCH 10/10] Update to latest sentry-raven (2.7.2) --- attributes/default.rb | 2 +- metadata.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/attributes/default.rb b/attributes/default.rb index b84bad7..1c22415 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -19,4 +19,4 @@ default['sentry']['options']['ssl_verify'] = true default['sentry']['options']['environment'] = node.chef_environment -default['sentry']['gem_version'] = '2.0.2' +default['sentry']['gem_version'] = '2.7.2' diff --git a/metadata.rb b/metadata.rb index 85b4a86..6e3ea78 100644 --- a/metadata.rb +++ b/metadata.rb @@ -4,7 +4,7 @@ license 'Apache 2.0' description 'Installs and configures a Chef handler for sending errors to Sentry.' long_description 'Installs and configures a Chef handler for sending errors to Sentry.' -version '2.1.0' +version '2.2.0' chef_version '>= 12.1' depends 'chef_handler', '~> 2.0'