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.
- data/.gemtest +0 -0
- data/lib/cycle_chef_handler.rb +48 -38
- metadata +100 -89
data/.gemtest
ADDED
File without changes
|
data/lib/cycle_chef_handler.rb
CHANGED
@@ -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.
|
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
|
-
|
68
|
+
for attempt in 1..@amqp_config[:max_retries] do
|
69
|
+
begin
|
65
70
|
|
66
|
-
|
71
|
+
b = Bunny.new(@amqp_config)
|
67
72
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
-
|
87
|
+
if not @amqp_config[:routing_key].nil?
|
83
88
|
|
84
|
-
|
89
|
+
q.bind(@amqp_config[:exchange], :key => @amqp_config[:routing_key])
|
85
90
|
|
86
|
-
|
91
|
+
else
|
87
92
|
|
88
|
-
|
93
|
+
q.bind(@amqp_config[:exchange])
|
89
94
|
|
90
|
-
|
95
|
+
end
|
91
96
|
|
92
|
-
|
97
|
+
end
|
93
98
|
|
94
|
-
|
99
|
+
if not @amqp_config[:routing_key].nil?
|
95
100
|
|
96
|
-
|
101
|
+
e.publish(payload, :key => @amqp_config[:routing_key])
|
97
102
|
|
98
|
-
|
103
|
+
else
|
104
|
+
|
105
|
+
e.publish(payload)
|
99
106
|
|
100
|
-
|
101
|
-
|
102
|
-
end
|
107
|
+
end
|
103
108
|
|
104
|
-
|
109
|
+
Chef::Log.info("Posted converge history report")
|
110
|
+
return
|
105
111
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
-
|
123
|
+
ensure
|
112
124
|
|
113
|
-
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
25
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
41
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
78
|
-
|
79
|
-
|
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
|
-
|
82
|
-
|
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
|
-
|
116
|
-
|
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
|
-
|
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.
|
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
|
135
|
-
|
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
|