cycle_chef_handler 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
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