chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-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 (298) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +12 -1
  3. data/lib/chef/api_client.rb +130 -26
  4. data/lib/chef/application.rb +0 -1
  5. data/lib/chef/application/client.rb +8 -19
  6. data/lib/chef/audit/audit_reporter.rb +12 -7
  7. data/lib/chef/audit/logger.rb +36 -0
  8. data/lib/chef/audit/runner.rb +4 -2
  9. data/lib/chef/chef_class.rb +62 -11
  10. data/lib/chef/client.rb +587 -207
  11. data/lib/chef/config.rb +0 -1
  12. data/lib/chef/dsl/recipe.rb +45 -56
  13. data/lib/chef/dsl/resources.rb +3 -2
  14. data/lib/chef/event_dispatch/base.rb +7 -2
  15. data/lib/chef/exceptions.rb +4 -1
  16. data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
  17. data/lib/chef/formatters/doc.rb +15 -7
  18. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
  19. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
  20. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
  21. data/lib/chef/http/authenticator.rb +7 -2
  22. data/lib/chef/knife.rb +16 -4
  23. data/lib/chef/knife/client_create.rb +55 -31
  24. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  25. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  26. data/lib/chef/knife/osc_user_create.rb +97 -0
  27. data/lib/chef/knife/osc_user_delete.rb +51 -0
  28. data/lib/chef/knife/osc_user_edit.rb +58 -0
  29. data/lib/chef/knife/osc_user_list.rb +47 -0
  30. data/lib/chef/knife/osc_user_reregister.rb +64 -0
  31. data/lib/chef/knife/osc_user_show.rb +54 -0
  32. data/lib/chef/knife/user_create.rb +95 -36
  33. data/lib/chef/knife/user_delete.rb +52 -2
  34. data/lib/chef/knife/user_edit.rb +37 -7
  35. data/lib/chef/knife/user_list.rb +3 -0
  36. data/lib/chef/knife/user_reregister.rb +39 -8
  37. data/lib/chef/knife/user_show.rb +30 -1
  38. data/lib/chef/mixin/api_version_request_handling.rb +66 -0
  39. data/lib/chef/mixin/convert_to_class_name.rb +10 -4
  40. data/lib/chef/mixin/deprecation.rb +24 -0
  41. data/lib/chef/mixin/powershell_out.rb +98 -0
  42. data/lib/chef/mixin/provides.rb +5 -18
  43. data/lib/chef/mixin/uris.rb +11 -0
  44. data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
  45. data/lib/chef/mixin/windows_env_helper.rb +11 -2
  46. data/lib/chef/node_map.rb +130 -75
  47. data/lib/chef/osc_user.rb +194 -0
  48. data/lib/chef/platform/provider_mapping.rb +2 -269
  49. data/lib/chef/platform/provider_priority_map.rb +6 -69
  50. data/lib/chef/platform/query_helpers.rb +5 -0
  51. data/lib/chef/platform/resource_priority_map.rb +12 -15
  52. data/lib/chef/policy_builder/policyfile.rb +1 -0
  53. data/lib/chef/provider.rb +19 -0
  54. data/lib/chef/provider/directory.rb +3 -0
  55. data/lib/chef/provider/dsc_resource.rb +8 -1
  56. data/lib/chef/provider/file.rb +1 -0
  57. data/lib/chef/provider/group/aix.rb +1 -0
  58. data/lib/chef/provider/group/dscl.rb +1 -1
  59. data/lib/chef/provider/group/gpasswd.rb +1 -0
  60. data/lib/chef/provider/group/groupmod.rb +1 -1
  61. data/lib/chef/provider/group/pw.rb +1 -0
  62. data/lib/chef/provider/group/suse.rb +2 -0
  63. data/lib/chef/provider/group/usermod.rb +2 -1
  64. data/lib/chef/provider/group/windows.rb +1 -1
  65. data/lib/chef/provider/ifconfig.rb +2 -0
  66. data/lib/chef/provider/ifconfig/aix.rb +1 -0
  67. data/lib/chef/provider/ifconfig/debian.rb +2 -0
  68. data/lib/chef/provider/ifconfig/redhat.rb +1 -0
  69. data/lib/chef/provider/lwrp_base.rb +4 -0
  70. data/lib/chef/provider/mount.rb +0 -1
  71. data/lib/chef/provider/mount/aix.rb +1 -0
  72. data/lib/chef/provider/mount/mount.rb +2 -0
  73. data/lib/chef/provider/mount/solaris.rb +2 -0
  74. data/lib/chef/provider/package.rb +55 -0
  75. data/lib/chef/provider/package/aix.rb +7 -7
  76. data/lib/chef/provider/package/apt.rb +3 -3
  77. data/lib/chef/provider/package/dpkg.rb +4 -4
  78. data/lib/chef/provider/package/easy_install.rb +5 -5
  79. data/lib/chef/provider/package/freebsd/base.rb +2 -2
  80. data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
  81. data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
  82. data/lib/chef/provider/package/freebsd/port.rb +4 -4
  83. data/lib/chef/provider/package/homebrew.rb +2 -2
  84. data/lib/chef/provider/package/ips.rb +4 -4
  85. data/lib/chef/provider/package/macports.rb +5 -6
  86. data/lib/chef/provider/package/openbsd.rb +4 -5
  87. data/lib/chef/provider/package/pacman.rb +4 -4
  88. data/lib/chef/provider/package/portage.rb +2 -0
  89. data/lib/chef/provider/package/rpm.rb +7 -8
  90. data/lib/chef/provider/package/rubygems.rb +5 -12
  91. data/lib/chef/provider/package/smartos.rb +4 -4
  92. data/lib/chef/provider/package/solaris.rb +7 -7
  93. data/lib/chef/provider/package/windows/msi.rb +1 -1
  94. data/lib/chef/provider/package/yum.rb +4 -6
  95. data/lib/chef/provider/package/zypper.rb +16 -14
  96. data/lib/chef/provider/powershell_script.rb +129 -47
  97. data/lib/chef/provider/remote_file/content.rb +4 -1
  98. data/lib/chef/provider/remote_file/local_file.rb +10 -4
  99. data/lib/chef/provider/service.rb +44 -0
  100. data/lib/chef/provider/service/freebsd.rb +1 -1
  101. data/lib/chef/provider/service/init.rb +1 -0
  102. data/lib/chef/provider/service/macosx.rb +1 -1
  103. data/lib/chef/provider/service/windows.rb +0 -1
  104. data/lib/chef/provider/user.rb +1 -1
  105. data/lib/chef/provider/user/aix.rb +3 -2
  106. data/lib/chef/provider/user/pw.rb +1 -0
  107. data/lib/chef/provider/user/solaris.rb +2 -0
  108. data/lib/chef/provider/user/useradd.rb +1 -0
  109. data/lib/chef/provider_resolver.rb +87 -134
  110. data/lib/chef/resource.rb +274 -68
  111. data/lib/chef/resource/apt_package.rb +0 -2
  112. data/lib/chef/resource/bash.rb +0 -2
  113. data/lib/chef/resource/batch.rb +1 -1
  114. data/lib/chef/resource/bff_package.rb +0 -7
  115. data/lib/chef/resource/breakpoint.rb +3 -6
  116. data/lib/chef/resource/chef_gem.rb +0 -3
  117. data/lib/chef/resource/cookbook_file.rb +1 -3
  118. data/lib/chef/resource/cron.rb +2 -4
  119. data/lib/chef/resource/csh.rb +0 -2
  120. data/lib/chef/resource/deploy.rb +9 -6
  121. data/lib/chef/resource/deploy_revision.rb +0 -14
  122. data/lib/chef/resource/directory.rb +2 -4
  123. data/lib/chef/resource/dpkg_package.rb +0 -5
  124. data/lib/chef/resource/dsc_resource.rb +2 -3
  125. data/lib/chef/resource/dsc_script.rb +2 -3
  126. data/lib/chef/resource/easy_install_package.rb +0 -7
  127. data/lib/chef/resource/env.rb +3 -3
  128. data/lib/chef/resource/erl_call.rb +2 -5
  129. data/lib/chef/resource/execute.rb +2 -4
  130. data/lib/chef/resource/file.rb +2 -4
  131. data/lib/chef/resource/freebsd_package.rb +0 -5
  132. data/lib/chef/resource/gem_package.rb +0 -3
  133. data/lib/chef/resource/git.rb +0 -3
  134. data/lib/chef/resource/group.rb +2 -4
  135. data/lib/chef/resource/homebrew_package.rb +0 -2
  136. data/lib/chef/resource/http_request.rb +3 -4
  137. data/lib/chef/resource/ifconfig.rb +3 -4
  138. data/lib/chef/resource/ips_package.rb +2 -2
  139. data/lib/chef/resource/link.rb +3 -5
  140. data/lib/chef/resource/log.rb +2 -4
  141. data/lib/chef/resource/lwrp_base.rb +10 -61
  142. data/lib/chef/resource/macosx_service.rb +1 -2
  143. data/lib/chef/resource/macports_package.rb +0 -7
  144. data/lib/chef/resource/mdadm.rb +2 -5
  145. data/lib/chef/resource/mount.rb +2 -4
  146. data/lib/chef/resource/ohai.rb +2 -4
  147. data/lib/chef/resource/openbsd_package.rb +0 -6
  148. data/lib/chef/resource/package.rb +9 -6
  149. data/lib/chef/resource/pacman_package.rb +0 -7
  150. data/lib/chef/resource/paludis_package.rb +2 -3
  151. data/lib/chef/resource/perl.rb +0 -3
  152. data/lib/chef/resource/portage_package.rb +0 -3
  153. data/lib/chef/resource/powershell_script.rb +1 -2
  154. data/lib/chef/resource/python.rb +0 -3
  155. data/lib/chef/resource/reboot.rb +1 -3
  156. data/lib/chef/resource/registry_key.rb +3 -5
  157. data/lib/chef/resource/remote_directory.rb +3 -5
  158. data/lib/chef/resource/remote_file.rb +4 -5
  159. data/lib/chef/resource/route.rb +3 -5
  160. data/lib/chef/resource/rpm_package.rb +0 -2
  161. data/lib/chef/resource/ruby.rb +0 -4
  162. data/lib/chef/resource/ruby_block.rb +2 -4
  163. data/lib/chef/resource/scm.rb +3 -5
  164. data/lib/chef/resource/script.rb +0 -3
  165. data/lib/chef/resource/service.rb +3 -5
  166. data/lib/chef/resource/smartos_package.rb +0 -9
  167. data/lib/chef/resource/solaris_package.rb +0 -10
  168. data/lib/chef/resource/subversion.rb +1 -3
  169. data/lib/chef/resource/template.rb +0 -4
  170. data/lib/chef/resource/timestamped_deploy.rb +0 -4
  171. data/lib/chef/resource/user.rb +2 -5
  172. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
  173. data/lib/chef/resource/windows_package.rb +3 -3
  174. data/lib/chef/resource/windows_script.rb +2 -2
  175. data/lib/chef/resource/windows_service.rb +3 -3
  176. data/lib/chef/resource/yum_package.rb +0 -3
  177. data/lib/chef/resource/zypper_package.rb +27 -0
  178. data/lib/chef/resource_builder.rb +7 -0
  179. data/lib/chef/resource_reporter.rb +1 -1
  180. data/lib/chef/resource_resolver.rb +108 -62
  181. data/lib/chef/resources.rb +1 -0
  182. data/lib/chef/rest.rb +1 -0
  183. data/lib/chef/server_api.rb +2 -0
  184. data/lib/chef/user.rb +193 -42
  185. data/lib/chef/util/backup.rb +9 -1
  186. data/lib/chef/util/path_helper.rb +0 -1
  187. data/lib/chef/version.rb +1 -1
  188. data/spec/functional/audit/runner_spec.rb +22 -42
  189. data/spec/functional/mixin/powershell_out_spec.rb +43 -0
  190. data/spec/functional/resource/execute_spec.rb +9 -2
  191. data/spec/functional/resource/file_spec.rb +25 -0
  192. data/spec/functional/resource/group_spec.rb +5 -0
  193. data/spec/functional/resource/link_spec.rb +5 -11
  194. data/spec/functional/resource/powershell_spec.rb +40 -5
  195. data/spec/functional/resource/user/useradd_spec.rb +10 -18
  196. data/spec/integration/recipes/lwrp_spec.rb +57 -0
  197. data/spec/integration/recipes/provider_choice.rb +2 -7
  198. data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
  199. data/spec/spec_helper.rb +1 -1
  200. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
  201. data/spec/support/lib/chef/resource/cat.rb +0 -2
  202. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
  203. data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
  204. data/spec/support/lib/chef/resource/with_state.rb +0 -9
  205. data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
  206. data/spec/support/lib/chef/resource/zen_master.rb +1 -6
  207. data/spec/support/shared/context/client.rb +277 -0
  208. data/spec/support/shared/examples/client.rb +53 -0
  209. data/spec/support/shared/functional/file_resource.rb +0 -4
  210. data/spec/support/shared/functional/securable_resource.rb +0 -24
  211. data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
  212. data/spec/support/shared/functional/windows_script.rb +1 -1
  213. data/spec/support/shared/unit/api_versioning.rb +77 -0
  214. data/spec/support/shared/unit/knife_shared.rb +40 -0
  215. data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
  216. data/spec/unit/api_client_spec.rb +189 -14
  217. data/spec/unit/application/client_spec.rb +0 -5
  218. data/spec/unit/audit/audit_reporter_spec.rb +58 -14
  219. data/spec/unit/audit/logger_spec.rb +42 -0
  220. data/spec/unit/audit/runner_spec.rb +2 -2
  221. data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
  222. data/spec/unit/client_spec.rb +58 -374
  223. data/spec/unit/cookbook_spec.rb +0 -9
  224. data/spec/unit/cookbook_version_spec.rb +0 -20
  225. data/spec/unit/deprecation_spec.rb +55 -0
  226. data/spec/unit/dsl/resources_spec.rb +85 -0
  227. data/spec/unit/exceptions_spec.rb +2 -2
  228. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
  229. data/spec/unit/formatters/doc_spec.rb +46 -0
  230. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
  231. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
  232. data/spec/unit/http/authenticator_spec.rb +11 -2
  233. data/spec/unit/knife/client_create_spec.rb +122 -51
  234. data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
  235. data/spec/unit/knife/core/ui_spec.rb +14 -0
  236. data/spec/unit/knife/osc_user_create_spec.rb +93 -0
  237. data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
  238. data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
  239. data/spec/unit/knife/osc_user_list_spec.rb +37 -0
  240. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
  241. data/spec/unit/knife/osc_user_show_spec.rb +46 -0
  242. data/spec/unit/knife/user_create_spec.rb +177 -51
  243. data/spec/unit/knife/user_delete_spec.rb +34 -8
  244. data/spec/unit/knife/user_edit_spec.rb +31 -12
  245. data/spec/unit/knife/user_list_spec.rb +7 -3
  246. data/spec/unit/knife/user_reregister_spec.rb +38 -17
  247. data/spec/unit/knife/user_show_spec.rb +35 -11
  248. data/spec/unit/knife_spec.rb +10 -4
  249. data/spec/unit/lwrp_spec.rb +228 -54
  250. data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
  251. data/spec/unit/mixin/command_spec.rb +1 -2
  252. data/spec/unit/mixin/powershell_out_spec.rb +70 -0
  253. data/spec/unit/mixin/uris_spec.rb +23 -11
  254. data/spec/unit/node_map_spec.rb +4 -1
  255. data/spec/unit/osc_user_spec.rb +276 -0
  256. data/spec/unit/platform_spec.rb +0 -60
  257. data/spec/unit/provider/deploy_spec.rb +1 -1
  258. data/spec/unit/provider/directory_spec.rb +199 -135
  259. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
  260. data/spec/unit/provider/package/aix_spec.rb +16 -16
  261. data/spec/unit/provider/package/dpkg_spec.rb +2 -2
  262. data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
  263. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  264. data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
  265. data/spec/unit/provider/package/ips_spec.rb +22 -22
  266. data/spec/unit/provider/package/macports_spec.rb +10 -10
  267. data/spec/unit/provider/package/openbsd_spec.rb +4 -26
  268. data/spec/unit/provider/package/pacman_spec.rb +5 -5
  269. data/spec/unit/provider/package/rpm_spec.rb +14 -14
  270. data/spec/unit/provider/package/rubygems_spec.rb +10 -44
  271. data/spec/unit/provider/package/smartos_spec.rb +4 -4
  272. data/spec/unit/provider/package/solaris_spec.rb +11 -11
  273. data/spec/unit/provider/package/zypper_spec.rb +125 -90
  274. data/spec/unit/provider/package_spec.rb +34 -0
  275. data/spec/unit/provider/powershell_spec.rb +53 -11
  276. data/spec/unit/provider/remote_directory_spec.rb +2 -2
  277. data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
  278. data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
  279. data/spec/unit/provider/user_spec.rb +3 -3
  280. data/spec/unit/provider_resolver_spec.rb +463 -327
  281. data/spec/unit/recipe_spec.rb +42 -15
  282. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  283. data/spec/unit/resource/erl_call_spec.rb +1 -1
  284. data/spec/unit/resource/file_spec.rb +1 -1
  285. data/spec/unit/resource/ifconfig_spec.rb +10 -6
  286. data/spec/unit/resource/remote_file_spec.rb +5 -0
  287. data/spec/unit/resource/route_spec.rb +1 -1
  288. data/spec/unit/resource/ruby_block_spec.rb +2 -2
  289. data/spec/unit/resource/template_spec.rb +1 -1
  290. data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
  291. data/spec/unit/resource/windows_service_spec.rb +1 -1
  292. data/spec/unit/resource_spec.rb +99 -13
  293. data/spec/unit/rest_spec.rb +5 -5
  294. data/spec/unit/run_context_spec.rb +41 -0
  295. data/spec/unit/runner_spec.rb +2 -2
  296. data/spec/unit/user_spec.rb +406 -93
  297. data/tasks/maintainers.rb +69 -0
  298. metadata +37 -4
@@ -119,6 +119,7 @@ class Chef
119
119
 
120
120
  @node = Chef::Node.find_or_create(node_name)
121
121
  validate_policyfile
122
+ events.policyfile_loaded(policy)
122
123
  node
123
124
  rescue Exception => e
124
125
  events.node_load_failed(node_name, e, Chef::Config)
@@ -22,14 +22,19 @@ require 'chef/mixin/convert_to_class_name'
22
22
  require 'chef/mixin/enforce_ownership_and_permissions'
23
23
  require 'chef/mixin/why_run'
24
24
  require 'chef/mixin/shell_out'
25
+ require 'chef/mixin/powershell_out'
25
26
  require 'chef/mixin/provides'
26
27
  require 'chef/platform/service_helpers'
27
28
  require 'chef/node_map'
28
29
 
29
30
  class Chef
30
31
  class Provider
32
+ require 'chef/mixin/why_run'
33
+ require 'chef/mixin/shell_out'
34
+ require 'chef/mixin/provides'
31
35
  include Chef::Mixin::WhyRun
32
36
  include Chef::Mixin::ShellOut
37
+ include Chef::Mixin::PowershellOut
33
38
  extend Chef::Mixin::Provides
34
39
 
35
40
  # supports the given resource and action (late binding)
@@ -170,6 +175,14 @@ class Chef
170
175
  converge_actions.add_action(descriptions, &block)
171
176
  end
172
177
 
178
+ def self.provides(short_name, opts={}, &block)
179
+ Chef.set_provider_priority_array(short_name, self, opts, &block)
180
+ end
181
+
182
+ def self.provides?(node, resource)
183
+ Chef::ProviderResolver.new(node, resource, :nothing).provided_by?(self)
184
+ end
185
+
173
186
  protected
174
187
 
175
188
  def converge_actions
@@ -226,3 +239,9 @@ class Chef
226
239
  extend DeprecatedLWRPClass
227
240
  end
228
241
  end
242
+
243
+ # Requiring things at the bottom breaks cycles
244
+ require 'chef/chef_class'
245
+ require 'chef/mixin/why_run'
246
+ require 'chef/resource_collection'
247
+ require 'chef/runner'
@@ -43,6 +43,9 @@ class Chef
43
43
  end
44
44
 
45
45
  def define_resource_requirements
46
+ # deep inside FAC we have to assert requirements, so call FACs hook to set that up
47
+ access_controls.define_resource_requirements
48
+
46
49
  requirements.assert(:create) do |a|
47
50
  # Make sure the parent dir exists, or else fail.
48
51
  # for why run, print a message explaining the potential error.
@@ -121,7 +121,14 @@ class Chef
121
121
  # however Invoke-DscResource is not correctly writing to that
122
122
  # stream and instead just dumping to stdout
123
123
  @converge_description = result.stdout
124
- result.return_value[0]["InDesiredState"]
124
+
125
+ if result.return_value.is_a?(Array)
126
+ # WMF Feb 2015 Preview
127
+ result.return_value[0]["InDesiredState"]
128
+ else
129
+ # WMF April 2015 Preview
130
+ result.return_value["InDesiredState"]
131
+ end
125
132
  end
126
133
 
127
134
  def set_resource
@@ -26,6 +26,7 @@ require 'fileutils'
26
26
  require 'chef/scan_access_control'
27
27
  require 'chef/mixin/checksum'
28
28
  require 'chef/mixin/file_class'
29
+ require 'chef/mixin/enforce_ownership_and_permissions'
29
30
  require 'chef/util/backup'
30
31
  require 'chef/util/diff'
31
32
  require 'chef/util/selinux'
@@ -23,6 +23,7 @@ class Chef
23
23
  class Provider
24
24
  class Group
25
25
  class Aix < Chef::Provider::Group::Groupadd
26
+ provides :group, platform: 'aix'
26
27
 
27
28
  def required_binaries
28
29
  [ "/usr/bin/mkgroup",
@@ -21,7 +21,7 @@ class Chef
21
21
  class Group
22
22
  class Dscl < Chef::Provider::Group
23
23
 
24
- provides :group, os: "darwin"
24
+ provides :group, os: 'darwin'
25
25
 
26
26
  def dscl(*args)
27
27
  host = "."
@@ -22,6 +22,7 @@ class Chef
22
22
  class Provider
23
23
  class Group
24
24
  class Gpasswd < Chef::Provider::Group::Groupadd
25
+ provides :group
25
26
 
26
27
  def load_current_resource
27
28
  super
@@ -21,7 +21,7 @@ class Chef
21
21
  class Group
22
22
  class Groupmod < Chef::Provider::Group
23
23
 
24
- provides :group, os: "netbsd"
24
+ provides :group, os: 'netbsd'
25
25
 
26
26
  def load_current_resource
27
27
  super
@@ -20,6 +20,7 @@ class Chef
20
20
  class Provider
21
21
  class Group
22
22
  class Pw < Chef::Provider::Group
23
+ provides :group, platform: 'freebsd'
23
24
 
24
25
  def load_current_resource
25
26
  super
@@ -22,6 +22,8 @@ class Chef
22
22
  class Provider
23
23
  class Group
24
24
  class Suse < Chef::Provider::Group::Groupadd
25
+ provides :group, platform: 'opensuse', platform_version: '< 12.3'
26
+ provides :group, platform: 'suse', platform_version: '< 12.0'
25
27
 
26
28
  def load_current_resource
27
29
  super
@@ -23,7 +23,8 @@ class Chef
23
23
  class Group
24
24
  class Usermod < Chef::Provider::Group::Groupadd
25
25
 
26
- provides :group, os: "openbsd"
26
+ provides :group, os: %w(openbsd solaris2 hpux)
27
+ provides :group, platform: "opensuse"
27
28
 
28
29
  def load_current_resource
29
30
  super
@@ -26,7 +26,7 @@ class Chef
26
26
  class Group
27
27
  class Windows < Chef::Provider::Group
28
28
 
29
- provides :group, os: "windows"
29
+ provides :group, os: 'windows'
30
30
 
31
31
  def initialize(new_resource,run_context)
32
32
  super
@@ -39,6 +39,8 @@ require 'erb'
39
39
  class Chef
40
40
  class Provider
41
41
  class Ifconfig < Chef::Provider
42
+ provides :ifconfig
43
+
42
44
  include Chef::Mixin::ShellOut
43
45
  include Chef::Mixin::Command
44
46
 
@@ -22,6 +22,7 @@ class Chef
22
22
  class Provider
23
23
  class Ifconfig
24
24
  class Aix < Chef::Provider::Ifconfig
25
+ provides :ifconfig, platform: %w(aix)
25
26
 
26
27
  def load_current_resource
27
28
  @current_resource = Chef::Resource::Ifconfig.new(@new_resource.name)
@@ -23,6 +23,8 @@ class Chef
23
23
  class Provider
24
24
  class Ifconfig
25
25
  class Debian < Chef::Provider::Ifconfig
26
+ provides :ifconfig, platform: %w(ubuntu), platform_version: '>= 11.10'
27
+ provides :ifconfig, platform: %w(debian), platform_version: '>= 7.0'
26
28
 
27
29
  INTERFACES_FILE = "/etc/network/interfaces"
28
30
  INTERFACES_DOT_D_DIR = "/etc/network/interfaces.d"
@@ -22,6 +22,7 @@ class Chef
22
22
  class Provider
23
23
  class Ifconfig
24
24
  class Redhat < Chef::Provider::Ifconfig
25
+ provides :ifconfig, platform_family: %w(fedora rhel)
25
26
 
26
27
  def initialize(new_resource, run_context)
27
28
  super(new_resource, run_context)
@@ -19,6 +19,7 @@
19
19
  #
20
20
 
21
21
  require 'chef/provider'
22
+ require 'chef/dsl/include_recipe'
22
23
 
23
24
  class Chef
24
25
  class Provider
@@ -77,6 +78,9 @@ class Chef
77
78
  include Chef::DSL::PlatformIntrospection
78
79
  include Chef::DSL::DataQuery
79
80
 
81
+ # Allow include_recipe from within LWRP provider code
82
+ include Chef::DSL::IncludeRecipe
83
+
80
84
  # no-op `load_current_resource`. Allows simple LWRP providers to work
81
85
  # without defining this method explicitly (silences
82
86
  # Chef::Exceptions::Override exception)
@@ -24,7 +24,6 @@ require 'chef/provider'
24
24
  class Chef
25
25
  class Provider
26
26
  class Mount < Chef::Provider
27
-
28
27
  include Chef::Mixin::ShellOut
29
28
 
30
29
  attr_accessor :unmount_retries
@@ -22,6 +22,7 @@ class Chef
22
22
  class Provider
23
23
  class Mount
24
24
  class Aix < Chef::Provider::Mount::Mount
25
+ provides :mount, platform: %w(aix)
25
26
 
26
27
  # Override for aix specific handling
27
28
  def initialize(new_resource, run_context)
@@ -24,6 +24,8 @@ class Chef
24
24
  class Mount
25
25
  class Mount < Chef::Provider::Mount
26
26
 
27
+ provides :mount
28
+
27
29
  def initialize(new_resource, run_context)
28
30
  super
29
31
  @real_device = nil
@@ -27,6 +27,8 @@ class Chef
27
27
  class Mount
28
28
  # Mount Solaris File systems
29
29
  class Solaris < Chef::Provider::Mount
30
+ provides :mount, platform: %w(openindiana opensolaris nexentacore omnios solaris2 smartos)
31
+
30
32
  extend Forwardable
31
33
 
32
34
  VFSTAB = '/etc/vfstab'.freeze
@@ -490,6 +490,61 @@ class Chef
490
490
  false
491
491
  end
492
492
  end
493
+
494
+ # Set provider priority
495
+ require 'chef/chef_class'
496
+ require 'chef/provider/package/dpkg'
497
+ require 'chef/provider/package/homebrew'
498
+ require 'chef/provider/package/macports'
499
+ require 'chef/provider/package/apt'
500
+ require 'chef/provider/package/yum'
501
+ require 'chef/provider/package/zypper'
502
+ require 'chef/provider/package/portage'
503
+ require 'chef/provider/package/pacman'
504
+ require 'chef/provider/package/ips'
505
+ require 'chef/provider/package/solaris'
506
+ require 'chef/provider/package/smartos'
507
+ require 'chef/provider/package/aix'
508
+ require 'chef/provider/package/paludis'
509
+
510
+ Chef.set_provider_priority_array :package, [ Homebrew, Macports ], os: "darwin"
511
+
512
+ Chef.set_provider_priority_array :package, Apt, platform_family: "debian"
513
+ Chef.set_provider_priority_array :package, Yum, platform_family: %w(rhel fedora)
514
+ Chef.set_provider_priority_array :package, Zypper, platform_family: "suse"
515
+ Chef.set_provider_priority_array :package, Portage, platform: "gentoo"
516
+ Chef.set_provider_priority_array :package, Pacman, platform: "arch"
517
+ Chef.set_provider_priority_array :package, Ips, platform: %w(openindiana opensolaris omnios solaris2)
518
+ Chef.set_provider_priority_array :package, Solaris, platform: "nexentacore"
519
+ Chef.set_provider_priority_array :package, Solaris, platform: "solaris2", platform_version: '< 5.11'
520
+
521
+ Chef.set_provider_priority_array :package, SmartOS, platform: "smartos"
522
+ Chef.set_provider_priority_array :package, Aix, platform: "aix"
523
+ Chef.set_provider_priority_array :package, Paludis, platform: "exherbo"
524
+
525
+ private
526
+
527
+ def shell_out_with_timeout(*command_args)
528
+ shell_out(*add_timeout_option(command_args))
529
+ end
530
+
531
+ def shell_out_with_timeout!(*command_args)
532
+ shell_out!(*add_timeout_option(command_args))
533
+ end
534
+
535
+ def add_timeout_option(command_args)
536
+ args = command_args.dup
537
+ if args.last.is_a?(Hash)
538
+ options = args.pop.dup
539
+ options[:timeout] = new_resource.timeout if new_resource.timeout
540
+ options[:timeout] = 900 unless options.has_key?(:timeout)
541
+ args << options
542
+ else
543
+ args << { :timeout => new_resource.timeout ? new_resource.timeout : 900 }
544
+ end
545
+ args
546
+ end
547
+
493
548
  end
494
549
  end
495
550
  end
@@ -52,7 +52,7 @@ class Chef
52
52
  @package_source_found = ::File.exists?(@new_resource.source)
53
53
  if @package_source_found
54
54
  Chef::Log.debug("#{@new_resource} checking pkg status")
55
- ret = shell_out("installp -L -d #{@new_resource.source}")
55
+ ret = shell_out_with_timeout("installp -L -d #{@new_resource.source}")
56
56
  ret.stdout.each_line do | line |
57
57
  case line
58
58
  when /#{@new_resource.package_name}:/
@@ -65,7 +65,7 @@ class Chef
65
65
  end
66
66
 
67
67
  Chef::Log.debug("#{@new_resource} checking install state")
68
- ret = shell_out("lslpp -lcq #{@current_resource.package_name}")
68
+ ret = shell_out_with_timeout("lslpp -lcq #{@current_resource.package_name}")
69
69
  ret.stdout.each_line do | line |
70
70
  case line
71
71
  when /#{@current_resource.package_name}/
@@ -84,7 +84,7 @@ class Chef
84
84
 
85
85
  def candidate_version
86
86
  return @candidate_version if @candidate_version
87
- ret = shell_out("installp -L -d #{@new_resource.source}")
87
+ ret = shell_out_with_timeout("installp -L -d #{@new_resource.source}")
88
88
  ret.stdout.each_line do | line |
89
89
  case line
90
90
  when /\w:#{Regexp.escape(@new_resource.package_name)}:(.*)/
@@ -110,10 +110,10 @@ class Chef
110
110
  def install_package(name, version)
111
111
  Chef::Log.debug("#{@new_resource} package install options: #{@new_resource.options}")
112
112
  if @new_resource.options.nil?
113
- shell_out!( "installp -aYF -d #{@new_resource.source} #{@new_resource.package_name}" )
113
+ shell_out_with_timeout!( "installp -aYF -d #{@new_resource.source} #{@new_resource.package_name}" )
114
114
  Chef::Log.debug("#{@new_resource} installed version #{@new_resource.version} from: #{@new_resource.source}")
115
115
  else
116
- shell_out!( "installp -aYF #{expand_options(@new_resource.options)} -d #{@new_resource.source} #{@new_resource.package_name}" )
116
+ shell_out_with_timeout!( "installp -aYF #{expand_options(@new_resource.options)} -d #{@new_resource.source} #{@new_resource.package_name}" )
117
117
  Chef::Log.debug("#{@new_resource} installed version #{@new_resource.version} from: #{@new_resource.source}")
118
118
  end
119
119
  end
@@ -122,10 +122,10 @@ class Chef
122
122
 
123
123
  def remove_package(name, version)
124
124
  if @new_resource.options.nil?
125
- shell_out!( "installp -u #{name}" )
125
+ shell_out_with_timeout!( "installp -u #{name}" )
126
126
  Chef::Log.debug("#{@new_resource} removed version #{@new_resource.version}")
127
127
  else
128
- shell_out!( "installp -u #{expand_options(@new_resource.options)} #{name}" )
128
+ shell_out_with_timeout!( "installp -u #{expand_options(@new_resource.options)} #{name}" )
129
129
  Chef::Log.debug("#{@new_resource} removed version #{@new_resource.version}")
130
130
  end
131
131
  end
@@ -62,7 +62,7 @@ class Chef
62
62
  installed_version = nil
63
63
  candidate_version = nil
64
64
 
65
- shell_out!("apt-cache#{expand_options(default_release_options)} policy #{pkg}", {:timeout=>900}).stdout.each_line do |line|
65
+ shell_out_with_timeout!("apt-cache#{expand_options(default_release_options)} policy #{pkg}").stdout.each_line do |line|
66
66
  case line
67
67
  when /^\s{2}Installed: (.+)$/
68
68
  installed_version = $1
@@ -78,7 +78,7 @@ class Chef
78
78
  if candidate_version == '(none)'
79
79
  # This may not be an appropriate assumption, but it shouldn't break anything that already worked -- btm
80
80
  is_virtual_package = true
81
- showpkg = shell_out!("apt-cache showpkg #{pkg}", {:timeout => 900}).stdout
81
+ showpkg = shell_out_with_timeout!("apt-cache showpkg #{pkg}").stdout
82
82
  providers = Hash.new
83
83
  showpkg.rpartition(/Reverse Provides: ?#{$/}/)[2].each_line do |line|
84
84
  provider, version = line.split
@@ -175,7 +175,7 @@ class Chef
175
175
  # interactive prompts. Command is run with default localization rather
176
176
  # than forcing locale to "C", so command output may not be stable.
177
177
  def run_noninteractive(command)
178
- shell_out!(command, :env => { "DEBIAN_FRONTEND" => "noninteractive", "LC_ALL" => nil }, :timeout => @new_resource.timeout)
178
+ shell_out_with_timeout!(command, :env => { "DEBIAN_FRONTEND" => "noninteractive", "LC_ALL" => nil })
179
179
  end
180
180
 
181
181
  end
@@ -62,7 +62,7 @@ class Chef
62
62
  # Get information from the package if supplied
63
63
  Chef::Log.debug("#{@new_resource} checking dpkg status")
64
64
 
65
- shell_out("dpkg-deb -W #{@new_resource.source}").stdout.each_line do |line|
65
+ shell_out_with_timeout("dpkg-deb -W #{@new_resource.source}").stdout.each_line do |line|
66
66
  if pkginfo = DPKG_INFO.match(line)
67
67
  @current_resource.package_name(pkginfo[1])
68
68
  @new_resource.version(pkginfo[2])
@@ -79,7 +79,7 @@ class Chef
79
79
  # Check to see if it is installed
80
80
  package_installed = nil
81
81
  Chef::Log.debug("#{@new_resource} checking install state")
82
- status = shell_out("dpkg -s #{@current_resource.package_name}")
82
+ status = shell_out_with_timeout("dpkg -s #{@current_resource.package_name}")
83
83
  status.stdout.each_line do |line|
84
84
  case line
85
85
  when DPKG_INSTALLED
@@ -134,13 +134,13 @@ class Chef
134
134
  run_noninteractive("dpkg-reconfigure #{name}")
135
135
  end
136
136
 
137
- # Runs command via shell_out with magic environment to disable
137
+ # Runs command via shell_out_with_timeout with magic environment to disable
138
138
  # interactive prompts. Command is run with default localization rather
139
139
  # than forcing locale to "C", so command output may not be stable.
140
140
  #
141
141
  # FIXME: This should be "LC_ALL" => "en_US.UTF-8" in order to stabilize the output and get UTF-8
142
142
  def run_noninteractive(command)
143
- shell_out!(command, :env => { "DEBIAN_FRONTEND" => "noninteractive", "LC_ALL" => nil })
143
+ shell_out_with_timeout!(command, :env => { "DEBIAN_FRONTEND" => "noninteractive", "LC_ALL" => nil })
144
144
  end
145
145
 
146
146
  end
@@ -32,10 +32,10 @@ class Chef
32
32
 
33
33
  begin
34
34
  # first check to see if we can import it
35
- output = shell_out!("#{python_binary_path} -c \"import #{name}\"", :returns=>[0,1]).stderr
35
+ output = shell_out_with_timeout!("#{python_binary_path} -c \"import #{name}\"", :returns=>[0,1]).stderr
36
36
  if output.include? "ImportError"
37
37
  # then check to see if its on the path
38
- output = shell_out!("#{python_binary_path} -c \"import sys; print sys.path\"", :returns=>[0,1]).stdout
38
+ output = shell_out_with_timeout!("#{python_binary_path} -c \"import sys; print sys.path\"", :returns=>[0,1]).stdout
39
39
  if output.downcase.include? "#{name.downcase}"
40
40
  check = true
41
41
  end
@@ -73,10 +73,10 @@ class Chef
73
73
  package_version = nil
74
74
  if install_check(module_name)
75
75
  begin
76
- output = shell_out!("#{python_binary_path} -c \"import #{module_name}; print #{module_name}.__version__\"").stdout
76
+ output = shell_out_with_timeout!("#{python_binary_path} -c \"import #{module_name}; print #{module_name}.__version__\"").stdout
77
77
  package_version = output.strip
78
78
  rescue
79
- output = shell_out!("#{python_binary_path} -c \"import sys; print sys.path\"", :returns=>[0,1]).stdout
79
+ output = shell_out_with_timeout!("#{python_binary_path} -c \"import sys; print sys.path\"", :returns=>[0,1]).stdout
80
80
 
81
81
  output_array = output.gsub(/[\[\]]/,'').split(/\s*,\s*/)
82
82
  package_path = ""
@@ -107,7 +107,7 @@ class Chef
107
107
  return @candidate_version if @candidate_version
108
108
 
109
109
  # do a dry run to get the latest version
110
- result = shell_out!("#{easy_install_binary_path} -n #{@new_resource.package_name}", :returns=>[0,1])
110
+ result = shell_out_with_timeout!("#{easy_install_binary_path} -n #{@new_resource.package_name}", :returns=>[0,1])
111
111
  @candidate_version = result.stdout[/(.*)Best match: (.*) (.*)$/, 3]
112
112
  @candidate_version
113
113
  end