quixoten-puppetdb-terminus 3.0.2 → 3.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 438998f28102222deb2641b08ff6b354aaa7da63
4
- data.tar.gz: 6bfd640fc4edbc50992fb0d8f3baa0534223e2f1
3
+ metadata.gz: ac6b5726f3765b6180cffb3d740bbc869c6962ac
4
+ data.tar.gz: 6bea52dcfb2b1d02124dd87f033cae351f63ebe4
5
5
  SHA512:
6
- metadata.gz: fc074c80f0e704e27f3e66bd0e6f4c9d25c0359a129611227fed51aa5a2ad7bfacbb5945a0c0fced47df25737456d0960050443e70cd21408d803576d16cfc09
7
- data.tar.gz: 906e0417ce93bce24ded64ccdd6d6878be761ba58805216166ae1a74e06268eda78d411b69ffa828d46f8875230a81a20a6cdd33388ff8372bcfc32598cc0611
6
+ metadata.gz: 8cc1bfbbb55221f0f35409e1c89fa2958936921ef36d8b2358db9c18df3531c2f04d2fd4cea0ed03c45e4e02206bbdc32bec17ab4cb3d30af9df1a5d5052679a
7
+ data.tar.gz: 16f1f3ce051a31dfda521d7d89b3d99e242c497ae55a040e7b46272819302c33d128c6ba84f0797c3349f5cd1d0f2c3f6ff1d384ecda0d40ff41849146951063
@@ -19,7 +19,7 @@ Puppet::Reports.register_report(:puppetdb) do
19
19
  # @return [void]
20
20
  def process
21
21
  profile("report#process", [:puppetdb, :report, :process]) do
22
- submit_command(self.host, report_to_hash, CommandStoreReport, 5)
22
+ submit_command(self.host, report_to_hash, CommandStoreReport, 6)
23
23
  end
24
24
 
25
25
  nil
@@ -37,8 +37,8 @@ Puppet::Reports.register_report(:puppetdb) do
37
37
  raise Puppet::Error, "Environment is nil, unable to submit report. This may be due a bug with Puppet. Ensure you are running the latest revision, see PUP-2508 for more details."
38
38
  end
39
39
 
40
- resource_events = build_events_list
41
- is_noop = resource_events.any? {|rs| rs["status"] == 'noop'} && resource_events.none? {|rs| rs["status"] == 'failed'}
40
+ resources = build_resources_list
41
+ is_noop = resources.any? { |rs| has_noop_event?(rs) } and resources.none? { |rs| has_failed_event?(rs) }
42
42
 
43
43
  {
44
44
  "certname" => host,
@@ -48,31 +48,40 @@ Puppet::Reports.register_report(:puppetdb) do
48
48
  "producer_timestamp" => Puppet::Util::Puppetdb.to_wire_time(Time.now),
49
49
  "start_time" => Puppet::Util::Puppetdb.to_wire_time(time),
50
50
  "end_time" => Puppet::Util::Puppetdb.to_wire_time(time + run_duration),
51
- "resource_events" => resource_events,
52
51
  "environment" => environment,
53
52
  "transaction_uuid" => transaction_uuid,
54
53
  "status" => status,
55
54
  "noop" => is_noop,
56
55
  "logs" => build_logs_list,
57
56
  "metrics" => build_metrics_list,
57
+ "resources" => resources,
58
58
  }
59
59
  end
60
60
  end
61
61
 
62
+ # @return TrueClass
63
+ # @api private
64
+ def has_noop_event?(resource)
65
+ resource["events"].any? { |event| event["status"] == 'noop' }
66
+ end
67
+
68
+ # @return TrueClass
69
+ # @api private
70
+ def has_failed_event?(resource)
71
+ resource["events"].any? { |event| event["status"] == 'failed' }
72
+ end
73
+
62
74
  # @return Array[Hash]
63
75
  # @api private
64
- def build_events_list
65
- profile("Build events list (count: #{resource_statuses.count})",
66
- [:puppetdb, :events_list, :build]) do
67
- filter_events(resource_statuses.inject([]) do |events, status_entry|
68
- _, status = *status_entry
69
- if ! (status.events.empty?)
70
- events.concat(status.events.map { |event| event_to_hash(status, event) })
71
- elsif status.skipped
72
- events.concat([fabricate_event(status, "skipped")])
73
- end
74
- events
75
- end)
76
+ def build_resources_list
77
+ profile("Build resources list (count: #{resource_statuses.count})",
78
+ [:puppetdb, :resources_list, :build]) do
79
+ resources = resource_statuses.values.map { |resource| resource_status_to_hash(resource) }
80
+ if ! config.include_unchanged_resources?
81
+ resources.select{ |resource| (! resource["events"].empty?) or resource["skipped"] }
82
+ else
83
+ resources
84
+ end
76
85
  end
77
86
  end
78
87
 
@@ -134,57 +143,42 @@ Puppet::Reports.register_report(:puppetdb) do
134
143
  #
135
144
  # @return Hash[<String, Object>]
136
145
  # @api private
137
- def event_to_hash(resource_status, event)
146
+ def event_to_hash(event)
138
147
  {
139
148
  "status" => event.status,
140
149
  "timestamp" => Puppet::Util::Puppetdb.to_wire_time(event.time),
141
- "resource_type" => resource_status.resource_type,
142
- "resource_title" => resource_status.title.to_s,
143
150
  "property" => event.property,
144
151
  "new_value" => event.desired_value,
145
152
  "old_value" => event.previous_value,
146
153
  "message" => event.message,
147
- "file" => resource_status.file,
148
- "line" => resource_status.line,
149
- "containment_path" => resource_status.containment_path,
150
154
  }
151
155
  end
152
156
 
153
- # Given an instance of `Puppet::Resource::Status` and a status
154
- # string, this method fabricates a PuppetDB event object with the
155
- # provided `"status"`.
157
+ def build_events_list(events)
158
+ profile("Build events list (count: #{events.count})",
159
+ [:puppetdb, :events_list, :build]) do
160
+ events.map { |event| event_to_hash(event) }
161
+ end
162
+ end
163
+
164
+ # Convert an instance of `Puppet::Resource::Status` to a hash
165
+ # suitable for sending over the wire to PuppetDB
156
166
  #
167
+ # @return Hash[<String, Object>]
157
168
  # @api private
158
- def fabricate_event(resource_status, event_status)
169
+ def resource_status_to_hash(resource_status)
159
170
  {
160
- "status" => event_status,
161
- "timestamp" => Puppet::Util::Puppetdb.to_wire_time(resource_status.time),
162
- "resource_type" => resource_status.resource_type,
163
- "resource_title" => resource_status.title.to_s,
164
- "property" => nil,
165
- "new_value" => nil,
166
- "old_value" => nil,
167
- "message" => nil,
168
- "file" => resource_status.file,
169
- "line" => resource_status.line,
171
+ "skipped" => resource_status.skipped,
172
+ "timestamp" => Puppet::Util::Puppetdb.to_wire_time(resource_status.time),
173
+ "resource_type" => resource_status.resource_type,
174
+ "resource_title" => resource_status.title.to_s,
175
+ "file" => resource_status.file,
176
+ "line" => resource_status.line,
170
177
  "containment_path" => resource_status.containment_path,
178
+ "events" => build_events_list(resource_status.events),
171
179
  }
172
180
  end
173
181
 
174
- # Filter out blacklisted events, if we're configured to do so
175
- #
176
- # @api private
177
- def filter_events(events)
178
- if config.ignore_blacklisted_events?
179
- profile("Filter blacklisted events",
180
- [:puppetdb, :events, :filter_blacklisted]) do
181
- events.select { |e| ! config.is_event_blacklisted?(e) }
182
- end
183
- else
184
- events
185
- end
186
- end
187
-
188
182
  # Helper method for accessing the puppetdb configuration
189
183
  #
190
184
  # @api private
@@ -1,5 +1,4 @@
1
1
  require 'puppet/util/puppetdb/command_names'
2
- require 'puppet/util/puppetdb/blacklist'
3
2
  require 'uri'
4
3
 
5
4
  module Puppet::Util::Puppetdb
@@ -13,8 +12,8 @@ module Puppet::Util::Puppetdb
13
12
  :server => "puppetdb",
14
13
  :port => 8081,
15
14
  :soft_write_failure => false,
16
- :ignore_blacklisted_events => true,
17
- :server_url_timeout => 30
15
+ :server_url_timeout => 30,
16
+ :include_unchanged_resources => false,
18
17
  }
19
18
 
20
19
  config_file ||= File.join(Puppet[:confdir], "puppetdb.conf")
@@ -57,6 +56,7 @@ module Puppet::Util::Puppetdb
57
56
  !([:server,
58
57
  :port,
59
58
  :ignore_blacklisted_events,
59
+ :include_unchanged_resources,
60
60
  :soft_write_failure,
61
61
  :server_urls,
62
62
  :server_url_timeout].include?(k))
@@ -70,9 +70,9 @@ module Puppet::Util::Puppetdb
70
70
  config_hash[:server_urls] = ["https://#{config_hash[:server].strip}:#{config_hash[:port].to_s}"]
71
71
  end
72
72
  config_hash[:server_urls] = convert_and_validate_urls(config_hash[:server_urls])
73
-
73
+
74
74
  config_hash[:server_url_timeout] = config_hash[:server_url_timeout].to_i
75
- config_hash[:ignore_blacklisted_events] = Puppet::Util::Puppetdb.to_bool(config_hash[:ignore_blacklisted_events])
75
+ config_hash[:include_unchanged_resources] = Puppet::Util::Puppetdb.to_bool(config_hash[:include_unchanged_resources])
76
76
  config_hash[:soft_write_failure] = Puppet::Util::Puppetdb.to_bool(config_hash[:soft_write_failure])
77
77
 
78
78
  self.new(config_hash, uses_server_urls)
@@ -86,7 +86,6 @@ module Puppet::Util::Puppetdb
86
86
 
87
87
  def initialize(config_hash = {}, uses_server_urls=nil)
88
88
  @config = config_hash
89
- initialize_blacklisted_events()
90
89
  if !uses_server_urls
91
90
  Puppet.warning("Specification of server and port in puppetdb.conf is deprecated. Use the setting server_urls.")
92
91
  end
@@ -110,12 +109,8 @@ module Puppet::Util::Puppetdb
110
109
  config[:server_url_timeout]
111
110
  end
112
111
 
113
- def ignore_blacklisted_events?
114
- config[:ignore_blacklisted_events]
115
- end
116
-
117
- def is_event_blacklisted?(event)
118
- @blacklist.is_event_blacklisted? event
112
+ def include_unchanged_resources?
113
+ config[:include_unchanged_resources]
119
114
  end
120
115
 
121
116
  def soft_write_failure
@@ -128,13 +123,7 @@ module Puppet::Util::Puppetdb
128
123
  # @api private
129
124
  attr_reader :config
130
125
 
131
- Blacklist = Puppet::Util::Puppetdb::Blacklist
132
-
133
126
  # @api private
134
- def initialize_blacklisted_events(events = Blacklist::BlacklistedEvents)
135
- @blacklist = Blacklist.new(events)
136
- end
137
-
138
127
  def self.convert_and_validate_urls(uri_strings)
139
128
  uri_strings.map do |uri_string|
140
129
 
@@ -152,7 +141,6 @@ module Puppet::Util::Puppetdb
152
141
  raise "PuppetDB 'server_urls' cannot contain URL paths, found '#{uri_string}'"
153
142
  end
154
143
  uri.path = ''
155
-
156
144
  uri
157
145
  end
158
146
  end
@@ -1,6 +1,6 @@
1
1
  module PuppetDB
2
2
  module Terminus
3
- VERSION = "3.0.2"
3
+ VERSION = "3.1.0"
4
4
  UPSTREAM_VERSION = VERSION.split(".")[0..2].join(".")
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quixoten-puppetdb-terminus
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Devin Christensen
@@ -61,7 +61,6 @@ files:
61
61
  - lib/puppet/indirector/resource/puppetdb.rb
62
62
  - lib/puppet/reports/puppetdb.rb
63
63
  - lib/puppet/util/puppetdb.rb
64
- - lib/puppet/util/puppetdb/blacklist.rb
65
64
  - lib/puppet/util/puppetdb/char_encoding.rb
66
65
  - lib/puppet/util/puppetdb/command.rb
67
66
  - lib/puppet/util/puppetdb/command_names.rb
@@ -1,35 +0,0 @@
1
- module Puppet::Util::Puppetdb
2
- class Blacklist
3
-
4
- BlacklistedEvent = Struct.new(:resource_type, :resource_title, :status, :property)
5
-
6
- # Initialize our blacklist of events to filter out of reports. This is needed
7
- # because older versions of puppet always generate a swath of (meaningless)
8
- # 'skipped' Schedule events on every agent run. As of puppet 3.3, these
9
- # events should no longer be generated, but this is here for backward compat.
10
- BlacklistedEvents =
11
- [BlacklistedEvent.new("Schedule", "never", "skipped", nil),
12
- BlacklistedEvent.new("Schedule", "puppet", "skipped", nil),
13
- BlacklistedEvent.new("Schedule", "hourly", "skipped", nil),
14
- BlacklistedEvent.new("Schedule", "daily", "skipped", nil),
15
- BlacklistedEvent.new("Schedule", "weekly", "skipped", nil),
16
- BlacklistedEvent.new("Schedule", "monthly", "skipped", nil)]
17
-
18
- def initialize(events)
19
- @events = events.inject({}) do |m, e|
20
- m[e.resource_type] ||= {}
21
- m[e.resource_type][e.resource_title] ||= {}
22
- m[e.resource_type][e.resource_title][e.status] ||= {}
23
- m[e.resource_type][e.resource_title][e.status][e.property] = true
24
- m
25
- end
26
- end
27
-
28
- def is_event_blacklisted?(event)
29
- @events.fetch(event["resource_type"], {}).
30
- fetch(event["resource_title"], {}).
31
- fetch(event["status"], {}).
32
- fetch(event["property"], false)
33
- end
34
- end
35
- end