cycle_chef_handler 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/.gemtest +0 -0
  2. data/lib/cycle_chef_handler.rb +48 -38
  3. metadata +100 -89
data/.gemtest ADDED
File without changes
@@ -3,6 +3,7 @@
3
3
  # Report handler for chef clients to be used with CycleServer Chef Dashboard
4
4
  #
5
5
  # Author: Chris Chalfant (chris.chalfant@cyclecomputing.com)
6
+ # Author: Dan Harris (dharris@cyclecomputing.com)
6
7
  #
7
8
  # Copyright 2010 Cycle Computing LLC
8
9
  #
@@ -26,7 +27,7 @@ require 'fileutils'
26
27
  require 'uri'
27
28
 
28
29
  class CycleChefHandler < Chef::Handler
29
- VERSION = '1.2.1'
30
+ VERSION = '1.2.2'
30
31
 
31
32
  def initialize(params)
32
33
  defaults = {:exchange => 'chef',
@@ -37,7 +38,9 @@ class CycleChefHandler < Chef::Handler
37
38
  :queue => nil,
38
39
  :queue_durable => false,
39
40
  :queue_autodelete => true,
40
- :routing_key => 'chef'}
41
+ :routing_key => 'chef',
42
+ :max_retries => 5,
43
+ :retry_delay => 5}
41
44
 
42
45
  @amqp_config = defaults.merge(params[:amqp_config])
43
46
  check_amqp_config
@@ -55,67 +58,74 @@ class CycleChefHandler < Chef::Handler
55
58
  end
56
59
  end
57
60
 
61
+
58
62
  def report
59
63
 
60
64
  ## Create and Post a classad
61
65
  ad = create_ad
62
66
  payload = "<classads>" + ad.to_xml + "</classads>"
63
67
 
64
- begin
68
+ for attempt in 1..@amqp_config[:max_retries] do
69
+ begin
65
70
 
66
- b = Bunny.new(@amqp_config)
71
+ b = Bunny.new(@amqp_config)
67
72
 
68
- b.start
69
- e = b.exchange(@amqp_config[:exchange],
70
- :type => @amqp_config[:exchange_type],
71
- :durable => @amqp_config[:exchange_durable],
72
- :auto_delete => @amqp_config[:exchange_autodelete])
73
+ b.start
74
+ e = b.exchange(@amqp_config[:exchange],
75
+ :type => @amqp_config[:exchange_type],
76
+ :durable => @amqp_config[:exchange_durable],
77
+ :auto_delete => @amqp_config[:exchange_autodelete])
73
78
 
74
- # in some cases, the user may want to declare and bind a queue
75
- # to the exchange so consumers get all messages, even ones that
76
- # enter the exchange before the consumer exists.
77
- if @amqp_config[:bind_queue]
78
- q = b.queue(@amqp_config[:queue],
79
- :durable => @amqp_config[:queue_durable],
80
- :auto_delete => @amqp_config[:queue_autodelete])
79
+ # in some cases, the user may want to declare and bind a queue
80
+ # to the exchange so consumers get all messages, even ones that
81
+ # enter the exchange before the consumer exists.
82
+ if @amqp_config[:bind_queue]
83
+ q = b.queue(@amqp_config[:queue],
84
+ :durable => @amqp_config[:queue_durable],
85
+ :auto_delete => @amqp_config[:queue_autodelete])
81
86
 
82
- if not @amqp_config[:routing_key].nil?
87
+ if not @amqp_config[:routing_key].nil?
83
88
 
84
- q.bind(@amqp_config[:exchange], :key => @amqp_config[:routing_key])
89
+ q.bind(@amqp_config[:exchange], :key => @amqp_config[:routing_key])
85
90
 
86
- else
91
+ else
87
92
 
88
- q.bind(@amqp_config[:exchange])
93
+ q.bind(@amqp_config[:exchange])
89
94
 
90
- end
95
+ end
91
96
 
92
- end
97
+ end
93
98
 
94
- if not @amqp_config[:routing_key].nil?
99
+ if not @amqp_config[:routing_key].nil?
95
100
 
96
- e.publish(payload, :key => @amqp_config[:routing_key])
101
+ e.publish(payload, :key => @amqp_config[:routing_key])
97
102
 
98
- else
103
+ else
104
+
105
+ e.publish(payload)
99
106
 
100
- e.publish(payload)
101
-
102
- end
107
+ end
103
108
 
104
- rescue Exception => e
109
+ Chef::Log.info("Posted converge history report")
110
+ return
105
111
 
106
- # log any exceptions, but don't throw one.
107
- trace = e.backtrace.join("\n")
108
- Chef::Log.error("Failed to post converge history report: #{e.message} #{trace}")
109
- return
112
+ rescue Exception => e
113
+ if attempt < @amqp_config[:max_retries]
114
+ delay = attempt * @amqp_config[:retry_delay]
115
+ Chef::Log.error("Failed to post converge history report, retrying in #{delay} seconds...")
116
+ sleep(delay) # Sleep for a while if it's a transient communcation error then try again
117
+ else
118
+ trace = e.backtrace.join("\n")
119
+ Chef::Log.error("Failed to post converge history report: #{e.message} #{trace}")
120
+ return
121
+ end
110
122
 
111
- ensure
123
+ ensure
112
124
 
113
- b.stop
125
+ b.stop
114
126
 
127
+ end
115
128
  end
116
-
117
- Chef::Log.info("Posted converge history report")
118
-
119
129
  end
120
130
 
121
131
  def create_ad
metadata CHANGED
@@ -1,95 +1,112 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cycle_chef_handler
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.2
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 1
10
- version: 1.2.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Chris Chalfant
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-15 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-01-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: chef
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: bunny
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
38
25
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bunny
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: classad
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
52
41
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: classad
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
60
54
  type: :runtime
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: hoe
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '3.10'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '3.10'
78
+ - !ruby/object:Gem::Dependency
79
+ name: hoe
80
+ requirement: !ruby/object:Gem::Requirement
66
81
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 19
71
- segments:
72
- - 2
73
- - 6
74
- - 2
75
- version: 2.6.2
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '3.5'
76
86
  type: :development
77
- version_requirements: *id004
78
- description: |-
79
- This extension of Chef::Handler creates reports in Condor class ad format and posts
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '3.5'
94
+ description: ! 'This extension of Chef::Handler creates reports in Condor class ad
95
+ format and posts
96
+
80
97
  them to an amqp-complient message broker. This report handler was created to produce
81
- reports for the CycleServer Chef Dashboard available from Cycle Computing LLC.
82
- email:
98
+
99
+ reports for the CycleServer Chef Dashboard available from Cycle Computing LLC.'
100
+ email:
83
101
  - chris.chalfant@cyclecomputing.com
84
- executables:
102
+ executables:
85
103
  - cycle_chef_handler
86
104
  extensions: []
87
-
88
- extra_rdoc_files:
105
+ extra_rdoc_files:
89
106
  - History.txt
90
107
  - Manifest.txt
91
108
  - README.txt
92
- files:
109
+ files:
93
110
  - .autotest
94
111
  - History.txt
95
112
  - Manifest.txt
@@ -98,39 +115,33 @@ files:
98
115
  - bin/cycle_chef_handler
99
116
  - lib/cycle_chef_handler.rb
100
117
  - test/test_cycle_chef_handler.rb
118
+ - .gemtest
101
119
  homepage: http://github.com/cyclecomputing/cycle_chef_handler
102
120
  licenses: []
103
-
104
121
  post_install_message:
105
- rdoc_options:
122
+ rdoc_options:
106
123
  - --main
107
124
  - README.txt
108
- require_paths:
125
+ require_paths:
109
126
  - lib
110
- required_ruby_version: !ruby/object:Gem::Requirement
127
+ required_ruby_version: !ruby/object:Gem::Requirement
111
128
  none: false
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 0
118
- version: "0"
119
- required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
134
  none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 3
125
- segments:
126
- - 0
127
- version: "0"
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
128
139
  requirements: []
129
-
130
140
  rubyforge_project: cycle_chef_handler
131
- rubygems_version: 1.8.7
141
+ rubygems_version: 1.8.24
132
142
  signing_key:
133
143
  specification_version: 3
134
- summary: This extension of Chef::Handler creates reports in Condor class ad format and posts them to an amqp-complient message broker
135
- test_files:
144
+ summary: This extension of Chef::Handler creates reports in Condor class ad format
145
+ and posts them to an amqp-complient message broker
146
+ test_files:
136
147
  - test/test_cycle_chef_handler.rb