puppet-herald 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +5 -0
  5. data/README.md +73 -0
  6. data/Rakefile +6 -0
  7. data/bin/puppet-herald +13 -0
  8. data/config.ru +2 -0
  9. data/db/migrate/20141211165540_create_nodes.rb +10 -0
  10. data/db/migrate/20141211171305_create_reports.rb +16 -0
  11. data/db/migrate/20141211171326_create_log_entries.rb +13 -0
  12. data/db/schema.rb +47 -0
  13. data/db/seeds.rb +0 -0
  14. data/lib/puppet-herald.rb +37 -0
  15. data/lib/puppet-herald/app.rb +112 -0
  16. data/lib/puppet-herald/cli.rb +53 -0
  17. data/lib/puppet-herald/database.rb +50 -0
  18. data/lib/puppet-herald/javascript.rb +34 -0
  19. data/lib/puppet-herald/models/log-entry.rb +3 -0
  20. data/lib/puppet-herald/models/node.rb +7 -0
  21. data/lib/puppet-herald/models/report.rb +78 -0
  22. data/lib/puppet-herald/public/.bowerrc +3 -0
  23. data/lib/puppet-herald/public/app.js +27 -0
  24. data/lib/puppet-herald/public/bower.json +15 -0
  25. data/lib/puppet-herald/public/components/artifact/artifact-directive.js +12 -0
  26. data/lib/puppet-herald/public/components/artifact/artifact-directive_test.js +17 -0
  27. data/lib/puppet-herald/public/components/artifact/artifact.js +31 -0
  28. data/lib/puppet-herald/public/components/directives/directives.js +5 -0
  29. data/lib/puppet-herald/public/components/directives/status-button.html +7 -0
  30. data/lib/puppet-herald/public/components/directives/status-button.js +54 -0
  31. data/lib/puppet-herald/public/components/filters/filters.js +12 -0
  32. data/lib/puppet-herald/public/css/herald.css +38 -0
  33. data/lib/puppet-herald/public/img/shield97.svg +17 -0
  34. data/lib/puppet-herald/public/node/node.html +30 -0
  35. data/lib/puppet-herald/public/node/node.js +24 -0
  36. data/lib/puppet-herald/public/nodes/nodes.html +29 -0
  37. data/lib/puppet-herald/public/nodes/nodes.js +24 -0
  38. data/lib/puppet-herald/public/report/report.html +24 -0
  39. data/lib/puppet-herald/public/report/report.js +24 -0
  40. data/lib/puppet-herald/stubs/puppet.rb +29 -0
  41. data/lib/puppet-herald/version.rb +20 -0
  42. data/lib/puppet-herald/views/app.erb +42 -0
  43. data/lib/puppet-herald/views/err500.erb +31 -0
  44. data/puppet-herald.gemspec +62 -0
  45. data/spec/model_helper.rb +2 -0
  46. data/spec/spec_helper.rb +37 -0
  47. data/spec/support/active_record.rb +17 -0
  48. data/spec/unit/fixtures/changed-notify.yaml +278 -0
  49. data/spec/unit/models/report_spec.rb +38 -0
  50. metadata +331 -0
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ angular.module('herald.node', [
4
+ 'ngRoute',
5
+ 'herald.directives'
6
+ ])
7
+
8
+ .config(['$routeProvider', function($routeProvider) {
9
+ $routeProvider.when('/node/:nodeId', {
10
+ templateUrl: 'node/node.html',
11
+ controller: 'NodeController'
12
+ });
13
+ }])
14
+
15
+ .controller('NodeController', ['$http', '$routeParams', function($http, $routeParams) {
16
+ var ctrl = this;
17
+ ctrl.node = null;
18
+
19
+ this.nodeId = $routeParams.nodeId;
20
+
21
+ $http.get('/api/v1/node/' + this.nodeId).success(function(data) {
22
+ ctrl.node = data;
23
+ });
24
+ }]);
@@ -0,0 +1,29 @@
1
+ <div class="panel panel-primary" ng-controller="NodesController as nodes">
2
+ <!-- Default panel contents -->
3
+ <div class="panel-heading">Nodes <span class="badge">{{ nodes.all.length }}</span></div>
4
+
5
+ <!-- Table -->
6
+ <table class="table table-striped table-hover">
7
+ <thead>
8
+ <tr>
9
+ <th>#</th>
10
+ <th>Node</th>
11
+ <th>Status</th>
12
+ <th># of reports</th>
13
+ <th>Last run</th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <tr ng-repeat="node in nodes.all | orderBy:'last_run'">
18
+ <td>{{ $index + 1 }}</td>
19
+ <td>{{ node.name }}</td>
20
+ <td><ng-status-button
21
+ status="node.status"
22
+ id="node.id"
23
+ route="'/node/:id'"></ng-status-button></td>
24
+ <td>{{ node.no_of_reports }}</td>
25
+ <td am-time-ago="node.last_run"></td>
26
+ </tr>
27
+ </tbody>
28
+ </table>
29
+ </div>
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ angular.module('herald.nodes', [
4
+ 'ngRoute',
5
+ 'herald.directives',
6
+ 'angularMoment'
7
+ ])
8
+
9
+ .config(['$routeProvider', function($routeProvider) {
10
+ $routeProvider.when('/nodes', {
11
+ templateUrl: 'nodes/nodes.html',
12
+ controller: 'NodesController'
13
+ });
14
+ }])
15
+
16
+ .controller('NodesController', ['$http', 'appService', function($http, appService) {
17
+ appService.page = 'nodes';
18
+ var ctrl = this;
19
+ ctrl.all = [];
20
+
21
+ $http.get('/api/v1/nodes').success(function(data) {
22
+ ctrl.all = data;
23
+ });
24
+ }]);
@@ -0,0 +1,24 @@
1
+ <div class="panel panel-primary" ng-controller="ReportController as ctrl">
2
+ <!-- Default panel contents -->
3
+ <div class="panel-heading">Report for {{ ctrl.report.host }} <span class="badge">{{ ctrl.report.log_entries.length }}</span></div>
4
+
5
+ <!-- Table -->
6
+ <table class="table table-condensed table-hover herald-table-report">
7
+ <thead>
8
+ <tr>
9
+ <th>#</th>
10
+ <th>Line</th>
11
+ </tr>
12
+ </thead>
13
+ <tbody>
14
+ <tr>
15
+ <td></td>
16
+ <td># puppet {{ ctrl.report.kind }} [...]</td>
17
+ </tr>
18
+ <tr ng-repeat="entry in ctrl.report.log_entries | orderBy:'time'">
19
+ <td>{{ $index + 1 }}</td>
20
+ <td class="herald-log-{{ entry.level }}">{{ entry.level | capitalize }}: {{ entry.source }}: {{ entry.message }}</td>
21
+ </tr>
22
+ </tbody>
23
+ </table>
24
+ </div>
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ angular.module('herald.report', [
4
+ 'ngRoute',
5
+ 'herald.directives'
6
+ ])
7
+
8
+ .config(['$routeProvider', function($routeProvider) {
9
+ $routeProvider.when('/report/:reportId', {
10
+ templateUrl: 'report/report.html',
11
+ controller: 'ReportController'
12
+ });
13
+ }])
14
+
15
+ .controller('ReportController', ['$http', '$routeParams', function($http, $routeParams) {
16
+ var ctrl = this;
17
+ ctrl.report = null;
18
+
19
+ this.reportId = $routeParams.reportId;
20
+
21
+ $http.get('/api/v1/report/' + this.reportId).success(function(data) {
22
+ ctrl.report = data;
23
+ });
24
+ }]);
@@ -0,0 +1,29 @@
1
+ module Puppet
2
+ module Transaction
3
+
4
+ class Report
5
+ attr_accessor :host, :time, :kind, :puppet_version, :configuration_version, :transaction_uuid, :environment, :status, :logs
6
+ end
7
+
8
+ class Event
9
+
10
+ end
11
+
12
+ end
13
+ class Resource
14
+ class Status
15
+
16
+ end
17
+ end
18
+ module Util
19
+
20
+ class Log
21
+ attr_accessor :level, :message, :source, :time, :line, :tags
22
+ end
23
+
24
+ class Metric
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ module PuppetHerald
2
+
3
+ def self.version_prep desired
4
+ version = desired
5
+ if desired.match(/[^0-9\.]+/)
6
+ git = `git describe --tags --dirty --always`
7
+ version += "-" + git[1..-1]
8
+ end
9
+ return version.strip
10
+ end
11
+
12
+ VERSION = version_prep '0.1.0'
13
+ LICENSE = 'Apache 2.0'
14
+ NAME = 'Puppet Herald'
15
+ PACKAGE = 'puppet-herald'
16
+ SUMMARY = 'a Puppet report processor'
17
+ DESCRIPTION = "Provides a gateway for consuming puppet reports, a REST API and a simple Web app to display reports."
18
+ HOMEPAGE = 'https://github.com/wavesoftware/gem-puppet-herald'
19
+
20
+ end
@@ -0,0 +1,42 @@
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7]> <html lang="en" ng-app="herald" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
3
+ <!--[if IE 7]> <html lang="en" ng-app="herald" class="no-js lt-ie9 lt-ie8"> <![endif]-->
4
+ <!--[if IE 8]> <html lang="en" ng-app="herald" class="no-js lt-ie9"> <![endif]-->
5
+ <!--[if gt IE 8]><!--> <html lang="en" ng-app="herald" class="no-js"> <!--<![endif]-->
6
+ <head ng-controller="AppController as app">
7
+ <meta charset="utf-8">
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
9
+ <title>Herald - a Puppet report processor</title>
10
+
11
+ <meta name="description" content="Herald - a Puppet report processor">
12
+ <meta name="viewport" content="width=device-width, initial-scale=1">
13
+ <!-- Latest compiled and minified CSS -->
14
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap<%= @minified %>.css">
15
+ <!-- Optional theme -->
16
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme<%= @minified %>.css">
17
+ <link rel="stylesheet" href="css/herald.css">
18
+ </head>
19
+ <body>
20
+
21
+ <section class="container-fluid">
22
+
23
+ <h2><img src="/img/shield97.svg" />Herald <small>a Puppet report processor</small></h2>
24
+
25
+ <div ng-view></div>
26
+
27
+ <address>
28
+ <hr />
29
+ <p class="text-muted"><small>Herald v<span app-version></span></small></p>
30
+ </address>
31
+ </section>
32
+
33
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular<%= @minified %>.js"></script>
34
+ <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-route<%= @minified %>.js"></script>
35
+ <script src="//cdn.jsdelivr.net/momentjs/2.5.1/moment.min.js"></script>
36
+ <script src="//cdn.jsdelivr.net/angular.moment/0.6.2/angular-moment.js"></script>
37
+
38
+ <!-- Automatic incudes of project files -->
39
+ <% @files.each do |file| %>
40
+ <script src="<%= file %>"></script><% end %>
41
+ </body>
42
+ </html>
@@ -0,0 +1,31 @@
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
3
+ <!--[if IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8"> <![endif]-->
4
+ <!--[if IE 8]> <html lang="en" class="no-js lt-ie9"> <![endif]-->
5
+ <!--[if gt IE 8]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
9
+ <title>Error 500 | Herald - a Puppet report processor</title>
10
+ <meta name="description" content="Herald - a Puppet report processor">
11
+ <meta name="viewport" content="width=device-width, initial-scale=1">
12
+ <!-- Latest compiled and minified CSS -->
13
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
14
+ <!-- Optional theme -->
15
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css">
16
+ </head>
17
+ <body>
18
+
19
+ <section class="container-fluid">
20
+ <h2><img src="/img/shield97.svg" />Herald <small>a Puppet report processor</small></h2>
21
+
22
+ <div class="jumbotron">
23
+ <h2 class="text-danger glyphicon glyphicon-fire">Internal Server Error (500)</h2>
24
+ <p>Something realy unpredictable just happend...</p>
25
+ <div class="well well-lg"><samp><%= @bug[:message] %></samp></div>
26
+ <p><small><strong>Pro Tip!</strong> Please report this bug by passing contents of bug file: <code><%= @bug[:bugfile] %></code></small></p>
27
+ <p><a class="btn btn-danger btn-lg" href="<%= @bug[:homepage] %>" role="button">Report a bug</a></p>
28
+ </div>
29
+ </section>
30
+ </body>
31
+ </html>
@@ -0,0 +1,62 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path('../lib/puppet-herald/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = PuppetHerald::PACKAGE
7
+ gem.version = PuppetHerald::VERSION
8
+ gem.author = 'Krzysztof Suszynski'
9
+ gem.email = 'krzysztof.suszynski@wavesoftware.pl'
10
+ gem.license = PuppetHerald::LICENSE
11
+ gem.homepage = PuppetHerald::HOMEPAGE
12
+ gem.summary = PuppetHerald::SUMMARY
13
+ gem.description = PuppetHerald::DESCRIPTION
14
+
15
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ gem.files = `git ls-files`.split("\n")
17
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ gem.require_paths = ["lib"]
19
+
20
+ # Dependencies
21
+ gem.required_ruby_version = '>= 1.9.2'
22
+
23
+ prydebugger = if RUBY_VERSION >= "2.0.0" then 'pry-byebug' else 'pry-debugger' end
24
+ dependencies = {
25
+ :runtime => [
26
+ 'rake',
27
+ 'sinatra',
28
+ 'sinatra-contrib',
29
+ 'sinatra-activerecord',
30
+ 'micro-optparse',
31
+ 'uglifier',
32
+ 'sqlite3',
33
+ 'pg',
34
+ 'puma'
35
+ ],
36
+ :test => [
37
+ 'rspec',
38
+ 'rspec-its',
39
+ 'coveralls',
40
+ 'simplecov'
41
+ ],
42
+ :developmant => [
43
+ 'inch',
44
+ 'travis',
45
+ 'travis-lint',
46
+ prydebugger
47
+ ]
48
+ }
49
+
50
+ dependencies[:runtime].each do |spec|
51
+ gem.add_runtime_dependency spec
52
+ end
53
+ dependencies[:test].each do |spec|
54
+ gem.add_development_dependency spec
55
+ end
56
+ dependencies[:developmant].each do |spec|
57
+ gem.add_development_dependency spec
58
+ end
59
+
60
+ end
61
+
62
+ # vim:ft=ruby
@@ -0,0 +1,2 @@
1
+ require 'support/active_record'
2
+ require 'spec_helper'
@@ -0,0 +1,37 @@
1
+ require 'rspec/its'
2
+
3
+ begin
4
+ gem 'simplecov'
5
+ require 'simplecov'
6
+ SimpleCov.start do
7
+ add_filter "/spec/"
8
+ add_filter "/.vendor/"
9
+ add_filter "/vendor/"
10
+ add_filter "/gems/"
11
+ end
12
+ rescue Gem::LoadError
13
+ # do nothing
14
+ end
15
+
16
+ begin
17
+ gem 'coveralls'
18
+ require 'coveralls'
19
+ if ENV['TRAVIS']
20
+ Coveralls.wear!
21
+ end
22
+ rescue Gem::LoadError
23
+ # do nothing
24
+ end
25
+
26
+ begin
27
+ gem 'pry'
28
+ require 'pry'
29
+ rescue Gem::LoadError
30
+ # do nothing
31
+ end
32
+
33
+ RSpec.configure do |c|
34
+ c.expect_with :rspec do |mock|
35
+ mock.syntax = [:expect, :should]
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ require 'active_record'
2
+ require 'stringio' # silence the output
3
+ $stdout = StringIO.new # from migrator
4
+
5
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
6
+ ActiveRecord::Migrator.up "db/migrate"
7
+
8
+ $stdout = STDOUT
9
+
10
+ RSpec.configure do |config|
11
+ config.around do |example|
12
+ ActiveRecord::Base.transaction do
13
+ example.run
14
+ raise ActiveRecord::Rollback
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,278 @@
1
+ --- !ruby/object:Puppet::Transaction::Report
2
+ metrics:
3
+ resources: !ruby/object:Puppet::Util::Metric
4
+ name: resources
5
+ label: Resources
6
+ values:
7
+ - - total
8
+ - Total
9
+ - 8
10
+ - - skipped
11
+ - Skipped
12
+ - 0
13
+ - - failed
14
+ - Failed
15
+ - 0
16
+ - - failed_to_restart
17
+ - "Failed to restart"
18
+ - 0
19
+ - - restarted
20
+ - Restarted
21
+ - 0
22
+ - - changed
23
+ - Changed
24
+ - 1
25
+ - - out_of_sync
26
+ - "Out of sync"
27
+ - 1
28
+ - - scheduled
29
+ - Scheduled
30
+ - 0
31
+ time: !ruby/object:Puppet::Util::Metric
32
+ name: time
33
+ label: Time
34
+ values:
35
+ - - schedule
36
+ - Schedule
37
+ - 0.00021728499999999998
38
+ - - notify
39
+ - Notify
40
+ - 0.000353069
41
+ - - filebucket
42
+ - Filebucket
43
+ - 3.8739e-05
44
+ - - config_retrieval
45
+ - "Config retrieval"
46
+ - 0.080785796
47
+ - - total
48
+ - Total
49
+ - 0.08139488900000001
50
+ changes: !ruby/object:Puppet::Util::Metric
51
+ name: changes
52
+ label: Changes
53
+ values:
54
+ - - total
55
+ - Total
56
+ - 1
57
+ events: !ruby/object:Puppet::Util::Metric
58
+ name: events
59
+ label: Events
60
+ values:
61
+ - - total
62
+ - Total
63
+ - 1
64
+ - - failure
65
+ - Failure
66
+ - 0
67
+ - - success
68
+ - Success
69
+ - 1
70
+ logs:
71
+ - !ruby/object:Puppet::Util::Log
72
+ level: !ruby/sym notice
73
+ tags:
74
+ - notice
75
+ message: shit
76
+ source: Puppet
77
+ time: 2014-12-11 18:53:34.907868 +01:00
78
+ - !ruby/object:Puppet::Util::Log
79
+ level: !ruby/sym notice
80
+ tags:
81
+ - notice
82
+ - notify
83
+ - shit
84
+ - class
85
+ message: "defined 'message' as 'shit'"
86
+ source: /Stage[main]/Main/Notify[shit]/message
87
+ time: 2014-12-11 18:53:34.907975 +01:00
88
+ line: 1
89
+ - !ruby/object:Puppet::Util::Log
90
+ level: !ruby/sym notice
91
+ tags:
92
+ - notice
93
+ message: "Finished catalog run in 0.06 seconds"
94
+ source: Puppet
95
+ time: 2014-12-11 18:53:34.963966 +01:00
96
+ resource_statuses:
97
+ Schedule[daily]: !ruby/object:Puppet::Resource::Status
98
+ resource: Schedule[daily]
99
+ file:
100
+ line:
101
+ evaluation_time: 6.3008e-05
102
+ change_count: 0
103
+ out_of_sync_count: 0
104
+ tags:
105
+ - schedule
106
+ - daily
107
+ time: 2014-12-11 18:53:34.906911 +01:00
108
+ events: []
109
+ out_of_sync: false
110
+ changed: false
111
+ resource_type: Schedule
112
+ title: daily
113
+ skipped: false
114
+ failed: false
115
+ containment_path:
116
+ - Schedule[daily]
117
+ Schedule[monthly]: !ruby/object:Puppet::Resource::Status
118
+ resource: Schedule[monthly]
119
+ file:
120
+ line:
121
+ evaluation_time: 3.0788e-05
122
+ change_count: 0
123
+ out_of_sync_count: 0
124
+ tags:
125
+ - schedule
126
+ - monthly
127
+ time: 2014-12-11 18:53:34.907052 +01:00
128
+ events: []
129
+ out_of_sync: false
130
+ changed: false
131
+ resource_type: Schedule
132
+ title: monthly
133
+ skipped: false
134
+ failed: false
135
+ containment_path:
136
+ - Schedule[monthly]
137
+ Schedule[hourly]: !ruby/object:Puppet::Resource::Status
138
+ resource: Schedule[hourly]
139
+ file:
140
+ line:
141
+ evaluation_time: 2.8306e-05
142
+ change_count: 0
143
+ out_of_sync_count: 0
144
+ tags:
145
+ - schedule
146
+ - hourly
147
+ time: 2014-12-11 18:53:34.907141 +01:00
148
+ events: []
149
+ out_of_sync: false
150
+ changed: false
151
+ resource_type: Schedule
152
+ title: hourly
153
+ skipped: false
154
+ failed: false
155
+ containment_path:
156
+ - Schedule[hourly]
157
+ Notify[shit]: !ruby/object:Puppet::Resource::Status
158
+ resource: Notify[shit]
159
+ file:
160
+ line: 1
161
+ evaluation_time: 0.000353069
162
+ change_count: 1
163
+ out_of_sync_count: 1
164
+ tags:
165
+ - notify
166
+ - shit
167
+ - class
168
+ time: 2014-12-11 18:53:34.907680 +01:00
169
+ events:
170
+ - !ruby/object:Puppet::Transaction::Event
171
+ audited: false
172
+ property: message
173
+ previous_value: !ruby/sym absent
174
+ desired_value: shit
175
+ historical_value:
176
+ message: "defined 'message' as 'shit'"
177
+ name: !ruby/sym message_changed
178
+ status: success
179
+ time: 2014-12-11 18:53:34.907822 +01:00
180
+ out_of_sync: true
181
+ changed: true
182
+ resource_type: Notify
183
+ title: shit
184
+ skipped: false
185
+ failed: false
186
+ containment_path:
187
+ - Stage[main]
188
+ - Main
189
+ - Notify[shit]
190
+ Schedule[never]: !ruby/object:Puppet::Resource::Status
191
+ resource: Schedule[never]
192
+ file:
193
+ line:
194
+ evaluation_time: 3.5455e-05
195
+ change_count: 0
196
+ out_of_sync_count: 0
197
+ tags:
198
+ - schedule
199
+ - never
200
+ time: 2014-12-11 18:53:34.908164 +01:00
201
+ events: []
202
+ out_of_sync: false
203
+ changed: false
204
+ resource_type: Schedule
205
+ title: never
206
+ skipped: false
207
+ failed: false
208
+ containment_path:
209
+ - Schedule[never]
210
+ Filebucket[puppet]: !ruby/object:Puppet::Resource::Status
211
+ resource: Filebucket[puppet]
212
+ file:
213
+ line:
214
+ evaluation_time: 3.8739e-05
215
+ change_count: 0
216
+ out_of_sync_count: 0
217
+ tags:
218
+ - filebucket
219
+ - puppet
220
+ time: 2014-12-11 18:53:34.908274 +01:00
221
+ events: []
222
+ out_of_sync: false
223
+ changed: false
224
+ resource_type: Filebucket
225
+ title: puppet
226
+ skipped: false
227
+ failed: false
228
+ containment_path:
229
+ - Filebucket[puppet]
230
+ Schedule[weekly]: !ruby/object:Puppet::Resource::Status
231
+ resource: Schedule[weekly]
232
+ file:
233
+ line:
234
+ evaluation_time: 3.0863e-05
235
+ change_count: 0
236
+ out_of_sync_count: 0
237
+ tags:
238
+ - schedule
239
+ - weekly
240
+ time: 2014-12-11 18:53:34.908373 +01:00
241
+ events: []
242
+ out_of_sync: false
243
+ changed: false
244
+ resource_type: Schedule
245
+ title: weekly
246
+ skipped: false
247
+ failed: false
248
+ containment_path:
249
+ - Schedule[weekly]
250
+ Schedule[puppet]: !ruby/object:Puppet::Resource::Status
251
+ resource: Schedule[puppet]
252
+ file:
253
+ line:
254
+ evaluation_time: 2.8865e-05
255
+ change_count: 0
256
+ out_of_sync_count: 0
257
+ tags:
258
+ - schedule
259
+ - puppet
260
+ time: 2014-12-11 18:53:34.908461 +01:00
261
+ events: []
262
+ out_of_sync: false
263
+ changed: false
264
+ resource_type: Schedule
265
+ title: puppet
266
+ skipped: false
267
+ failed: false
268
+ containment_path:
269
+ - Schedule[puppet]
270
+ host: ksuszynski-gs70.suszynski.org
271
+ time: 2014-12-11 18:53:34.770130 +01:00
272
+ kind: apply
273
+ report_format: 4
274
+ puppet_version: "3.7.3"
275
+ configuration_version: 1418320414
276
+ transaction_uuid: "814b7333-0fb4-4379-a670-dd4a06929643"
277
+ environment: production
278
+ status: changed