chef 12.21.1-universal-mingw32 → 12.21.4-universal-mingw32

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: 917505b3564c12f5f436b1086fa2f15d1d5a9c1e
4
- data.tar.gz: 96fe122824df46dc93efcbde4c3b179e0e56050e
3
+ metadata.gz: 459d357a648c30126a7a4dffbb709c327118879b
4
+ data.tar.gz: 672f6feac0d731ec7817254138fe803ee3518ec7
5
5
  SHA512:
6
- metadata.gz: 8cbb649b454b92937da3f51e98fc3c49e9f881c89fed23e8b502631f5be40653189d9ed610c5894cef9177c48723d1ee0069665108b23e54dbc58287e40f4570
7
- data.tar.gz: b3cdf839c9c86c44be4bc9ae7c1fe573afd5d487744f3082b9c20ec4996ca6751eda333471b1986bd3c54293a67897011653436cd0915fe0d180d5afaaf3dfde
6
+ metadata.gz: 61bd8bb963670a2ef235eb6f612a1964be93774dda090eb4e8e6e9ff9f069cf6a0446c7d886d74a8c4005b631a3a44f1a43f10e9a8c5c9d5233d7b485482a452
7
+ data.tar.gz: 21119edf195c229828ba14be8213d8f745043eec53ab5685fb419236fa963ff13332e2d75c472d1093b64676b8f48066539170f24f9901d9929c8575af448008
data/Gemfile CHANGED
@@ -74,7 +74,7 @@ group(:development, :test) do
74
74
 
75
75
  # for testing new chefstyle rules
76
76
  # gem 'chefstyle', github: 'chef/chefstyle'
77
- gem "chefstyle", git: "https://github.com/chef/chefstyle.git", branch: "master"
77
+ gem "chefstyle", "= 0.5.0"
78
78
  end
79
79
 
80
80
  group(:changelog) do
data/VERSION CHANGED
@@ -1 +1 @@
1
- 12.21.1
1
+ 12.21.4
@@ -18,6 +18,8 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
+ require "chef/exceptions"
22
+
21
23
  class Chef
22
24
  class DataCollector
23
25
  class ResourceReport
@@ -67,9 +69,9 @@ class Chef
67
69
  hash = {
68
70
  "type" => new_resource.resource_name.to_sym,
69
71
  "name" => new_resource.name.to_s,
70
- "id" => new_resource.identity.to_s,
71
- "after" => new_resource.state_for_resource_reporter,
72
- "before" => current_resource ? current_resource.state_for_resource_reporter : {},
72
+ "id" => resource_identity,
73
+ "after" => new_resource_state_reporter,
74
+ "before" => current_resource_state_reporter,
73
75
  "duration" => elapsed_time_in_milliseconds.to_s,
74
76
  "delta" => new_resource.respond_to?(:diff) && potentially_changed? ? new_resource.diff : "",
75
77
  "ignore_failure" => new_resource.ignore_failure,
@@ -83,13 +85,39 @@ class Chef
83
85
  hash["recipe_name"] = new_resource.recipe_name
84
86
  end
85
87
 
86
- hash["conditional"] = conditional.to_text if status == "skipped"
88
+ hash["conditional"] = conditional.to_text if status == "skipped"
87
89
  hash["error_message"] = exception.message unless exception.nil?
88
90
 
89
91
  hash
90
92
  end
91
93
  alias :to_h :to_hash
92
94
  alias :for_json :to_hash
95
+
96
+ # We should be able to call the identity of a resource safely, but there
97
+ # is an edge case where resources that have a lazy property that is both
98
+ # the name_property and the identity property, it will thow a validation
99
+ # exception causing the chef-client run to fail. We are not fixing this
100
+ # case since Chef is actually doing the right thing but we are making the
101
+ # ResourceReporter smarter so that it detects the failure and sends a
102
+ # message to the data collector containing a static resource identity
103
+ # since we were unable to generate a proper one.
104
+ def resource_identity
105
+ new_resource.identity.to_s
106
+ rescue => e
107
+ "unknown identity (due to #{e.class})"
108
+ end
109
+
110
+ def new_resource_state_reporter
111
+ new_resource.state_for_resource_reporter
112
+ rescue
113
+ {}
114
+ end
115
+
116
+ def current_resource_state_reporter
117
+ current_resource ? current_resource.state_for_resource_reporter : {}
118
+ rescue
119
+ {}
120
+ end
93
121
  end
94
122
  end
95
123
  end
@@ -51,7 +51,32 @@ class Chef
51
51
 
52
52
  class PolicyfileError < StandardError; end
53
53
 
54
- RunListExpansionIsh = Struct.new(:recipes, :roles)
54
+ RunListExpansionIsh = Struct.new(:recipes, :roles) do
55
+ # Implementing the parts of the RunListExpansion
56
+ # interface we need to properly send this through to
57
+ # events.run_list_expanded as it is expecting a RunListExpansion
58
+ # object.
59
+ def to_hash
60
+ # It looks like version only gets populated in the expanded_run_list when
61
+ # using a little used feature of roles to version lock cookbooks, so
62
+ # version is not reliable in here anyway (places like Automate UI are
63
+ # not getting version out of here.
64
+ #
65
+ # Skipped will always be false as it can only be true when two expanded
66
+ # roles contain the same recipe.
67
+ expanded_run_list = recipes.map do |r|
68
+ { type: "recipe", name: r, skipped: false, version: nil }
69
+ end
70
+ data_collector_hash = {}
71
+ data_collector_hash[:id] = "_policy_node"
72
+ data_collector_hash[:run_list] = expanded_run_list
73
+ data_collector_hash
74
+ end
75
+
76
+ def to_json(*opts)
77
+ to_hash.to_json(*opts)
78
+ end
79
+ end
55
80
 
56
81
  attr_reader :events
57
82
  attr_reader :node
@@ -137,6 +162,7 @@ class Chef
137
162
  Chef::Log.info("Run List expands to [#{run_list_with_versions_for_display.join(', ')}]")
138
163
 
139
164
  events.node_load_completed(node, run_list_with_versions_for_display, Chef::Config)
165
+ events.run_list_expanded(run_list_expansion_ish)
140
166
 
141
167
  node
142
168
  rescue Exception => e
data/lib/chef/version.rb CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  class Chef
23
23
  CHEF_ROOT = File.expand_path("../..", __FILE__)
24
- VERSION = "12.21.1"
24
+ VERSION = "12.21.4"
25
25
  end
26
26
 
27
27
  #
@@ -0,0 +1,145 @@
1
+ #
2
+ # Author:: Salim Afiune (<afiune@chef.io)
3
+ #
4
+ # Copyright:: Copyright 2012-2017, Chef Software Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require "spec_helper"
21
+
22
+ describe Chef::DataCollector::ResourceReport do
23
+ let(:cookbook_repo_path) { File.join(CHEF_SPEC_DATA, "cookbooks") }
24
+ let(:cookbook_collection) { Chef::CookbookCollection.new(Chef::CookbookLoader.new(cookbook_repo_path)) }
25
+ let(:node) { Chef::Node.new }
26
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
27
+ let(:run_context) { Chef::RunContext.new(node, cookbook_collection, events) }
28
+ let(:resource) { Chef::Resource.new("zelda", run_context) }
29
+ let(:report) { described_class.new(resource, :create) }
30
+
31
+ describe "#skipped" do
32
+ let(:conditional) { double("Chef::Resource::Conditional") }
33
+
34
+ it "should set status and conditional" do
35
+ report.skipped(conditional)
36
+ expect(report.conditional).to eq conditional
37
+ expect(report.status).to eq "skipped"
38
+ end
39
+ end
40
+
41
+ describe "#up_to_date" do
42
+ it "should set status" do
43
+ report.up_to_date
44
+ expect(report.status).to eq "up-to-date"
45
+ end
46
+ end
47
+
48
+ describe "#updated" do
49
+ it "should set status" do
50
+ report.updated
51
+ expect(report.status).to eq "updated"
52
+ end
53
+ end
54
+
55
+ describe "#elapsed_time_in_milliseconds" do
56
+
57
+ context "when elapsed_time is not set" do
58
+ it "should return nil" do
59
+ allow(report).to receive(:elapsed_time).and_return(nil)
60
+ expect(report.elapsed_time_in_milliseconds).to eq nil
61
+ end
62
+ end
63
+
64
+ context "when elapsed_time is set" do
65
+ it "should return it in milliseconds" do
66
+ allow(report).to receive(:elapsed_time).and_return(1)
67
+ expect(report.elapsed_time_in_milliseconds).to eq 1000
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "#failed" do
73
+ let(:exception) { double("Chef::Exception::Test") }
74
+
75
+ it "should set exception and status" do
76
+ report.failed(exception)
77
+ expect(report.exception).to eq exception
78
+ expect(report.status).to eq "failed"
79
+ end
80
+ end
81
+
82
+ describe "#to_hash" do
83
+ context "for a simple_resource" do
84
+ let(:resource) do
85
+ klass = Class.new(Chef::Resource) do
86
+ resource_name "zelda"
87
+ end
88
+ klass.new("hyrule", run_context)
89
+ end
90
+ let(:hash) do
91
+ {
92
+ "after" => {},
93
+ "before" => {},
94
+ "delta" => "",
95
+ "duration" => "",
96
+ "id" => "hyrule",
97
+ "ignore_failure" => false,
98
+ "name" => "hyrule",
99
+ "result" => "create",
100
+ "status" => "unprocessed",
101
+ "type" => :zelda,
102
+ }
103
+ end
104
+
105
+ it "returns a hash containing the expected values" do
106
+ expect(report.to_hash).to eq hash
107
+ end
108
+ end
109
+
110
+ context "for a lazy_resource that got skipped" do
111
+ let(:resource) do
112
+ klass = Class.new(Chef::Resource) do
113
+ resource_name "link"
114
+ property :sword, String, name_property: true, identity: true
115
+ end
116
+ resource = klass.new("hyrule")
117
+ resource.sword = Chef::DelayedEvaluator.new { nil }
118
+ resource
119
+ end
120
+ let(:hash) do
121
+ {
122
+ "after" => {},
123
+ "before" => {},
124
+ "delta" => "",
125
+ "duration" => "",
126
+ "conditional" => "because",
127
+ "id" => "unknown identity (due to Chef::Exceptions::ValidationFailed)",
128
+ "ignore_failure" => false,
129
+ "name" => "hyrule",
130
+ "result" => "create",
131
+ "status" => "skipped",
132
+ "type" => :link,
133
+ }
134
+ end
135
+ let(:conditional) do
136
+ double("Chef::Resource::Conditional", :to_text => "because")
137
+ end
138
+
139
+ it "should handle any Exception and throw a helpful message by mocking the identity" do
140
+ report.skipped(conditional)
141
+ expect(report.to_hash).to eq hash
142
+ end
143
+ end
144
+ end
145
+ end
@@ -330,6 +330,56 @@ describe Chef::PolicyBuilder::Policyfile do
330
330
 
331
331
  end
332
332
 
333
+ describe "#build_node" do
334
+
335
+ let(:node) do
336
+ node = Chef::Node.new
337
+ node.name(node_name)
338
+ node
339
+ end
340
+
341
+ before do
342
+ allow(policy_builder).to receive(:node).and_return(node)
343
+ end
344
+
345
+ context "when the run is successful" do
346
+ let(:run_list) do
347
+ ["recipe[test::default]",
348
+ "recipe[test::other]"]
349
+ end
350
+
351
+ let(:version_hash) do
352
+ {
353
+ "version" => "0.1.0",
354
+ "identifier" => "012345678",
355
+ }
356
+ end
357
+
358
+ let(:run_list_for_data_collector) do
359
+ {
360
+ :id => "_policy_node",
361
+ :run_list => [
362
+ { :type => "recipe", :name => "test::default", :skipped => false, :version => nil },
363
+ { :type => "recipe", :name => "test::other", :skipped => false, :version => nil },
364
+ ],
365
+ }
366
+ end
367
+
368
+ before do
369
+ allow(policy_builder).to receive(:run_list)
370
+ .and_return(run_list)
371
+ allow(policy_builder).to receive(:cookbook_lock_for)
372
+ .and_return(version_hash)
373
+ end
374
+
375
+ it "sends the run_list_expanded event" do
376
+ policy_builder.build_node
377
+ expect(policy_builder.run_list_expansion_ish.to_hash)
378
+ .to eq(run_list_for_data_collector)
379
+ end
380
+ end
381
+ end
382
+
333
383
  describe "building the node object" do
334
384
 
335
385
  let(:extra_chef_config) { {} }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.21.1
4
+ version: 12.21.4
5
5
  platform: universal-mingw32
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 12.21.1
19
+ version: 12.21.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 12.21.1
26
+ version: 12.21.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mixlib-cli
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -2315,6 +2315,7 @@ files:
2315
2315
  - spec/unit/data_bag_spec.rb
2316
2316
  - spec/unit/data_collector/messages/helpers_spec.rb
2317
2317
  - spec/unit/data_collector/messages_spec.rb
2318
+ - spec/unit/data_collector/resource_report_spec.rb
2318
2319
  - spec/unit/data_collector_spec.rb
2319
2320
  - spec/unit/decorator/lazy_array_spec.rb
2320
2321
  - spec/unit/decorator/lazy_spec.rb
@@ -2811,7 +2812,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2811
2812
  version: '0'
2812
2813
  requirements: []
2813
2814
  rubyforge_project:
2814
- rubygems_version: 2.6.10
2815
+ rubygems_version: 2.6.12
2815
2816
  signing_key:
2816
2817
  specification_version: 4
2817
2818
  summary: A systems integration framework, built to bring the benefits of configuration