chef 12.15.19-universal-mingw32 → 12.16.42-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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/VERSION +1 -1
  4. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +3 -1
  5. data/acceptance/Gemfile.lock +14 -14
  6. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +3 -11
  7. data/distro/common/html/knife_bootstrap.html +1 -1
  8. data/distro/common/man/man1/README.md +2 -2
  9. data/distro/common/man/man1/knife-client.1 +1 -1
  10. data/lib/chef/application.rb +7 -15
  11. data/lib/chef/application/client.rb +2 -2
  12. data/lib/chef/application/solo.rb +1 -1
  13. data/lib/chef/chef_class.rb +1 -0
  14. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +3 -7
  15. data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +1 -1
  16. data/lib/chef/data_collector.rb +83 -9
  17. data/lib/chef/data_collector/messages.rb +2 -1
  18. data/lib/chef/dsl/core.rb +1 -1
  19. data/lib/chef/dsl/declare_resource.rb +10 -4
  20. data/lib/chef/dsl/method_missing.rb +1 -1
  21. data/lib/chef/dsl/recipe.rb +1 -1
  22. data/lib/chef/dsl/universal.rb +1 -1
  23. data/lib/chef/event_dispatch/base.rb +3 -0
  24. data/lib/chef/http.rb +3 -4
  25. data/lib/chef/knife.rb +20 -2
  26. data/lib/chef/knife/core/generic_presenter.rb +18 -4
  27. data/lib/chef/knife/node_show.rb +0 -5
  28. data/lib/chef/knife/osc_user_show.rb +0 -1
  29. data/lib/chef/knife/ssl_fetch.rb +9 -5
  30. data/lib/chef/mixin/powershell_out.rb +1 -1
  31. data/lib/chef/mixin/shell_out.rb +1 -1
  32. data/lib/chef/node.rb +1 -5
  33. data/lib/chef/node/attribute.rb +70 -98
  34. data/lib/chef/node/attribute_collections.rb +28 -19
  35. data/lib/chef/node/common_api.rb +0 -6
  36. data/lib/chef/node/immutable_collections.rb +16 -79
  37. data/lib/chef/node/mixin/deep_merge_cache.rb +61 -0
  38. data/lib/chef/node/mixin/immutablize_array.rb +67 -0
  39. data/lib/chef/node/mixin/immutablize_hash.rb +54 -0
  40. data/lib/chef/node/mixin/state_tracking.rb +93 -0
  41. data/lib/chef/property.rb +4 -4
  42. data/lib/chef/provider/cron.rb +1 -1
  43. data/lib/chef/provider/group/suse.rb +23 -4
  44. data/lib/chef/provider/package.rb +43 -5
  45. data/lib/chef/provider/package/apt.rb +20 -0
  46. data/lib/chef/provider/package/windows/exe.rb +4 -3
  47. data/lib/chef/provider/package/windows/msi.rb +4 -3
  48. data/lib/chef/provider/package/yum.rb +20 -0
  49. data/lib/chef/provider/package/zypper.rb +20 -0
  50. data/lib/chef/provider/ruby_block.rb +1 -1
  51. data/lib/chef/provider/service/upstart.rb +25 -9
  52. data/lib/chef/provider/user.rb +4 -6
  53. data/lib/chef/provider/user/dscl.rb +8 -3
  54. data/lib/chef/provider/user/solaris.rb +5 -12
  55. data/lib/chef/resource.rb +19 -0
  56. data/lib/chef/resource/file.rb +1 -1
  57. data/lib/chef/resource/package.rb +1 -1
  58. data/lib/chef/resource/scm.rb +1 -7
  59. data/lib/chef/resource/yum_repository.rb +1 -1
  60. data/lib/chef/rest.rb +1 -0
  61. data/lib/chef/run_context.rb +12 -0
  62. data/lib/chef/version.rb +1 -1
  63. data/spec/data/trusted_certs/example_no_cn.crt +36 -0
  64. data/spec/functional/resource/group_spec.rb +1 -0
  65. data/spec/functional/resource/user/useradd_spec.rb +4 -2
  66. data/spec/integration/knife/data_bag_create_spec.rb +0 -3
  67. data/spec/integration/knife/environment_show_spec.rb +24 -4
  68. data/spec/integration/knife/node_environment_set_spec.rb +4 -1
  69. data/spec/integration/recipes/accumulator_spec.rb +232 -0
  70. data/spec/integration/recipes/resource_action_spec.rb +1 -1
  71. data/spec/spec_helper.rb +2 -2
  72. data/spec/support/shared/context/client.rb +12 -3
  73. data/spec/support/shared/integration/app_server_support.rb +1 -1
  74. data/spec/support/shared/integration/knife_support.rb +4 -1
  75. data/spec/unit/data_collector/messages_spec.rb +2 -0
  76. data/spec/unit/data_collector_spec.rb +158 -21
  77. data/spec/unit/http_spec.rb +1 -1
  78. data/spec/unit/knife/core/gem_glob_loader_spec.rb +1 -1
  79. data/spec/unit/knife/core/ui_spec.rb +10 -0
  80. data/spec/unit/knife/ssl_fetch_spec.rb +38 -0
  81. data/spec/unit/knife_spec.rb +31 -0
  82. data/spec/unit/mixin/powershell_out_spec.rb +25 -1
  83. data/spec/unit/node/attribute_spec.rb +46 -1
  84. data/spec/unit/node/vivid_mash_spec.rb +27 -89
  85. data/spec/unit/node_spec.rb +134 -3
  86. data/spec/unit/provider/deploy_spec.rb +1 -1
  87. data/spec/unit/provider/group/suse_spec.rb +90 -0
  88. data/spec/unit/provider/package/apt_spec.rb +22 -0
  89. data/spec/unit/provider/package/windows/msi_spec.rb +13 -4
  90. data/spec/unit/provider/package/windows_spec.rb +3 -3
  91. data/spec/unit/provider/package/yum_spec.rb +18 -0
  92. data/spec/unit/provider/package/zypper_spec.rb +64 -0
  93. data/spec/unit/provider/package_spec.rb +58 -0
  94. data/spec/unit/provider/remote_file/content_spec.rb +1 -1
  95. data/spec/unit/provider/service/upstart_service_spec.rb +13 -6
  96. data/spec/unit/provider/user/solaris_spec.rb +36 -9
  97. data/spec/unit/provider/user_spec.rb +6 -0
  98. data/spec/unit/resource/apt_repository_spec.rb +1 -1
  99. metadata +12 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fdff855af6b1978652b146ddf6dce78339a3de73
4
- data.tar.gz: 39f168a5e890fbbbe2add9c7cfb62115ae50d9d0
3
+ metadata.gz: fcd8d689362313ae06f87de26dda89c4bd8b1b68
4
+ data.tar.gz: 8bd1199e88ad088b72abf6d23db0b322fdd3c3b6
5
5
  SHA512:
6
- metadata.gz: 36b1a99cd2958010f5337ec93704b1561f72f25d30b889b6308ccc9c774332940cff13650dfaeacb189ca815641bbf2b0680a0e8d438b9e9e4eac8a310a2c17c
7
- data.tar.gz: 54d7f145e3cd4ca6ab034e1c899fa8bb1cafe633f6256e4a3f9b4c4a4f2a93852a16730518b30048e8977b12a1d93a1d080b4f62f5e15a0e8b9382533f4180eb
6
+ metadata.gz: a711af3ae27a762f47518ec1f786bf973bbe943478134acd81d4af39ac24c4edb4fdc4905100ebc3b821c49e2ae9d9ab7861911fcd24e173d1dfe2577c40040b
7
+ data.tar.gz: 0ad759812f12b9994bcb91bab04c2351338635c09651b7570f77d24e4d1d491b9462d9eed65435917620abc4414e8d779546f4e39240be324e37f8b08300c856
data/Gemfile CHANGED
@@ -33,7 +33,6 @@ end
33
33
  group(:integration) do
34
34
  gem "chef-provisioning"
35
35
  gem "chef-provisioning-aws"
36
- gem "chef-rewind"
37
36
  gem "chef-sugar"
38
37
  gem "chefspec"
39
38
  gem "halite"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 12.15.19
1
+ 12.16.42
@@ -10,7 +10,9 @@ end
10
10
  driver:
11
11
  name: ec2
12
12
  tags:
13
- X-Project: chef-ci-acceptance
13
+ X-Dept: Eng
14
+ X-Contact: product-team
15
+ X-Application: chef-ci-acceptance
14
16
  aws_ssh_key_id: <%= ENV['AWS_SSH_KEY_ID'] || ENV['USER'] || ENV['USERNAME'] %>
15
17
  # test-specific stuff
16
18
  region: us-west-2
@@ -11,12 +11,12 @@ GEM
11
11
  specs:
12
12
  addressable (2.4.0)
13
13
  artifactory (2.5.0)
14
- aws-sdk (2.6.5)
15
- aws-sdk-resources (= 2.6.5)
16
- aws-sdk-core (2.6.5)
14
+ aws-sdk (2.6.14)
15
+ aws-sdk-resources (= 2.6.14)
16
+ aws-sdk-core (2.6.14)
17
17
  jmespath (~> 1.0)
18
- aws-sdk-resources (2.6.5)
19
- aws-sdk-core (= 2.6.5)
18
+ aws-sdk-resources (2.6.14)
19
+ aws-sdk-core (= 2.6.14)
20
20
  berkshelf (4.3.5)
21
21
  addressable (~> 2.3, >= 2.3.4)
22
22
  berkshelf-api-client (~> 2.0, >= 2.0.2)
@@ -53,7 +53,7 @@ GEM
53
53
  celluloid-io (0.16.2)
54
54
  celluloid (>= 0.16.0)
55
55
  nio4r (>= 1.1.0)
56
- chef-config (12.14.89)
56
+ chef-config (12.15.19)
57
57
  addressable
58
58
  fuzzyurl
59
59
  mixlib-config (~> 2.0)
@@ -61,11 +61,11 @@ GEM
61
61
  cleanroom (1.0.0)
62
62
  coderay (1.1.1)
63
63
  diff-lcs (1.2.5)
64
- docker-api (1.32.0)
64
+ docker-api (1.32.1)
65
65
  excon (>= 0.38.0)
66
66
  json
67
67
  erubis (2.7.0)
68
- excon (0.53.0)
68
+ excon (0.54.0)
69
69
  faraday (0.9.2)
70
70
  multipart-post (>= 1.2, < 3)
71
71
  ffi (1.9.14)
@@ -77,7 +77,7 @@ GEM
77
77
  hashie (3.4.6)
78
78
  hitimes (1.2.4)
79
79
  httpclient (2.7.2)
80
- inspec (1.0.0)
80
+ inspec (1.3.0)
81
81
  hashie (~> 3.4)
82
82
  json (>= 1.8, < 3.0)
83
83
  method_source (~> 0.8)
@@ -90,7 +90,7 @@ GEM
90
90
  rubyzip (~> 1.1)
91
91
  sslshake (~> 1)
92
92
  thor (~> 0.19)
93
- train (>= 0.19.1, < 1.0)
93
+ train (>= 0.20.1, < 1.0)
94
94
  jmespath (1.3.1)
95
95
  json (2.0.2)
96
96
  kitchen-ec2 (1.2.0)
@@ -132,7 +132,7 @@ GEM
132
132
  net-ssh (>= 2.6.5)
133
133
  nio4r (1.2.1)
134
134
  nori (2.6.0)
135
- octokit (4.3.0)
135
+ octokit (4.4.1)
136
136
  sawyer (~> 0.7.0, >= 0.5.3)
137
137
  parallel (1.9.0)
138
138
  pry (0.10.4)
@@ -186,7 +186,7 @@ GEM
186
186
  solve (2.0.3)
187
187
  molinillo (~> 0.4.2)
188
188
  semverse (~> 1.1)
189
- sslshake (1.0.12)
189
+ sslshake (1.0.13)
190
190
  test-kitchen (1.13.2)
191
191
  mixlib-install (>= 1.2, < 3.0)
192
192
  mixlib-shellout (>= 1.2, < 3.0)
@@ -198,7 +198,7 @@ GEM
198
198
  thor (0.19.1)
199
199
  timers (4.0.4)
200
200
  hitimes
201
- train (0.20.0)
201
+ train (0.20.1)
202
202
  docker-api (~> 1.26)
203
203
  json (>= 1.8, < 3.0)
204
204
  mixlib-shellout (~> 2.0)
@@ -211,7 +211,7 @@ GEM
211
211
  hashie (>= 2.0.2, < 4.0.0)
212
212
  windows_chef_zero (2.0.0)
213
213
  test-kitchen (>= 1.2.1)
214
- winrm (2.0.3)
214
+ winrm (2.1.0)
215
215
  builder (>= 2.1.2)
216
216
  erubis (~> 2.7)
217
217
  gssapi (~> 1.2)
@@ -60,7 +60,7 @@ end
60
60
 
61
61
  shared_examples_for "counter checks" do |counters_to_check|
62
62
  counters_to_check.each do |counter, value|
63
- it "counter #{counter} should equal #{value}" do
63
+ it "counter #{counter} should equal #{value.inspect}" do
64
64
  counter_values = JSON.load(command("curl http://localhost:9292/counters").stdout)
65
65
  expect(counter_values[counter]).to eq(value)
66
66
  end
@@ -91,11 +91,6 @@ shared_examples_for "run_start payload check" do
91
91
  expect(missing_fields).to eq([])
92
92
  end
93
93
 
94
- it "does not have any extra fields" do
95
- payload = JSON.load(command("curl http://localhost:9292/cache/run_start").stdout)
96
- extra_fields = payload.keys.select { |key| !required_fields.include?(key) && !optional_fields.include?(key) }
97
- expect(extra_fields).to eq([])
98
- end
99
94
  end
100
95
  end
101
96
 
@@ -121,6 +116,7 @@ shared_examples_for "run_converge.success payload check" do
121
116
  status
122
117
  total_resource_count
123
118
  updated_resource_count
119
+ deprecations
124
120
  }
125
121
  end
126
122
  let(:optional_fields) { [] }
@@ -131,11 +127,6 @@ shared_examples_for "run_converge.success payload check" do
131
127
  expect(missing_fields).to eq([])
132
128
  end
133
129
 
134
- it "does not have any extra fields" do
135
- payload = JSON.load(command("curl http://localhost:9292/cache/run_converge.success").stdout)
136
- extra_fields = payload.keys.select { |key| !required_fields.include?(key) && !optional_fields.include?(key) }
137
- expect(extra_fields).to eq([])
138
- end
139
130
  end
140
131
  end
141
132
 
@@ -162,6 +153,7 @@ shared_examples_for "run_converge.failure payload check" do
162
153
  status
163
154
  total_resource_count
164
155
  updated_resource_count
156
+ deprecations
165
157
  }
166
158
  end
167
159
  let(:optional_fields) { [] }
@@ -173,7 +173,7 @@
173
173
  <div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>knife bootstrap 192.168.1.100 -r <span class="s1">&#39;role[webserver]&#39;</span> -d ubuntu12.04-gems-mine
174
174
  </pre></div>
175
175
  </div>
176
- <p>Alternatively, an example bootstrap template can be found in the git source for the chef-repo: <a class="reference external" href="https://github.com/opscode/chef/tree/master/lib/chef/knife/bootstrap">https://github.com/opscode/chef/tree/master/lib/chef/knife/bootstrap</a>. Copy the template to <tt class="docutils literal"><span class="pre">~/.chef-repo/.chef/bootstrap/ubuntu12.04-apt.erb</span></tt> and modify the template appropriately.</p>
176
+ <p>Alternatively, an example bootstrap template can be found in the git source for the chef-repo: <a class="reference external" href="https://github.com/chef/chef/tree/master/lib/chef/knife/bootstrap">https://github.com/chef/chef/tree/master/lib/chef/knife/bootstrap</a>. Copy the template to <tt class="docutils literal"><span class="pre">~/.chef-repo/.chef/bootstrap/ubuntu12.04-apt.erb</span></tt> and modify the template appropriately.</p>
177
177
  </div>
178
178
  <div class="section" id="debian-and-apt">
179
179
  <h3>Debian and Apt<a class="headerlink" href="#debian-and-apt" title="Permalink to this headline">¶</a></h3>
@@ -9,7 +9,7 @@ that are built into the chef-client are managed.
9
9
  ## Source Files
10
10
 
11
11
  The source files are located in the chef-docs repository:
12
- https://github.com/opscode/chef-docs
12
+ https://github.com/chef/chef-docs
13
13
 
14
14
  Each Knife subcommand has its own source folder. The folder naming
15
15
  pattern begins with man_.
@@ -55,4 +55,4 @@ at docs.opscode.com/knife_foo.html.
55
55
 
56
56
  ## Questions?
57
57
 
58
- Open an [Issue](https://github.com/opscode/chef-docs/issues) and ask.
58
+ Open an [Issue](https://github.com/chef/chef-docs/issues) and ask.
@@ -37,7 +37,7 @@ However, during the first chef\-client run, this private key does not exist. Ins
37
37
  .sp
38
38
  During the initial chef\-client run, the chef\-client will register with the Chef server using the private key assigned to the chef\-validator, after which the chef\-client will obtain a \fBclient.pem\fP private key for all future authentication requests to the Chef server\&.
39
39
  .sp
40
- After the initial chef\-client run has completed successfully, the chef\-validator is no longer required and may be deleted from the node. Use the \fBdelete_validation\fP recipe found in the \fBchef\-client\fP cookbook (\fI\%https://github.com/opscode\-cookbooks/chef\-client\fP) to remove the chef\-validator\&.
40
+ After the initial chef\-client run has completed successfully, the chef\-validator is no longer required and may be deleted from the node. Use the \fBdelete_validation\fP recipe found in the \fBchef\-client\fP cookbook (\fI\%https://github.com/chef\-cookbooks/chef\-client\fP) to remove the chef\-validator\&.
41
41
  .sp
42
42
  The \fBknife client\fP subcommand is used to manage an API client list and their associated RSA public key\-pairs. This allows authentication requests to be made to the Chef server by any entity that uses the Chef server API, such as the chef\-client and knife\&.
43
43
  .SH COMMON OPTIONS
@@ -28,7 +28,6 @@ require "mixlib/cli"
28
28
  require "tmpdir"
29
29
  require "rbconfig"
30
30
  require "chef/application/exit_code"
31
- require "yaml"
32
31
 
33
32
  class Chef
34
33
  class Application
@@ -111,20 +110,13 @@ class Chef
111
110
  end
112
111
  extra_config_options = config.delete(:config_option)
113
112
  Chef::Config.merge!(config)
114
- if extra_config_options
115
- extra_parsed_options = extra_config_options.inject({}) do |memo, option|
116
- # Sanity check value.
117
- Chef::Application.fatal!("Unparsable config option #{option.inspect}") if option.empty? || !option.include?("=")
118
- # Split including whitespace if someone does truly odd like
119
- # --config-option "foo = bar"
120
- key, value = option.split(/\s*=\s*/, 2)
121
- # Call to_sym because Chef::Config expects only symbol keys. Also
122
- # runs a simple parse on the string for some common types.
123
- memo[key.to_sym] = YAML.safe_load(value)
124
- memo
125
- end
126
- Chef::Config.merge!(extra_parsed_options)
127
- end
113
+ apply_extra_config_options(extra_config_options)
114
+ end
115
+
116
+ def apply_extra_config_options(extra_config_options)
117
+ Chef::Config.apply_extra_config_options(extra_config_options)
118
+ rescue ChefConfig::UnparsableConfigOption => e
119
+ Chef::Application.fatal!(e.message)
128
120
  end
129
121
 
130
122
  def set_specific_recipes
@@ -202,7 +202,7 @@ class Chef::Application::Client < Chef::Application
202
202
  :short => "-o RunlistItem,RunlistItem...",
203
203
  :long => "--override-runlist RunlistItem,RunlistItem...",
204
204
  :description => "Replace current run list with specified items for a single run",
205
- :proc => lambda {|items|
205
+ :proc => lambda { |items|
206
206
  items = items.split(",")
207
207
  items.compact.map do |item|
208
208
  Chef::RunList::RunListItem.new(item)
@@ -213,7 +213,7 @@ class Chef::Application::Client < Chef::Application
213
213
  :short => "-r RunlistItem,RunlistItem...",
214
214
  :long => "--runlist RunlistItem,RunlistItem...",
215
215
  :description => "Permanently replace current run list with specified items",
216
- :proc => lambda {|items|
216
+ :proc => lambda { |items|
217
217
  items = items.split(",")
218
218
  items.compact.map do |item|
219
219
  Chef::RunList::RunListItem.new(item)
@@ -166,7 +166,7 @@ class Chef::Application::Solo < Chef::Application
166
166
  :short => "-o RunlistItem,RunlistItem...",
167
167
  :long => "--override-runlist RunlistItem,RunlistItem...",
168
168
  :description => "Replace current run list with specified items",
169
- :proc => lambda {|items|
169
+ :proc => lambda { |items|
170
170
  items = items.split(",")
171
171
  items.compact.map do |item|
172
172
  Chef::RunList::RunListItem.new(item)
@@ -30,6 +30,7 @@ require "chef/platform/provider_priority_map"
30
30
  require "chef/platform/resource_priority_map"
31
31
  require "chef/platform/provider_handler_map"
32
32
  require "chef/platform/resource_handler_map"
33
+ require "chef/event_dispatch/dsl"
33
34
 
34
35
  class Chef
35
36
  class << self
@@ -39,17 +39,13 @@ class Chef
39
39
  def read
40
40
  begin
41
41
  tmpfile = rest.streaming_request(file[:url])
42
+ File.open(tmpfile, "rb") { |f| f.read }
42
43
  rescue Timeout::Error => e
43
44
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:read, self, e, "Timeout reading #{file[:url]}: #{e}")
44
45
  rescue Net::HTTPServerException => e
45
46
  raise Chef::ChefFS::FileSystem::OperationFailedError.new(:read, self, e, "#{e.message} retrieving #{file[:url]}")
46
- end
47
-
48
- begin
49
- tmpfile.open
50
- tmpfile.read
51
- ensure
52
- tmpfile.close!
47
+ rescue Errno::ENOENT
48
+ raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
53
49
  end
54
50
  end
55
51
 
@@ -24,7 +24,7 @@ class Chef
24
24
  module ChefServer
25
25
  class VersionedCookbookDir < CookbookDir
26
26
  # See Erchef code
27
- # https://github.com/opscode/chef_objects/blob/968a63344d38fd507f6ace05f73d53e9cd7fb043/src/chef_regex.erl#L94
27
+ # https://github.com/chef/chef_objects/blob/968a63344d38fd507f6ace05f73d53e9cd7fb043/src/chef_regex.erl#L94
28
28
  VALID_VERSIONED_COOKBOOK_NAME = /^([.a-zA-Z0-9_-]+)-(\d+\.\d+\.\d+)$/
29
29
 
30
30
  def initialize(name, parent, options = {})
@@ -19,20 +19,66 @@
19
19
  #
20
20
 
21
21
  require "uri"
22
+ require "chef/server_api"
23
+ require "chef/http/simple_json"
22
24
  require "chef/event_dispatch/base"
23
25
  require "chef/data_collector/messages"
24
26
  require "chef/data_collector/resource_report"
25
27
  require "ostruct"
28
+ require "set"
26
29
 
27
30
  class Chef
28
31
 
29
32
  # == Chef::DataCollector
30
33
  # Provides methods for determinine whether a reporter should be registered.
31
34
  class DataCollector
35
+
36
+ # Whether or not to enable data collection:
37
+ # * always disabled for why run mode
38
+ # * disabled when the user sets `Chef::Config[:data_collector][:mode]` to a
39
+ # value that excludes the mode (client or solo) that we are running as
40
+ # * disabled in solo mode if the user did not configure the auth token
41
+ # * disabled if `Chef::Config[:data_collector][:server_url]` is set to a
42
+ # falsey value
32
43
  def self.register_reporter?
33
- Chef::Config[:data_collector][:server_url] &&
34
- !Chef::Config[:why_run] &&
35
- self.reporter_enabled_for_current_mode?
44
+ if why_run?
45
+ Chef::Log.debug("data collector is disabled for why run mode")
46
+ return false
47
+ end
48
+ unless reporter_enabled_for_current_mode?
49
+ Chef::Log.debug("data collector is configured to only run in " \
50
+ "#{Chef::Config[:data_collector][:mode].inspect} modes, disabling it")
51
+ return false
52
+ end
53
+ unless data_collector_url_configured?
54
+ Chef::Log.debug("data collector URL is not configured, disabling data collector")
55
+ return false
56
+ end
57
+ if solo? && !token_auth_configured?
58
+ Chef::Log.debug("Data collector token must be configured to use Chef Automate data collector with Chef Solo")
59
+ end
60
+ if !solo? && token_auth_configured?
61
+ Chef::Log.warn("Data collector token authentication is not recommended for client-server mode" \
62
+ "Please upgrade Chef Server to 12.11.0 and remove the token from your config file " \
63
+ "to use key based authentication instead")
64
+ end
65
+ true
66
+ end
67
+
68
+ def self.data_collector_url_configured?
69
+ !!Chef::Config[:data_collector][:server_url]
70
+ end
71
+
72
+ def self.why_run?
73
+ !!Chef::Config[:why_run]
74
+ end
75
+
76
+ def self.token_auth_configured?
77
+ !!Chef::Config[:data_collector][:token]
78
+ end
79
+
80
+ def self.solo?
81
+ !!Chef::Config[:solo] || !!Chef::Config[:local_mode]
36
82
  end
37
83
 
38
84
  def self.reporter_enabled_for_current_mode?
@@ -54,7 +100,7 @@ class Chef
54
100
  class Reporter < EventDispatch::Base
55
101
  attr_reader :all_resource_reports, :status, :exception, :error_descriptions,
56
102
  :expanded_run_list, :run_context, :run_status, :http,
57
- :current_resource_report, :enabled
103
+ :current_resource_report, :enabled, :deprecations
58
104
 
59
105
  def initialize
60
106
  validate_data_collector_server_url!
@@ -63,8 +109,10 @@ class Chef
63
109
  @current_resource_loaded = nil
64
110
  @error_descriptions = {}
65
111
  @expanded_run_list = {}
66
- @http = Chef::HTTP.new(data_collector_server_url)
112
+ @deprecations = Set.new
67
113
  @enabled = true
114
+
115
+ @http = setup_http_client
68
116
  end
69
117
 
70
118
  # see EventDispatch::Base#run_started
@@ -79,7 +127,7 @@ class Chef
79
127
 
80
128
  disable_reporter_on_error do
81
129
  send_to_data_collector(
82
- Chef::DataCollector::Messages.run_start_message(current_run_status).to_json
130
+ Chef::DataCollector::Messages.run_start_message(current_run_status)
83
131
  )
84
132
  end
85
133
  end
@@ -223,8 +271,27 @@ class Chef
223
271
  )
224
272
  end
225
273
 
274
+ # see EventDispatch::Base#deprecation
275
+ # Append a received deprecation to the list of deprecations
276
+ def deprecation(message, location = caller(2..2)[0])
277
+ add_deprecation(message, location)
278
+ end
279
+
226
280
  private
227
281
 
282
+ # Selects the type of HTTP client to use based on whether we are using
283
+ # token-based or signed header authentication. Token authentication is
284
+ # intended to be used primarily for Chef Solo in which case no signing
285
+ # key will be available (in which case `Chef::ServerAPI.new()` would
286
+ # raise an exception.
287
+ def setup_http_client
288
+ if data_collector_token.nil?
289
+ Chef::ServerAPI.new(data_collector_server_url)
290
+ else
291
+ Chef::HTTP::SimpleJSON.new(data_collector_server_url)
292
+ end
293
+ end
294
+
228
295
  #
229
296
  # Yields to the passed-in block (which is expected to be some interaction
230
297
  # with the DataCollector endpoint). If some communication failure occurs,
@@ -255,7 +322,9 @@ class Chef
255
322
  Chef::Log.error(msg)
256
323
  raise
257
324
  else
258
- Chef::Log.warn(msg)
325
+ # Make the message non-scary for folks who don't have automate:
326
+ msg << " (This is normal if you do not have Chef Automate)"
327
+ Chef::Log.info(msg)
259
328
  end
260
329
  end
261
330
 
@@ -288,8 +357,9 @@ class Chef
288
357
  expanded_run_list: expanded_run_list,
289
358
  resources: all_resource_reports,
290
359
  status: opts[:status],
291
- error_descriptions: error_descriptions
292
- ).to_json
360
+ error_descriptions: error_descriptions,
361
+ deprecations: deprecations.to_a
362
+ )
293
363
  )
294
364
  end
295
365
 
@@ -340,6 +410,10 @@ class Chef
340
410
  @error_descriptions = discription_hash
341
411
  end
342
412
 
413
+ def add_deprecation(message, location)
414
+ @deprecations << { message: message, location: location }
415
+ end
416
+
343
417
  def create_resource_report(new_resource, action, current_resource = nil)
344
418
  Chef::DataCollector::ResourceReport.new(
345
419
  new_resource,