chef 12.17.44 → 12.18.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/README.md +3 -2
  4. data/Rakefile +9 -0
  5. data/VERSION +1 -1
  6. data/acceptance/Gemfile.lock +17 -17
  7. data/distro/common/html/knife_environment.html +4 -8
  8. data/distro/common/man/man1/knife-environment.1 +4 -16
  9. data/distro/powershell/chef/chef.psm1 +139 -24
  10. data/lib/chef/application.rb +5 -4
  11. data/lib/chef/application/windows_service_manager.rb +6 -4
  12. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  13. data/lib/chef/chef_fs/command_line.rb +1 -1
  14. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +8 -1
  15. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +1 -1
  17. data/lib/chef/cookbook/chefignore.rb +1 -1
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
  19. data/lib/chef/cookbook/metadata.rb +2 -2
  20. data/lib/chef/cookbook_loader.rb +1 -1
  21. data/lib/chef/data_collector.rb +24 -13
  22. data/lib/chef/data_collector/messages.rb +8 -6
  23. data/lib/chef/data_collector/messages/helpers.rb +1 -1
  24. data/lib/chef/deprecated.rb +30 -0
  25. data/lib/chef/dsl/platform_introspection.rb +2 -2
  26. data/lib/chef/encrypted_data_bag_item.rb +1 -1
  27. data/lib/chef/encrypted_data_bag_item/decryptor.rb +2 -2
  28. data/lib/chef/environment.rb +1 -1
  29. data/lib/chef/exceptions.rb +5 -5
  30. data/lib/chef/file_access_control/unix.rb +5 -5
  31. data/lib/chef/formatters/error_description.rb +1 -1
  32. data/lib/chef/http/basic_client.rb +1 -1
  33. data/lib/chef/http/json_input.rb +2 -2
  34. data/lib/chef/knife.rb +1 -1
  35. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  36. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  37. data/lib/chef/knife/core/ui.rb +1 -1
  38. data/lib/chef/mixin/command.rb +1 -0
  39. data/lib/chef/mixin/deep_merge.rb +1 -1
  40. data/lib/chef/mixin/shell_out.rb +58 -3
  41. data/lib/chef/mixin/which.rb +5 -9
  42. data/lib/chef/mixin/wide_string.rb +1 -1
  43. data/lib/chef/node.rb +1 -1
  44. data/lib/chef/node/attribute.rb +4 -5
  45. data/lib/chef/node_map.rb +18 -2
  46. data/lib/chef/platform/provider_handler_map.rb +2 -2
  47. data/lib/chef/platform/provider_mapping.rb +5 -0
  48. data/lib/chef/platform/resource_handler_map.rb +2 -2
  49. data/lib/chef/provider/env/windows.rb +1 -1
  50. data/lib/chef/provider/git.rb +1 -1
  51. data/lib/chef/provider/group.rb +41 -46
  52. data/lib/chef/provider/group/aix.rb +12 -19
  53. data/lib/chef/provider/group/dscl.rb +46 -43
  54. data/lib/chef/provider/group/gpasswd.rb +7 -7
  55. data/lib/chef/provider/group/groupadd.rb +29 -34
  56. data/lib/chef/provider/group/groupmod.rb +26 -31
  57. data/lib/chef/provider/group/pw.rb +28 -31
  58. data/lib/chef/provider/group/suse.rb +9 -9
  59. data/lib/chef/provider/group/usermod.rb +10 -11
  60. data/lib/chef/provider/group/windows.rb +18 -20
  61. data/lib/chef/provider/ifconfig.rb +52 -63
  62. data/lib/chef/provider/ifconfig/aix.rb +23 -28
  63. data/lib/chef/provider/ifconfig/debian.rb +23 -22
  64. data/lib/chef/provider/ifconfig/redhat.rb +12 -12
  65. data/lib/chef/provider/mount/mount.rb +1 -1
  66. data/lib/chef/provider/osx_profile.rb +4 -2
  67. data/lib/chef/provider/package.rb +16 -7
  68. data/lib/chef/provider/package/chocolatey.rb +3 -1
  69. data/lib/chef/provider/package/dnf.rb +183 -0
  70. data/lib/chef/provider/package/dnf/dnf_helper.py +91 -0
  71. data/lib/chef/provider/package/dnf/python_helper.rb +120 -0
  72. data/lib/chef/provider/package/dnf/version.rb +56 -0
  73. data/lib/chef/provider/package/easy_install.rb +1 -1
  74. data/lib/chef/provider/package/freebsd/base.rb +1 -1
  75. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  76. data/lib/chef/provider/package/powershell.rb +3 -3
  77. data/lib/chef/provider/package/windows.rb +1 -1
  78. data/lib/chef/provider/package/zypper.rb +1 -1
  79. data/lib/chef/provider/route.rb +186 -184
  80. data/lib/chef/provider/service/arch.rb +2 -2
  81. data/lib/chef/provider/service/freebsd.rb +1 -1
  82. data/lib/chef/provider/service/gentoo.rb +2 -2
  83. data/lib/chef/provider/service/insserv.rb +2 -2
  84. data/lib/chef/provider/service/macosx.rb +2 -2
  85. data/lib/chef/provider/service/openbsd.rb +1 -1
  86. data/lib/chef/provider/service/redhat.rb +2 -2
  87. data/lib/chef/provider/support/yum_repo.erb +10 -3
  88. data/lib/chef/provider/user.rb +17 -20
  89. data/lib/chef/provider/user/aix.rb +23 -24
  90. data/lib/chef/provider/user/dscl.rb +56 -53
  91. data/lib/chef/provider/user/linux.rb +13 -16
  92. data/lib/chef/provider/user/pw.rb +26 -30
  93. data/lib/chef/provider/user/solaris.rb +11 -12
  94. data/lib/chef/provider/user/useradd.rb +20 -22
  95. data/lib/chef/provider/user/windows.rb +19 -22
  96. data/lib/chef/provider_resolver.rb +4 -2
  97. data/lib/chef/providers.rb +1 -0
  98. data/lib/chef/resource.rb +7 -0
  99. data/lib/chef/resource/chocolatey_package.rb +1 -0
  100. data/lib/chef/resource/dnf_package.rb +64 -0
  101. data/lib/chef/resource/file/verification.rb +6 -4
  102. data/lib/chef/resource/yum_package.rb +18 -14
  103. data/lib/chef/resource/yum_repository.rb +1 -1
  104. data/lib/chef/resource_reporter.rb +11 -0
  105. data/lib/chef/resources.rb +1 -0
  106. data/lib/chef/scan_access_control.rb +4 -4
  107. data/lib/chef/util/dsc/resource_store.rb +1 -1
  108. data/lib/chef/version.rb +1 -1
  109. data/lib/chef/win32/memory.rb +1 -1
  110. data/lib/chef/win32/security.rb +2 -2
  111. data/lib/chef/win32/security/sid.rb +2 -2
  112. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
  113. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
  114. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
  115. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
  116. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
  117. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
  118. data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
  119. data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
  120. data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
  121. data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
  122. data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
  123. data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
  124. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -0
  125. data/spec/functional/resource/dnf_package_spec.rb +686 -0
  126. data/spec/functional/resource/dsc_script_spec.rb +1 -0
  127. data/spec/functional/resource/user/useradd_spec.rb +10 -1
  128. data/spec/integration/knife/chef_repo_path_spec.rb +2 -2
  129. data/spec/integration/recipes/recipe_dsl_spec.rb +3 -0
  130. data/spec/integration/recipes/resource_load_spec.rb +3 -3
  131. data/spec/spec_helper.rb +5 -3
  132. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  133. data/spec/support/lib/chef/resource/cat.rb +1 -0
  134. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -0
  135. data/spec/support/lib/chef/resource/openldap_includer.rb +2 -0
  136. data/spec/support/lib/chef/resource/with_state.rb +2 -0
  137. data/spec/support/lib/chef/resource/zen_master.rb +1 -0
  138. data/spec/unit/cookbook/metadata_spec.rb +3 -3
  139. data/spec/unit/data_collector/messages/helpers_spec.rb +7 -0
  140. data/spec/unit/data_collector_spec.rb +56 -0
  141. data/spec/unit/decorator/lazy_spec.rb +1 -1
  142. data/spec/unit/environment_spec.rb +1 -1
  143. data/spec/unit/lwrp_spec.rb +3 -4
  144. data/spec/unit/node_spec.rb +23 -2
  145. data/spec/unit/platform_spec.rb +1 -0
  146. data/spec/unit/provider/group/dscl_spec.rb +29 -29
  147. data/spec/unit/provider/group/gpasswd_spec.rb +10 -10
  148. data/spec/unit/provider/group/groupadd_spec.rb +31 -30
  149. data/spec/unit/provider/group/groupmod_spec.rb +16 -16
  150. data/spec/unit/provider/group/pw_spec.rb +11 -11
  151. data/spec/unit/provider/group/suse_spec.rb +5 -5
  152. data/spec/unit/provider/group/usermod_spec.rb +15 -15
  153. data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
  154. data/spec/unit/provider/ifconfig/debian_spec.rb +10 -22
  155. data/spec/unit/provider/ifconfig/redhat_spec.rb +4 -4
  156. data/spec/unit/provider/ifconfig_spec.rb +18 -19
  157. data/spec/unit/provider/package/chocolatey_spec.rb +21 -21
  158. data/spec/unit/provider/package/msu_spec.rb +1 -1
  159. data/spec/unit/provider/route_spec.rb +21 -21
  160. data/spec/unit/provider/user/dscl_spec.rb +54 -57
  161. data/spec/unit/provider/user/linux_spec.rb +5 -5
  162. data/spec/unit/provider/user/pw_spec.rb +26 -22
  163. data/spec/unit/provider/user/windows_spec.rb +4 -4
  164. data/spec/unit/provider/user_spec.rb +19 -21
  165. data/spec/unit/provider_resolver_spec.rb +1 -0
  166. data/spec/unit/resource/chocolatey_package_spec.rb +12 -0
  167. data/spec/unit/resource/dnf_package_spec.rb +99 -0
  168. data/spec/unit/resource/remote_file_spec.rb +2 -2
  169. data/spec/unit/resource/yum_package_spec.rb +20 -0
  170. data/spec/unit/resource_reporter_spec.rb +24 -0
  171. data/spec/unit/resource_spec.rb +2 -0
  172. data/spec/unit/runner_spec.rb +1 -0
  173. data/tasks/bin/bundle-platform +1 -1
  174. data/tasks/gemfile_util.rb +2 -2
  175. data/tasks/templates/prerelease.md.erb +1 -10
  176. data/tasks/templates/release.md.erb +1 -9
  177. metadata +24 -5
  178. data/lib/chef/platform/handler_map.rb +0 -40
@@ -120,9 +120,10 @@ class Chef
120
120
  end
121
121
 
122
122
  def set_specific_recipes
123
- Chef::Config[:specific_recipes] =
124
- cli_arguments.map { |file| File.expand_path(file) } if
125
- cli_arguments.respond_to?(:map)
123
+ if cli_arguments.respond_to?(:map)
124
+ Chef::Config[:specific_recipes] =
125
+ cli_arguments.map { |file| File.expand_path(file) }
126
+ end
126
127
  end
127
128
 
128
129
  # Initialize and configure the logger.
@@ -342,7 +343,7 @@ class Chef
342
343
  message = "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
343
344
 
344
345
  cause = e.cause if e.respond_to?(:cause)
345
- while cause != nil
346
+ until cause.nil?
346
347
  message << "\n\n>>>> Caused by #{cause.class}: #{cause}\n#{cause.backtrace.join("\n")}"
347
348
  cause = cause.respond_to?(:cause) ? cause.cause : nil
348
349
  end
@@ -126,10 +126,12 @@ class Chef
126
126
  :password => @password,
127
127
  :dependencies => @dependencies
128
128
  )
129
- ::Win32::Service.configure(
130
- :service_name => @service_name,
131
- :delayed_start => @delayed_start
132
- ) unless @delayed_start.nil?
129
+ unless @delayed_start.nil?
130
+ ::Win32::Service.configure(
131
+ :service_name => @service_name,
132
+ :delayed_start => @delayed_start
133
+ )
134
+ end
133
135
  puts "Service '#{@service_name}' has successfully been installed."
134
136
  end
135
137
  when "status"
@@ -326,7 +326,7 @@ class Chef
326
326
  else
327
327
  relative << path[1]
328
328
  end
329
- relative = relative + file[:path].split("/")
329
+ relative += file[:path].split("/")
330
330
  file["url"] = ChefZero::RestBase.build_uri(request.base_uri, relative)
331
331
  end
332
332
  end
@@ -229,7 +229,7 @@ class Chef
229
229
  end
230
230
  end
231
231
 
232
- if old_value == :none || (old_value == nil && !old_entry.exists?)
232
+ if old_value == :none || (old_value.nil? && !old_entry.exists?)
233
233
  return [ [ :added, old_entry, new_entry, old_value, new_value ] ]
234
234
  elsif new_value == :none
235
235
  return [ [ :deleted, old_entry, new_entry, old_value, new_value ] ]
@@ -69,7 +69,14 @@ class Chef
69
69
  def exists?
70
70
  if @exists.nil?
71
71
  begin
72
- @exists = parent.children.any? { |child| child.api_child_name == api_child_name }
72
+ rest.get(api_path)
73
+ @exists = true
74
+ rescue Net::HTTPServerException => e
75
+ if e.response.code == "404"
76
+ @exists = false
77
+ else
78
+ raise
79
+ end
73
80
  rescue Chef::ChefFS::FileSystem::NotFoundError
74
81
  @exists = false
75
82
  end
@@ -113,7 +113,7 @@ class Chef
113
113
  Dir.mkdir(path, 0700)
114
114
  if Chef::Platform.windows?
115
115
  all_mask = Chef::ReservedNames::Win32::API::Security::GENERIC_ALL
116
- owner = Chef::ReservedNames::Win32::Security::SID.current_user
116
+ owner = Chef::ReservedNames::Win32::Security::SID.default_security_object_owner
117
117
  dacl = Chef::ReservedNames::Win32::Security::ACL.create([
118
118
  Chef::ReservedNames::Win32::Security::ACE.access_allowed(owner, all_mask),
119
119
  ])
@@ -38,7 +38,7 @@ class Chef
38
38
  if Chef::Platform.windows?
39
39
  read_mask = Chef::ReservedNames::Win32::API::Security::GENERIC_READ
40
40
  write_mask = Chef::ReservedNames::Win32::API::Security::GENERIC_WRITE
41
- owner = Chef::ReservedNames::Win32::Security::SID.current_user
41
+ owner = Chef::ReservedNames::Win32::Security::SID.default_security_object_owner
42
42
  dacl = Chef::ReservedNames::Win32::Security::ACL.create([
43
43
  Chef::ReservedNames::Win32::Security::ACE.access_allowed(owner, read_mask),
44
44
  Chef::ReservedNames::Win32::Security::ACE.access_allowed(owner, write_mask),
@@ -52,7 +52,7 @@ class Chef
52
52
  ignore_globs << line.strip unless line =~ COMMENTS_AND_WHITESPACE
53
53
  end
54
54
  else
55
- Chef::Log.debug("No chefignore file found at #@ignore_file no files will be ignored")
55
+ Chef::Log.debug("No chefignore file found at #{@ignore_file} no files will be ignored")
56
56
  end
57
57
  ignore_globs
58
58
  end
@@ -308,7 +308,7 @@ class Chef
308
308
  begin
309
309
  @metadata.from_file(file)
310
310
  rescue Chef::Exceptions::JSON::ParseError
311
- Chef::Log.error("Error evaluating metadata.rb for #@inferred_cookbook_name in " + file)
311
+ Chef::Log.error("Error evaluating metadata.rb for #{@inferred_cookbook_name} in " + file)
312
312
  raise
313
313
  end
314
314
  end
@@ -317,7 +317,7 @@ class Chef
317
317
  begin
318
318
  @metadata.from_json(IO.read(file))
319
319
  rescue Chef::Exceptions::JSON::ParseError
320
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #@inferred_cookbook_name in " + file)
320
+ Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in " + file)
321
321
  raise
322
322
  end
323
323
  end
@@ -336,7 +336,7 @@ class Chef
336
336
  # metadata contains a name key.
337
337
  @metadata.name(data["cookbook_name"]) unless data["metadata"].key?("name")
338
338
  rescue Chef::Exceptions::JSON::ParseError
339
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #@inferred_cookbook_name in " + file)
339
+ Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in " + file)
340
340
  raise
341
341
  end
342
342
  end
@@ -347,7 +347,7 @@ class Chef
347
347
  data = Chef::JSONCompat.parse(IO.read(uploaded_cookbook_version_file))
348
348
  @frozen = data["frozen?"]
349
349
  rescue Chef::Exceptions::JSON::ParseError
350
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #@inferred_cookbook_name in #{uploaded_cookbook_version_file}")
350
+ Chef::Log.error("Couldn't parse cookbook metadata JSON for #{@inferred_cookbook_name} in #{uploaded_cookbook_version_file}")
351
351
  raise
352
352
  end
353
353
  end
@@ -862,12 +862,12 @@ INVALID
862
862
  return if !options[:choice].is_a?(Array) || options[:choice].empty?
863
863
 
864
864
  if options[:default].is_a?(String) && options[:default] != ""
865
- raise ArgumentError, "Default must be one of your choice values!" if options[:choice].index(options[:default]) == nil
865
+ raise ArgumentError, "Default must be one of your choice values!" if options[:choice].index(options[:default]).nil?
866
866
  end
867
867
 
868
868
  if options[:default].is_a?(Array) && !options[:default].empty?
869
869
  options[:default].each do |val|
870
- raise ArgumentError, "Default values must be a subset of your choice values!" if options[:choice].index(val) == nil
870
+ raise ArgumentError, "Default values must be a subset of your choice values!" if options[:choice].index(val).nil?
871
871
  end
872
872
  end
873
873
  end
@@ -137,7 +137,7 @@ class Chef
137
137
  alias :key? :has_key?
138
138
 
139
139
  def each
140
- @cookbooks_by_name.keys.sort { |a, b| a.to_s <=> b.to_s }.each do |cname|
140
+ @cookbooks_by_name.keys.sort_by(&:to_s).each do |cname|
141
141
  yield(cname, @cookbooks_by_name[cname])
142
142
  end
143
143
  end
@@ -430,26 +430,33 @@ class Chef
430
430
  end
431
431
 
432
432
  def detect_unprocessed_resources
433
- # create a Set containing all resource+action combinations from
434
- # the Resource Collection
435
- collection_resources = Set.new
433
+ # create a Hash (for performance reasons, rather than an Array) containing all
434
+ # resource+action combinations from the Resource Collection
435
+ #
436
+ # We use the object ID instead of the resource itself in the Hash key because
437
+ # we currently allow users to create a property called "hash" which creates
438
+ # a #hash instance method on the resource. Ruby expects that to be a Fixnum,
439
+ # so bad things happen when adding an object to an Array or a Hash if it's not.
440
+ collection_resources = {}
436
441
  run_context.resource_collection.all_resources.each do |resource|
437
442
  Array(resource.action).each do |action|
438
- collection_resources.add([resource, action])
443
+ collection_resources[[resource.__id__, action]] = resource
439
444
  end
440
445
  end
441
446
 
442
- # Delete from the Set any resource+action combination we have
447
+ # Delete from the Hash any resource+action combination we have
443
448
  # already processed.
444
449
  all_resource_reports.each do |report|
445
- collection_resources.delete([report.resource, report.action])
450
+ collection_resources.delete([report.resource.__id__, report.action])
446
451
  end
447
452
 
448
- # The items remaining in the Set are unprocessed resource+actions,
453
+ # The items remaining in the Hash are unprocessed resource+actions,
449
454
  # so we'll create new resource reports for them which default to
450
455
  # a state of "unprocessed".
451
- collection_resources.each do |resource, action|
452
- add_resource_report(create_resource_report(resource, action))
456
+ collection_resources.each do |key, resource|
457
+ # The Hash key is an array of the Resource's object ID and the action.
458
+ # We need to pluck out the action.
459
+ add_resource_report(create_resource_report(resource, key[1]))
453
460
  end
454
461
  end
455
462
 
@@ -462,8 +469,10 @@ class Chef
462
469
  end
463
470
 
464
471
  def validate_data_collector_server_url!
465
- raise Chef::Exceptions::ConfigurationError,
466
- "Chef::Config[:data_collector][:server_url] is empty. Please supply a valid URL." if data_collector_server_url.empty?
472
+ if data_collector_server_url.empty?
473
+ raise Chef::Exceptions::ConfigurationError,
474
+ "Chef::Config[:data_collector][:server_url] is empty. Please supply a valid URL."
475
+ end
467
476
 
468
477
  begin
469
478
  uri = URI(data_collector_server_url)
@@ -471,8 +480,10 @@ class Chef
471
480
  raise Chef::Exceptions::ConfigurationError, "Chef::Config[:data_collector][:server_url] (#{data_collector_server_url}) is not a valid URI."
472
481
  end
473
482
 
474
- raise Chef::Exceptions::ConfigurationError,
475
- "Chef::Config[:data_collector][:server_url] (#{data_collector_server_url}) is a URI with no host. Please supply a valid URL." if uri.host.nil?
483
+ if uri.host.nil?
484
+ raise Chef::Exceptions::ConfigurationError,
485
+ "Chef::Config[:data_collector][:server_url] (#{data_collector_server_url}) is a URI with no host. Please supply a valid URL."
486
+ end
476
487
  end
477
488
  end
478
489
  end
@@ -82,12 +82,14 @@ class Chef
82
82
  "deprecations" => reporter_data[:deprecations],
83
83
  }
84
84
 
85
- message["error"] = {
86
- "class" => run_status.exception.class,
87
- "message" => run_status.exception.message,
88
- "backtrace" => run_status.exception.backtrace,
89
- "description" => reporter_data[:error_descriptions],
90
- } if run_status.exception
85
+ if run_status.exception
86
+ message["error"] = {
87
+ "class" => run_status.exception.class,
88
+ "message" => run_status.exception.message,
89
+ "backtrace" => run_status.exception.backtrace,
90
+ "description" => reporter_data[:error_descriptions],
91
+ }
92
+ end
91
93
 
92
94
  message
93
95
  end
@@ -76,7 +76,7 @@ class Chef
76
76
  def chef_server_organization
77
77
  return "unknown_organization" unless Chef::Config[:chef_server_url]
78
78
 
79
- Chef::Config[:chef_server_url].match(%r{/+organizations/+(\w+)}).nil? ? "unknown_organization" : $1
79
+ Chef::Config[:chef_server_url].match(%r{/+organizations/+([a-z0-9][a-z0-9_-]{0,254})}).nil? ? "unknown_organization" : $1
80
80
  end
81
81
 
82
82
  #
@@ -156,6 +156,26 @@ class Chef
156
156
  end
157
157
  end
158
158
 
159
+ class ChefPlatformMethods < Base
160
+ def id
161
+ 13
162
+ end
163
+
164
+ def target
165
+ "chef_platform_methods.html"
166
+ end
167
+ end
168
+
169
+ class RunCommand < Base
170
+ def id
171
+ 14
172
+ end
173
+
174
+ def target
175
+ "run_command.html"
176
+ end
177
+ end
178
+
159
179
  class ResourceCloning < Base
160
180
  def id
161
181
  3694
@@ -176,6 +196,16 @@ class Chef
176
196
  end
177
197
  end
178
198
 
199
+ class DnfPackageAllowDowngrade < Base
200
+ def id
201
+ 10
202
+ end
203
+
204
+ def target
205
+ "dnf_package_allow_downgrade.html"
206
+ end
207
+ end
208
+
179
209
  class Generic < Base
180
210
  def url
181
211
  "https://docs.chef.io/chef_deprecations_client.html"
@@ -257,8 +257,8 @@ class Chef
257
257
  def docker?(node = run_context.nil? ? nil : run_context.node)
258
258
  # Using "File.exist?('/.dockerinit') || File.exist?('/.dockerenv')" makes Travis sad,
259
259
  # and that makes us sad too.
260
- node && node[:virtualization] && node[:virtualization][:systems] &&
261
- node[:virtualization][:systems][:docker] && node[:virtualization][:systems][:docker] == "guest"
260
+ !!(node && node[:virtualization] && node[:virtualization][:systems] &&
261
+ node[:virtualization][:systems][:docker] && node[:virtualization][:systems][:docker] == "guest")
262
262
  end
263
263
 
264
264
  end
@@ -121,7 +121,7 @@ class Chef::EncryptedDataBagItem
121
121
  #
122
122
  def self.load(data_bag, name, secret = nil)
123
123
  raw_hash = Chef::DataBagItem.load(data_bag, name)
124
- secret = secret || self.load_secret
124
+ secret ||= self.load_secret
125
125
  self.new(raw_hash, secret)
126
126
  end
127
127
 
@@ -93,7 +93,7 @@ class Chef::EncryptedDataBagItem
93
93
  plaintext << openssl_decryptor.final
94
94
  rescue OpenSSL::Cipher::CipherError => e
95
95
  # if the key length is less than 255 characters, and it contains slashes, we think it may be a path.
96
- raise DecryptionFailure, "Error decrypting data bag value: '#{e.message}'. Most likely the provided key is incorrect. #{ (@key.length < 255 && @key.include?('/')) ? 'You may need to use --secret-file rather than --secret.' : '' }"
96
+ raise DecryptionFailure, "Error decrypting data bag value: '#{e.message}'. Most likely the provided key is incorrect. #{(@key.length < 255 && @key.include?('/')) ? 'You may need to use --secret-file rather than --secret.' : ''}"
97
97
  end
98
98
  end
99
99
 
@@ -144,7 +144,7 @@ class Chef::EncryptedDataBagItem
144
144
  plaintext << openssl_decryptor.final
145
145
  rescue OpenSSL::Cipher::CipherError => e
146
146
  # if the key length is less than 255 characters, and it contains slashes, we think it may be a path.
147
- raise DecryptionFailure, "Error decrypting data bag value: '#{e.message}'. Most likely the provided key is incorrect. #{ ( @key.length < 255 && @key.include?('/')) ? 'You may need to use --secret-file rather than --secret.' : '' }"
147
+ raise DecryptionFailure, "Error decrypting data bag value: '#{e.message}'. Most likely the provided key is incorrect. #{( @key.length < 255 && @key.include?('/')) ? 'You may need to use --secret-file rather than --secret.' : ''}"
148
148
  end
149
149
  end
150
150
 
@@ -171,7 +171,7 @@ class Chef
171
171
  unless params[:cookbook_version].nil?
172
172
  params[:cookbook_version].each do |index, cookbook_constraint_spec|
173
173
  unless cookbook_constraint_spec.nil? || cookbook_constraint_spec.size == 0
174
- valid = valid && update_cookbook_constraint_from_param(index, cookbook_constraint_spec)
174
+ valid &&= update_cookbook_constraint_from_param(index, cookbook_constraint_spec)
175
175
  end
176
176
  end
177
177
  end
@@ -76,10 +76,10 @@ class Chef
76
76
  class Group < RuntimeError; end
77
77
  class Link < RuntimeError; end
78
78
  class Mount < RuntimeError; end
79
- class Reboot < Exception; end
80
- class RebootPending < Exception; end
79
+ class Reboot < Exception; end # rubocop:disable Lint/InheritException
80
+ class RebootPending < Exception; end # rubocop:disable Lint/InheritException
81
81
  class RebootFailed < Mixlib::ShellOut::ShellCommandFailed; end
82
- class ClientUpgraded < Exception; end
82
+ class ClientUpgraded < Exception; end # rubocop:disable Lint/InheritException
83
83
  class PrivateKeyMissing < RuntimeError; end
84
84
  class CannotWritePrivateKey < RuntimeError; end
85
85
  class RoleNotFound < RuntimeError; end
@@ -159,7 +159,7 @@ class Chef
159
159
 
160
160
  # Thrown when Win32 API layer binds to non-existent Win32 function. Occurs
161
161
  # when older versions of Windows don't support newer Win32 API functions.
162
- class Win32APIFunctionNotImplemented < NotImplementedError; end
162
+ class Win32APIFunctionNotImplemented < NotImplementedError; end # rubocop:disable Lint/InheritException
163
163
  # Attempting to run windows code on a not-windows node
164
164
  class Win32NotWindows < RuntimeError; end
165
165
  class WindowsNotAdmin < RuntimeError; end
@@ -196,7 +196,7 @@ class Chef
196
196
  class InvalidVersionConstraint < ArgumentError; end
197
197
 
198
198
  # Version constraints are not allowed in chef-solo
199
- class IllegalVersionConstraint < NotImplementedError; end
199
+ class IllegalVersionConstraint < NotImplementedError; end # rubocop:disable Lint/InheritException
200
200
 
201
201
  class MetadataNotValid < StandardError; end
202
202
  class MetadataNotFound < StandardError
@@ -117,13 +117,13 @@ class Chef
117
117
  end
118
118
 
119
119
  def gid_from_resource(resource)
120
- return nil if resource == nil || resource.group.nil?
120
+ return nil if resource.nil? || resource.group.nil?
121
121
  if resource.group.kind_of?(String)
122
122
  diminished_radix_complement( Etc.getgrnam(resource.group).gid )
123
123
  elsif resource.group.kind_of?(Integer)
124
124
  resource.group
125
125
  else
126
- Chef::Log.error("The `group` parameter of the #@resource resource is set to an invalid value (#{resource.owner.inspect})")
126
+ Chef::Log.error("The `group` parameter of the #{@resource} resource is set to an invalid value (#{resource.owner.inspect})")
127
127
  raise ArgumentError, "cannot resolve #{resource.group.inspect} to gid, group must be a string or integer"
128
128
  end
129
129
  rescue ArgumentError
@@ -168,7 +168,7 @@ class Chef
168
168
  end
169
169
 
170
170
  def mode_from_resource(res)
171
- return nil if res == nil || res.mode.nil?
171
+ return nil if res.nil? || res.mode.nil?
172
172
  (res.mode.respond_to?(:oct) ? res.mode.oct : res.mode.to_i) & 007777
173
173
  end
174
174
 
@@ -264,13 +264,13 @@ class Chef
264
264
  end
265
265
 
266
266
  def uid_from_resource(resource)
267
- return nil if resource == nil || resource.owner.nil?
267
+ return nil if resource.nil? || resource.owner.nil?
268
268
  if resource.owner.kind_of?(String)
269
269
  diminished_radix_complement( Etc.getpwnam(resource.owner).uid )
270
270
  elsif resource.owner.kind_of?(Integer)
271
271
  resource.owner
272
272
  else
273
- Chef::Log.error("The `owner` parameter of the #@resource resource is set to an invalid value (#{resource.owner.inspect})")
273
+ Chef::Log.error("The `owner` parameter of the #{@resource} resource is set to an invalid value (#{resource.owner.inspect})")
274
274
  raise ArgumentError, "cannot resolve #{resource.owner.inspect} to uid, owner must be a string or integer"
275
275
  end
276
276
  rescue ArgumentError
@@ -48,7 +48,7 @@ class Chef
48
48
  display_section("Platform:", RUBY_PLATFORM, out)
49
49
  end
50
50
 
51
- def for_json()
51
+ def for_json
52
52
  {
53
53
  "title" => @title,
54
54
  "sections" => @sections,
@@ -111,7 +111,7 @@ class Chef
111
111
  # match no_proxy with a fuzzy matcher, rather than letting Net::HTTP
112
112
  # do it.
113
113
  http_client = http_client_builder.new(host, port, nil)
114
- http_client.proxy_port = nil if http_client.proxy_address == nil
114
+ http_client.proxy_port = nil if http_client.proxy_address.nil?
115
115
 
116
116
  if url.scheme == HTTPS
117
117
  configure_ssl(http_client)