chef 12.18.31-universal-mingw32 → 12.19.33-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -4
  3. data/README.md +12 -13
  4. data/VERSION +1 -1
  5. data/acceptance/Gemfile +4 -4
  6. data/acceptance/Gemfile.lock +70 -69
  7. data/chef-universal-mingw32.gemspec +2 -3
  8. data/chef.gemspec +6 -6
  9. data/lib/chef/api_client.rb +8 -10
  10. data/lib/chef/api_client_v1.rb +9 -11
  11. data/lib/chef/application/apply.rb +8 -10
  12. data/lib/chef/application/client.rb +1 -1
  13. data/lib/chef/application/exit_code.rb +3 -5
  14. data/lib/chef/application/knife.rb +2 -2
  15. data/lib/chef/application/windows_service.rb +29 -30
  16. data/lib/chef/application/windows_service_manager.rb +1 -1
  17. data/lib/chef/audit/audit_event_proxy.rb +2 -2
  18. data/lib/chef/audit/control_group_data.rb +1 -1
  19. data/lib/chef/chef_class.rb +1 -0
  20. data/lib/chef/chef_fs/chef_fs_data_store.rb +5 -7
  21. data/lib/chef/chef_fs/command_line.rb +15 -16
  22. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  23. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  24. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  25. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  26. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  27. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  28. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  29. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
  30. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  31. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
  32. data/lib/chef/chef_fs/file_pattern.rb +2 -2
  33. data/lib/chef/chef_fs/file_system.rb +1 -1
  34. data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +5 -6
  35. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
  36. data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
  37. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
  38. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
  39. data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
  40. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
  41. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +18 -24
  42. data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
  43. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
  44. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +10 -12
  45. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
  46. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
  47. data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
  48. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
  49. data/lib/chef/chef_fs/parallelizer.rb +9 -11
  50. data/lib/chef/cookbook/cookbook_version_loader.rb +25 -31
  51. data/lib/chef/cookbook/metadata.rb +26 -26
  52. data/lib/chef/cookbook/syntax_check.rb +1 -1
  53. data/lib/chef/cookbook_version.rb +3 -3
  54. data/lib/chef/data_bag.rb +1 -1
  55. data/lib/chef/data_bag_item.rb +3 -3
  56. data/lib/chef/data_collector.rb +3 -4
  57. data/lib/chef/decorator.rb +1 -1
  58. data/lib/chef/deprecated.rb +30 -0
  59. data/lib/chef/dsl/audit.rb +2 -2
  60. data/lib/chef/dsl/declare_resource.rb +1 -1
  61. data/lib/chef/dsl/platform_introspection.rb +29 -31
  62. data/lib/chef/dsl/reboot_pending.rb +1 -1
  63. data/lib/chef/dsl/resources.rb +6 -8
  64. data/lib/chef/encrypted_data_bag_item.rb +2 -2
  65. data/lib/chef/environment.rb +9 -11
  66. data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
  67. data/lib/chef/exceptions.rb +4 -1
  68. data/lib/chef/file_access_control/unix.rb +14 -14
  69. data/lib/chef/file_access_control/windows.rb +1 -1
  70. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
  71. data/lib/chef/formatters/error_mapper.rb +6 -6
  72. data/lib/chef/http/api_versions.rb +50 -0
  73. data/lib/chef/http/validate_content_length.rb +2 -2
  74. data/lib/chef/json_compat.rb +6 -10
  75. data/lib/chef/key.rb +5 -5
  76. data/lib/chef/knife.rb +4 -4
  77. data/lib/chef/knife/cookbook_site_install.rb +2 -2
  78. data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
  79. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  80. data/lib/chef/knife/core/status_presenter.rb +1 -1
  81. data/lib/chef/knife/core/ui.rb +19 -25
  82. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  83. data/lib/chef/knife/deps.rb +32 -34
  84. data/lib/chef/knife/help.rb +1 -1
  85. data/lib/chef/knife/list.rb +1 -1
  86. data/lib/chef/knife/search.rb +2 -2
  87. data/lib/chef/knife/ssh.rb +37 -27
  88. data/lib/chef/knife/ssl_check.rb +1 -1
  89. data/lib/chef/knife/user_delete.rb +1 -1
  90. data/lib/chef/mash.rb +1 -1
  91. data/lib/chef/mixin/command.rb +2 -2
  92. data/lib/chef/mixin/create_path.rb +3 -5
  93. data/lib/chef/mixin/from_file.rb +2 -2
  94. data/lib/chef/mixin/get_source_from_package.rb +2 -2
  95. data/lib/chef/mixin/notifying_block.rb +7 -9
  96. data/lib/chef/mixin/params_validate.rb +3 -3
  97. data/lib/chef/mixin/securable.rb +1 -1
  98. data/lib/chef/mixin/shell_out.rb +23 -3
  99. data/lib/chef/mixin/unformatter.rb +2 -2
  100. data/lib/chef/mixin/uris.rb +4 -6
  101. data/lib/chef/mixin/versioned_api.rb +69 -0
  102. data/lib/chef/mixin/which.rb +25 -8
  103. data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
  104. data/lib/chef/mixin/xml_escape.rb +3 -5
  105. data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
  106. data/lib/chef/node.rb +8 -8
  107. data/lib/chef/node/attribute.rb +4 -4
  108. data/lib/chef/node/common_api.rb +5 -7
  109. data/lib/chef/org.rb +10 -12
  110. data/lib/chef/platform/provider_mapping.rb +7 -7
  111. data/lib/chef/platform/query_helpers.rb +1 -1
  112. data/lib/chef/policy_builder/policyfile.rb +1 -0
  113. data/lib/chef/property.rb +31 -0
  114. data/lib/chef/provider/batch.rb +1 -1
  115. data/lib/chef/provider/breakpoint.rb +1 -1
  116. data/lib/chef/provider/cookbook_file.rb +3 -3
  117. data/lib/chef/provider/cron.rb +38 -38
  118. data/lib/chef/provider/deploy.rb +81 -81
  119. data/lib/chef/provider/deploy/revision.rb +3 -5
  120. data/lib/chef/provider/directory.rb +32 -32
  121. data/lib/chef/provider/dsc_resource.rb +22 -6
  122. data/lib/chef/provider/env.rb +28 -28
  123. data/lib/chef/provider/env/windows.rb +1 -1
  124. data/lib/chef/provider/erl_call.rb +13 -13
  125. data/lib/chef/provider/execute.rb +5 -2
  126. data/lib/chef/provider/file.rb +49 -51
  127. data/lib/chef/provider/git.rb +55 -55
  128. data/lib/chef/provider/http_request.rb +36 -36
  129. data/lib/chef/provider/launchd.rb +2 -2
  130. data/lib/chef/provider/link.rb +50 -50
  131. data/lib/chef/provider/log.rb +2 -2
  132. data/lib/chef/provider/mdadm.rb +25 -25
  133. data/lib/chef/provider/mount/aix.rb +2 -2
  134. data/lib/chef/provider/mount/mount.rb +2 -2
  135. data/lib/chef/provider/ohai.rb +1 -1
  136. data/lib/chef/provider/osx_profile.rb +23 -23
  137. data/lib/chef/provider/package.rb +74 -56
  138. data/lib/chef/provider/package/aix.rb +55 -52
  139. data/lib/chef/provider/package/apt.rb +15 -13
  140. data/lib/chef/provider/package/cab.rb +49 -20
  141. data/lib/chef/provider/package/chocolatey.rb +9 -10
  142. data/lib/chef/provider/package/dnf.rb +20 -18
  143. data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
  144. data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
  145. data/lib/chef/provider/package/dnf/version.rb +1 -1
  146. data/lib/chef/provider/package/dpkg.rb +8 -9
  147. data/lib/chef/provider/package/easy_install.rb +22 -22
  148. data/lib/chef/provider/package/freebsd/base.rb +10 -10
  149. data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
  150. data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
  151. data/lib/chef/provider/package/freebsd/port.rb +7 -7
  152. data/lib/chef/provider/package/homebrew.rb +11 -10
  153. data/lib/chef/provider/package/ips.rb +18 -23
  154. data/lib/chef/provider/package/macports.rb +23 -23
  155. data/lib/chef/provider/package/msu.rb +11 -11
  156. data/lib/chef/provider/package/openbsd.rb +25 -22
  157. data/lib/chef/provider/package/pacman.rb +16 -16
  158. data/lib/chef/provider/package/paludis.rb +26 -27
  159. data/lib/chef/provider/package/portage.rb +22 -22
  160. data/lib/chef/provider/package/powershell.rb +17 -17
  161. data/lib/chef/provider/package/rpm.rb +25 -25
  162. data/lib/chef/provider/package/rubygems.rb +60 -60
  163. data/lib/chef/provider/package/smartos.rb +16 -16
  164. data/lib/chef/provider/package/solaris.rb +44 -44
  165. data/lib/chef/provider/package/windows.rb +3 -3
  166. data/lib/chef/provider/package/windows/exe.rb +6 -6
  167. data/lib/chef/provider/package/windows/msi.rb +6 -6
  168. data/lib/chef/provider/package/yum.rb +318 -268
  169. data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
  170. data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
  171. data/lib/chef/provider/package/zypper.rb +11 -11
  172. data/lib/chef/provider/powershell_script.rb +15 -7
  173. data/lib/chef/provider/reboot.rb +10 -10
  174. data/lib/chef/provider/registry_key.rb +39 -39
  175. data/lib/chef/provider/remote_directory.rb +3 -3
  176. data/lib/chef/provider/remote_file.rb +3 -3
  177. data/lib/chef/provider/route.rb +1 -1
  178. data/lib/chef/provider/ruby_block.rb +3 -3
  179. data/lib/chef/provider/script.rb +42 -6
  180. data/lib/chef/provider/service.rb +49 -49
  181. data/lib/chef/provider/service/solaris.rb +1 -1
  182. data/lib/chef/provider/service/systemd.rb +1 -1
  183. data/lib/chef/provider/subversion.rb +39 -39
  184. data/lib/chef/provider/systemd_unit.rb +2 -0
  185. data/lib/chef/provider/template.rb +3 -3
  186. data/lib/chef/provider/user.rb +42 -42
  187. data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
  188. data/lib/chef/resource.rb +27 -16
  189. data/lib/chef/resource/apt_repository.rb +0 -1
  190. data/lib/chef/resource/chef_gem.rb +1 -1
  191. data/lib/chef/resource/dnf_package.rb +6 -3
  192. data/lib/chef/resource/dsc_resource.rb +9 -1
  193. data/lib/chef/resource/execute.rb +70 -6
  194. data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
  195. data/lib/chef/resource/freebsd_package.rb +1 -1
  196. data/lib/chef/resource/gem_package.rb +1 -1
  197. data/lib/chef/resource/launchd.rb +13 -1
  198. data/lib/chef/resource/package.rb +2 -2
  199. data/lib/chef/resource/registry_key.rb +1 -1
  200. data/lib/chef/resource/yum_package.rb +12 -3
  201. data/lib/chef/resource/yum_repository.rb +0 -1
  202. data/lib/chef/resource_collection/resource_collection_serialization.rb +3 -3
  203. data/lib/chef/resource_collection/resource_set.rb +2 -2
  204. data/lib/chef/resource_reporter.rb +1 -1
  205. data/lib/chef/run_context.rb +3 -3
  206. data/lib/chef/run_list/run_list_item.rb +1 -1
  207. data/lib/chef/run_list/versioned_recipe_list.rb +6 -6
  208. data/lib/chef/server_api.rb +2 -0
  209. data/lib/chef/server_api_versions.rb +40 -0
  210. data/lib/chef/shell.rb +1 -1
  211. data/lib/chef/shell/ext.rb +3 -3
  212. data/lib/chef/shell/shell_session.rb +1 -1
  213. data/lib/chef/user.rb +9 -11
  214. data/lib/chef/user_v1.rb +9 -11
  215. data/lib/chef/util/diff.rb +1 -1
  216. data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
  217. data/lib/chef/util/selinux.rb +1 -1
  218. data/lib/chef/util/windows/net_group.rb +18 -30
  219. data/lib/chef/util/windows/net_use.rb +7 -11
  220. data/lib/chef/util/windows/net_user.rb +11 -17
  221. data/lib/chef/util/windows/volume.rb +9 -15
  222. data/lib/chef/version.rb +1 -1
  223. data/lib/chef/version_class.rb +1 -1
  224. data/lib/chef/win32/api.rb +4 -6
  225. data/lib/chef/win32/api/file.rb +25 -31
  226. data/lib/chef/win32/api/installer.rb +2 -2
  227. data/lib/chef/win32/file.rb +4 -6
  228. data/lib/chef/win32/registry.rb +9 -9
  229. data/lib/chef/win32/security.rb +2 -2
  230. data/lib/chef/win32/security/acl.rb +2 -2
  231. data/lib/chef/win32/unicode.rb +2 -2
  232. data/lib/chef/win32/version.rb +1 -1
  233. data/spec/data/prefer_metadata_json/metadata.json +51 -0
  234. data/spec/data/prefer_metadata_json/metadata.rb +6 -0
  235. data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
  236. data/spec/functional/knife/ssh_spec.rb +5 -5
  237. data/spec/functional/resource/batch_spec.rb +5 -1
  238. data/spec/functional/resource/dsc_script_spec.rb +2 -4
  239. data/spec/functional/resource/execute_spec.rb +17 -0
  240. data/spec/functional/resource/user/dscl_spec.rb +2 -4
  241. data/spec/integration/client/client_spec.rb +33 -0
  242. data/spec/integration/recipes/recipe_dsl_spec.rb +58 -58
  243. data/spec/spec_helper.rb +4 -0
  244. data/spec/support/chef_helpers.rb +5 -7
  245. data/spec/support/platform_helpers.rb +6 -0
  246. data/spec/support/platforms/prof/gc.rb +4 -6
  247. data/spec/support/shared/context/client.rb +1 -1
  248. data/spec/support/shared/functional/execute_resource.rb +150 -0
  249. data/spec/support/shared/functional/windows_script.rb +74 -4
  250. data/spec/support/shared/unit/execute_resource.rb +37 -0
  251. data/spec/support/shared/unit/provider/file.rb +10 -0
  252. data/spec/unit/cookbook/cookbook_version_loader_spec.rb +9 -0
  253. data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
  254. data/spec/unit/http/api_versions_spec.rb +69 -0
  255. data/spec/unit/knife/ssh_spec.rb +34 -36
  256. data/spec/unit/mixin/versioned_api_spec.rb +107 -0
  257. data/spec/unit/mixin/which.rb +160 -0
  258. data/spec/unit/platform_spec.rb +28 -1
  259. data/spec/unit/provider/deploy_spec.rb +1 -1
  260. data/spec/unit/provider/directory_spec.rb +10 -0
  261. data/spec/unit/provider/dsc_resource_spec.rb +175 -0
  262. data/spec/unit/provider/execute_spec.rb +0 -1
  263. data/spec/unit/provider/launchd_spec.rb +2 -2
  264. data/spec/unit/provider/package/aix_spec.rb +22 -22
  265. data/spec/unit/provider/package/apt_spec.rb +27 -27
  266. data/spec/unit/provider/package/cab_spec.rb +59 -5
  267. data/spec/unit/provider/package/dnf/python_helper_spec.rb +29 -0
  268. data/spec/unit/provider/package/dpkg_spec.rb +16 -16
  269. data/spec/unit/provider/package/easy_install_spec.rb +18 -18
  270. data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
  271. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  272. data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
  273. data/spec/unit/provider/package/homebrew_spec.rb +9 -9
  274. data/spec/unit/provider/package/ips_spec.rb +37 -31
  275. data/spec/unit/provider/package/macports_spec.rb +10 -10
  276. data/spec/unit/provider/package/openbsd_spec.rb +10 -10
  277. data/spec/unit/provider/package/pacman_spec.rb +6 -6
  278. data/spec/unit/provider/package/paludis_spec.rb +7 -7
  279. data/spec/unit/provider/package/portage_spec.rb +6 -7
  280. data/spec/unit/provider/package/rpm_spec.rb +23 -23
  281. data/spec/unit/provider/package/rubygems_spec.rb +38 -38
  282. data/spec/unit/provider/package/solaris_spec.rb +15 -15
  283. data/spec/unit/provider/package/windows_spec.rb +2 -1
  284. data/spec/unit/provider/package/yum_spec.rb +51 -43
  285. data/spec/unit/provider/package/zypper_spec.rb +34 -34
  286. data/spec/unit/provider/package_spec.rb +8 -0
  287. data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
  288. data/spec/unit/provider/route_spec.rb +7 -1
  289. data/spec/unit/provider/script_spec.rb +49 -6
  290. data/spec/unit/resource/dsc_resource_spec.rb +6 -0
  291. data/spec/unit/resource/execute_spec.rb +214 -0
  292. data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
  293. data/spec/unit/resource/freebsd_package_spec.rb +2 -2
  294. data/spec/unit/resource/package_spec.rb +5 -0
  295. data/spec/unit/resource/yum_package_spec.rb +42 -1
  296. data/spec/unit/resource_reporter_spec.rb +1 -1
  297. data/spec/unit/resource_spec.rb +18 -0
  298. data/spec/unit/server_api_versions_spec.rb +44 -0
  299. data/spec/unit/util/selinux_spec.rb +3 -14
  300. data/spec/unit/win32/error_spec.rb +67 -0
  301. data/spec/unit/win32/security_spec.rb +66 -0
  302. data/tasks/changelog.rb +1 -1
  303. data/tasks/dependencies.rb +20 -4
  304. metadata +39 -18
  305. data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
@@ -65,22 +65,18 @@ class Chef
65
65
  # Prints a message to stdout. Aliased as +info+ for compatibility with
66
66
  # the logger API.
67
67
  def msg(message)
68
- begin
69
- stdout.puts message
70
- rescue Errno::EPIPE => e
71
- raise e if @config[:verbosity] >= 2
72
- exit 0
73
- end
68
+ stdout.puts message
69
+ rescue Errno::EPIPE => e
70
+ raise e if @config[:verbosity] >= 2
71
+ exit 0
74
72
  end
75
73
 
76
74
  # Prints a msg to stderr. Used for info, warn, error, and fatal.
77
75
  def log(message)
78
- begin
79
- stderr.puts message
80
- rescue Errno::EPIPE => e
81
- raise e if @config[:verbosity] >= 2
82
- exit 0
83
- end
76
+ stderr.puts message
77
+ rescue Errno::EPIPE => e
78
+ raise e if @config[:verbosity] >= 2
79
+ exit 0
84
80
  end
85
81
 
86
82
  alias :info :log
@@ -155,12 +151,10 @@ class Chef
155
151
  end
156
152
 
157
153
  def pretty_print(data)
158
- begin
159
- stdout.puts data
160
- rescue Errno::EPIPE => e
161
- raise e if @config[:verbosity] >= 2
162
- exit 0
163
- end
154
+ stdout.puts data
155
+ rescue Errno::EPIPE => e
156
+ raise e if @config[:verbosity] >= 2
157
+ exit 0
164
158
  end
165
159
 
166
160
  # Hash -> Hash
@@ -215,9 +209,9 @@ class Chef
215
209
  output_parsed_again = Chef::JSONCompat.parse(Chef::JSONCompat.to_json(output))
216
210
  if object_parsed_again != output_parsed_again
217
211
  output.save
218
- self.msg("Saved #{output}")
212
+ msg("Saved #{output}")
219
213
  else
220
- self.msg("Object unchanged, not saving")
214
+ msg("Object unchanged, not saving")
221
215
  end
222
216
  output(format_for_display(object)) if config[:print_after]
223
217
  end
@@ -247,19 +241,19 @@ class Chef
247
241
  when "Y", "y"
248
242
  true
249
243
  when "N", "n"
250
- self.msg("You said no, so I'm done here.")
244
+ msg("You said no, so I'm done here.")
251
245
  false
252
246
  when ""
253
247
  unless default_choice.nil?
254
248
  default_choice
255
249
  else
256
- self.msg("I have no idea what to do with '#{answer}'")
257
- self.msg("Just say Y or N, please.")
250
+ msg("I have no idea what to do with '#{answer}'")
251
+ msg("Just say Y or N, please.")
258
252
  confirm_without_exit(question, append_instructions, default_choice)
259
253
  end
260
254
  else
261
- self.msg("I have no idea what to do with '#{answer}'")
262
- self.msg("Just say Y or N, please.")
255
+ msg("I have no idea what to do with '#{answer}'")
256
+ msg("Just say Y or N, please.")
263
257
  confirm_without_exit(question, append_instructions, default_choice)
264
258
  end
265
259
  end
@@ -114,7 +114,7 @@ class Chef
114
114
  # Certain situations (show and bootstrap) don't need a --encrypt flag to use the config file secret
115
115
  return true
116
116
  end
117
- return false
117
+ false
118
118
  end
119
119
 
120
120
  def has_cl_secret?
@@ -72,49 +72,47 @@ class Chef
72
72
  end
73
73
 
74
74
  def get_dependencies(entry)
75
- begin
76
- if entry.parent && entry.parent.path == "/cookbooks"
77
- return entry.chef_object.metadata.dependencies.keys.map { |cookbook| "/cookbooks/#{cookbook}" }
75
+ if entry.parent && entry.parent.path == "/cookbooks"
76
+ return entry.chef_object.metadata.dependencies.keys.map { |cookbook| "/cookbooks/#{cookbook}" }
78
77
 
79
- elsif entry.parent && entry.parent.path == "/nodes"
80
- node = Chef::JSONCompat.parse(entry.read)
81
- result = []
82
- if node["chef_environment"] && node["chef_environment"] != "_default"
83
- result << "/environments/#{node['chef_environment']}.json"
84
- end
85
- if node["run_list"]
86
- result += dependencies_from_runlist(node["run_list"])
87
- end
88
- result
78
+ elsif entry.parent && entry.parent.path == "/nodes"
79
+ node = Chef::JSONCompat.parse(entry.read)
80
+ result = []
81
+ if node["chef_environment"] && node["chef_environment"] != "_default"
82
+ result << "/environments/#{node['chef_environment']}.json"
83
+ end
84
+ if node["run_list"]
85
+ result += dependencies_from_runlist(node["run_list"])
86
+ end
87
+ result
89
88
 
90
- elsif entry.parent && entry.parent.path == "/roles"
91
- role = Chef::JSONCompat.parse(entry.read)
92
- result = []
93
- if role["run_list"]
94
- dependencies_from_runlist(role["run_list"]).each do |dependency|
95
- result << dependency if !result.include?(dependency)
96
- end
89
+ elsif entry.parent && entry.parent.path == "/roles"
90
+ role = Chef::JSONCompat.parse(entry.read)
91
+ result = []
92
+ if role["run_list"]
93
+ dependencies_from_runlist(role["run_list"]).each do |dependency|
94
+ result << dependency if !result.include?(dependency)
97
95
  end
98
- if role["env_run_lists"]
99
- role["env_run_lists"].each_pair do |env, run_list|
100
- dependencies_from_runlist(run_list).each do |dependency|
101
- result << dependency if !result.include?(dependency)
102
- end
96
+ end
97
+ if role["env_run_lists"]
98
+ role["env_run_lists"].each_pair do |env, run_list|
99
+ dependencies_from_runlist(run_list).each do |dependency|
100
+ result << dependency if !result.include?(dependency)
103
101
  end
104
102
  end
105
- result
103
+ end
104
+ result
106
105
 
107
- elsif !entry.exists?
108
- raise Chef::ChefFS::FileSystem::NotFoundError.new(entry)
106
+ elsif !entry.exists?
107
+ raise Chef::ChefFS::FileSystem::NotFoundError.new(entry)
109
108
 
110
- else
111
- []
112
- end
113
- rescue Chef::ChefFS::FileSystem::NotFoundError => e
114
- ui.error "#{format_path(e.entry)}: No such file or directory"
115
- self.exit_code = 2
109
+ else
116
110
  []
117
111
  end
112
+ rescue Chef::ChefFS::FileSystem::NotFoundError => e
113
+ ui.error "#{format_path(e.entry)}: No such file or directory"
114
+ self.exit_code = 2
115
+ []
118
116
  end
119
117
 
120
118
  def dependencies_from_runlist(run_list)
@@ -90,7 +90,7 @@ MOAR_HELP
90
90
  def find_manpage_path(topic)
91
91
  if ::File.exists?(::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT))
92
92
  # If we've provided the man page in the gem, give that
93
- return ::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT)
93
+ ::File.expand_path("../distro/common/man/man1/#{topic}.1", CHEF_ROOT)
94
94
  else
95
95
  # Otherwise, we'll just be using MANPATH
96
96
  topic
@@ -97,7 +97,7 @@ class Chef
97
97
  print_results(children.map { |result| maybe_add_slash(result.display_name, result.dir?) }.sort, "")
98
98
  end
99
99
 
100
- exit self.exit_code if self.exit_code
100
+ exit exit_code if exit_code
101
101
  end
102
102
 
103
103
  def add_dir_result(result)
@@ -183,7 +183,7 @@ class Chef
183
183
  return_id, attr_path = f.split("=")
184
184
  final_filter[return_id.to_sym] = attr_path.split(".")
185
185
  end
186
- return final_filter
186
+ final_filter
187
187
  end
188
188
 
189
189
  def create_result_filter_from_attributes(filter_array)
@@ -193,7 +193,7 @@ class Chef
193
193
  end
194
194
  # adding magic filter so we can actually pull the name as before
195
195
  final_filter["__display_name"] = [ "name" ]
196
- return final_filter
196
+ final_filter
197
197
  end
198
198
 
199
199
  end
@@ -26,7 +26,6 @@ class Chef
26
26
  deps do
27
27
  require "net/ssh"
28
28
  require "net/ssh/multi"
29
- require "chef/monkey_patches/net-ssh-multi"
30
29
  require "readline"
31
30
  require "chef/exceptions"
32
31
  require "chef/search/query"
@@ -166,10 +165,10 @@ class Chef
166
165
  def configure_session
167
166
  list = config[:manual] ? @name_args[0].split(" ") : search_nodes
168
167
  if list.length == 0
169
- if @action_nodes.length == 0
168
+ if @search_count == 0
170
169
  ui.fatal("No nodes returned from search")
171
170
  else
172
- ui.fatal("#{@action_nodes.length} #{@action_nodes.length > 1 ? "nodes" : "node"} found, " +
171
+ ui.fatal("#{@search_count} #{@search_count > 1 ? "nodes" : "node"} found, " +
173
172
  "but does not have the required attribute to establish the connection. " +
174
173
  "Try setting another attribute to open the connection using --attribute.")
175
174
  end
@@ -184,41 +183,56 @@ class Chef
184
183
  # 2) configuration file
185
184
  # 3) cloud attribute
186
185
  # 4) fqdn
187
- if config[:attribute]
188
- Chef::Log.debug("Using node attribute '#{config[:attribute]}' as the ssh target")
189
- attribute = config[:attribute]
186
+ if node["config"]
187
+ Chef::Log.debug("Using node attribute '#{config[:attribute]}' as the ssh target: #{node["config"]}")
188
+ node["config"]
190
189
  elsif Chef::Config[:knife][:ssh_attribute]
191
- Chef::Log.debug("Using node attribute #{Chef::Config[:knife][:ssh_attribute]}")
192
- attribute = Chef::Config[:knife][:ssh_attribute]
193
- elsif node[:cloud] &&
194
- node[:cloud][:public_hostname] &&
195
- !node[:cloud][:public_hostname].empty?
196
- Chef::Log.debug("Using node attribute 'cloud[:public_hostname]' automatically as the ssh target")
197
- attribute = "cloud.public_hostname"
190
+ Chef::Log.debug("Using node attribute #{Chef::Config[:knife][:ssh_attribute]}: #{node["knife_config"]}")
191
+ node["knife_config"]
192
+ elsif node["cloud"] &&
193
+ node["cloud"]["public_hostname"] &&
194
+ !node["cloud"]["public_hostname"].empty?
195
+ Chef::Log.debug("Using node attribute 'cloud[:public_hostname]' automatically as the ssh target: #{node["cloud"]["public_hostname"]}")
196
+ node["cloud"]["public_hostname"]
198
197
  else
199
198
  # falling back to default of fqdn
200
- Chef::Log.debug("Using node attribute 'fqdn' as the ssh target")
201
- attribute = "fqdn"
199
+ Chef::Log.debug("Using node attribute 'fqdn' as the ssh target: #{node["fqdn"]}")
200
+ node["fqdn"]
202
201
  end
203
- attribute
204
202
  end
205
203
 
206
204
  def search_nodes
207
205
  list = Array.new
208
206
  query = Chef::Search::Query.new
209
- @action_nodes = query.search(:node, @name_args[0])[0]
210
- @action_nodes.each do |item|
207
+ required_attributes = { fqdn: ["fqdn"], cloud: ["cloud"] }
208
+
209
+ separator = ui.presenter.attribute_field_separator
210
+
211
+ # if we've set an attribute to use on the command line
212
+ if config[:attribute]
213
+ required_attributes[:config] = config[:attribute].split(separator)
214
+ end
215
+
216
+ # if we've configured an attribute in our config
217
+ if Chef::Config[:knife][:ssh_attribute]
218
+ required_attributes[:knife_config] = Chef::Config[:knife][:ssh_attribute].split(separator)
219
+ end
220
+
221
+ @search_count = 0
222
+ query.search(:node, @name_args[0], filter_result: required_attributes) do |item|
223
+ @search_count += 1
211
224
  # we should skip the loop to next iteration if the item
212
225
  # returned by the search is nil
213
226
  next if item.nil?
214
227
  # next if we couldn't find the specified attribute in the
215
228
  # returned node object
216
- host = extract_nested_value(item, get_ssh_attribute(item))
229
+ host = get_ssh_attribute(item)
217
230
  next if host.nil?
218
231
  ssh_port = item[:cloud].nil? ? nil : item[:cloud][:public_ssh_port]
219
232
  srv = [host, ssh_port]
220
233
  list.push(srv)
221
234
  end
235
+
222
236
  list
223
237
  end
224
238
 
@@ -232,7 +246,7 @@ class Chef
232
246
  # @param user [String] Optional username for this session.
233
247
  # @return [Hash<Symbol, Object>]
234
248
  def session_options(host, port, user = nil)
235
- ssh_config = Net::SSH.configuration_for(host)
249
+ ssh_config = Net::SSH.configuration_for(host, true)
236
250
  {}.tap do |opts|
237
251
  # Chef::Config[:knife][:ssh_user] is parsed in #configure_user and written to config[:ssh_user]
238
252
  opts[:user] = user || config[:ssh_user] || ssh_config[:user]
@@ -309,9 +323,9 @@ class Chef
309
323
  subsession ||= session
310
324
  command = fixup_sudo(command)
311
325
  command.force_encoding("binary") if command.respond_to?(:force_encoding)
312
- subsession.open_channel do |ch|
313
- ch.request_pty
314
- ch.exec command do |ch, success|
326
+ subsession.open_channel do |chan|
327
+ chan.request_pty
328
+ chan.exec command do |ch, success|
315
329
  raise ArgumentError, "Cannot execute #{command}" unless success
316
330
  ch.on_data do |ichannel, data|
317
331
  print_data(ichannel[:host], data)
@@ -532,10 +546,6 @@ class Chef
532
546
  config[:ssh_identity_file] = get_stripped_unfrozen_value(config[:ssh_identity_file] || config[:identity_file] || Chef::Config[:knife][:ssh_identity_file])
533
547
  end
534
548
 
535
- def extract_nested_value(data_structure, path_spec)
536
- ui.presenter.extract_nested_value(data_structure, path_spec)
537
- end
538
-
539
549
  def run
540
550
  @longest = 0
541
551
 
@@ -276,7 +276,7 @@ ADVICE
276
276
  rescue OpenSSL::X509::StoreError => e
277
277
  return e.message
278
278
  end
279
- return nil
279
+ nil
280
280
  end
281
281
  end
282
282
  end
@@ -60,7 +60,7 @@ EOF
60
60
  end
61
61
 
62
62
  output(format_for_display(object)) if config[:print_after]
63
- self.msg("Deleted #{user_name}")
63
+ msg("Deleted #{user_name}")
64
64
  end
65
65
 
66
66
  def run
@@ -149,7 +149,7 @@ class Mash < Hash
149
149
  #
150
150
  # @return [Mash] A new mash with the hash values merged in.
151
151
  def merge(hash)
152
- self.dup.update(hash)
152
+ dup.update(hash)
153
153
  end
154
154
 
155
155
  # @param key<Object>
@@ -103,7 +103,7 @@ class Chef
103
103
  command_output << "STDERR: #{stderr}"
104
104
  handle_command_failures(status, command_output, args)
105
105
 
106
- return status, stdout, stderr
106
+ [status, stdout, stderr]
107
107
  end
108
108
 
109
109
  def output_of_command(command, args)
@@ -141,7 +141,7 @@ class Chef
141
141
  Chef::Log.debug("Ran #{command} returned #{status.exitstatus}")
142
142
  end
143
143
 
144
- return status, stdout_string, stderr_string
144
+ [status, stdout_string, stderr_string]
145
145
  end
146
146
 
147
147
  def handle_command_failures(status, command_output, opts = {})
@@ -53,7 +53,6 @@ class Chef
53
53
  private
54
54
 
55
55
  def create_dir(path)
56
- begin
57
56
  # When doing multithreaded downloads into the file cache, the following
58
57
  # interleaving raises an error here:
59
58
  #
@@ -62,10 +61,9 @@ class Chef
62
61
  # File.directory?(create_path) <- false
63
62
  # Dir.mkdir(create_path)
64
63
  # Dir.mkdir(create_path) <- raises Errno::EEXIST
65
- Chef::Log.debug("Creating directory #{path}")
66
- Dir.mkdir(path)
67
- rescue Errno::EEXIST
68
- end
64
+ Chef::Log.debug("Creating directory #{path}")
65
+ Dir.mkdir(path)
66
+ rescue Errno::EEXIST
69
67
  end
70
68
 
71
69
  end
@@ -27,7 +27,7 @@ class Chef
27
27
  # Raises an IOError if the file cannot be found, or is not readable.
28
28
  def from_file(filename)
29
29
  if File.exists?(filename) && File.readable?(filename)
30
- self.instance_eval(IO.read(filename), filename, 1)
30
+ instance_eval(IO.read(filename), filename, 1)
31
31
  else
32
32
  raise IOError, "Cannot open or read #{filename}!"
33
33
  end
@@ -39,7 +39,7 @@ class Chef
39
39
  # Raises an IOError if the file cannot be found, or is not readable.
40
40
  def class_from_file(filename)
41
41
  if File.exists?(filename) && File.readable?(filename)
42
- self.class_eval(IO.read(filename), filename, 1)
42
+ class_eval(IO.read(filename), filename, 1)
43
43
  else
44
44
  raise IOError, "Cannot open or read #{filename}!"
45
45
  end
@@ -37,9 +37,9 @@ class Chef
37
37
  return if new_resource.package_name.is_a?(Array)
38
38
  # if we're passed something that looks like a filesystem path, with no source, use it
39
39
  # - require at least one '/' in the path to avoid gem_package "foo" breaking if a file named 'foo' exists in the cwd
40
- if new_resource.source.nil? && new_resource.package_name.match(/#{::File::SEPARATOR}/) && ::File.exists?(new_resource.package_name)
40
+ if new_resource.source.nil? && new_resource.package_name.match(/#{::File::SEPARATOR}/) && ::File.exist?(new_resource.package_name)
41
41
  Chef::Log.debug("No package source specified, but #{new_resource.package_name} exists on the filesystem, copying to package source")
42
- new_resource.source(@new_resource.package_name)
42
+ new_resource.source(new_resource.package_name)
43
43
  end
44
44
  end
45
45
  end
@@ -20,15 +20,13 @@ class Chef
20
20
  module NotifyingBlock
21
21
 
22
22
  def notifying_block(&block)
23
- begin
24
- subcontext = subcontext_block(&block)
25
- Chef::Runner.new(subcontext).converge
26
- ensure
27
- # recipes don't have a new_resource
28
- if respond_to?(:new_resource)
29
- if subcontext && subcontext.resource_collection.any?(&:updated?)
30
- new_resource.updated_by_last_action(true)
31
- end
23
+ subcontext = subcontext_block(&block)
24
+ Chef::Runner.new(subcontext).converge
25
+ ensure
26
+ # recipes don't have a new_resource
27
+ if respond_to?(:new_resource)
28
+ if subcontext && subcontext.resource_collection.any?(&:updated?)
29
+ new_resource.updated_by_last_action(true)
32
30
  end
33
31
  end
34
32
  end