chef 16.0.275 → 16.2.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -1
  3. data/README.md +3 -3
  4. data/Rakefile +15 -1
  5. data/chef.gemspec +3 -3
  6. data/lib/chef/application/apply.rb +2 -2
  7. data/lib/chef/application/base.rb +1 -1
  8. data/lib/chef/application/client.rb +1 -1
  9. data/lib/chef/application/exit_code.rb +2 -2
  10. data/lib/chef/application/windows_service_manager.rb +1 -1
  11. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  12. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  13. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  14. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  18. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  19. data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
  20. data/lib/chef/chef_fs/path_utils.rb +4 -4
  21. data/lib/chef/cookbook/chefignore.rb +1 -1
  22. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  23. data/lib/chef/cookbook/metadata.rb +2 -2
  24. data/lib/chef/cookbook_loader.rb +1 -1
  25. data/lib/chef/cookbook_manifest.rb +1 -1
  26. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  27. data/lib/chef/cookbook_version.rb +7 -7
  28. data/lib/chef/data_bag.rb +4 -4
  29. data/lib/chef/data_collector.rb +1 -1
  30. data/lib/chef/data_collector/error_handlers.rb +1 -1
  31. data/lib/chef/decorator/lazy_array.rb +2 -2
  32. data/lib/chef/deprecated.rb +5 -1
  33. data/lib/chef/digester.rb +4 -4
  34. data/lib/chef/dsl/declare_resource.rb +1 -1
  35. data/lib/chef/dsl/platform_introspection.rb +1 -1
  36. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  37. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  38. data/lib/chef/file_access_control.rb +1 -1
  39. data/lib/chef/formatters/base.rb +1 -1
  40. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
  41. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  42. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  43. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
  44. data/lib/chef/http.rb +18 -3
  45. data/lib/chef/http/decompressor.rb +1 -1
  46. data/lib/chef/http/http_request.rb +1 -1
  47. data/lib/chef/http/json_output.rb +1 -1
  48. data/lib/chef/http/ssl_policies.rb +18 -0
  49. data/lib/chef/json_compat.rb +1 -1
  50. data/lib/chef/key.rb +1 -1
  51. data/lib/chef/knife.rb +2 -2
  52. data/lib/chef/knife/bootstrap.rb +13 -16
  53. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  54. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  55. data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
  56. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
  57. data/lib/chef/knife/client_bulk_delete.rb +1 -1
  58. data/lib/chef/knife/config_get.rb +1 -1
  59. data/lib/chef/knife/config_use_profile.rb +15 -5
  60. data/lib/chef/knife/cookbook_delete.rb +1 -1
  61. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  62. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  63. data/lib/chef/knife/core/node_presenter.rb +1 -1
  64. data/lib/chef/knife/core/status_presenter.rb +1 -1
  65. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  66. data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -3
  67. data/lib/chef/knife/data_bag_create.rb +1 -1
  68. data/lib/chef/knife/key_create_base.rb +1 -1
  69. data/lib/chef/knife/key_edit_base.rb +1 -1
  70. data/lib/chef/knife/node_bulk_delete.rb +1 -1
  71. data/lib/chef/knife/node_run_list_remove.rb +1 -1
  72. data/lib/chef/knife/role_bulk_delete.rb +1 -1
  73. data/lib/chef/knife/ssh.rb +2 -2
  74. data/lib/chef/knife/supermarket_share.rb +1 -1
  75. data/lib/chef/knife/supermarket_unshare.rb +1 -1
  76. data/lib/chef/knife/{user_invite_recind.rb → user_invite_rescind.rb} +6 -6
  77. data/lib/chef/log.rb +1 -1
  78. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  79. data/lib/chef/mixin/checksum.rb +0 -1
  80. data/lib/chef/mixin/create_path.rb +8 -8
  81. data/lib/chef/mixin/openssl_helper.rb +4 -4
  82. data/lib/chef/mixin/properties.rb +4 -2
  83. data/lib/chef/mixin/securable.rb +2 -2
  84. data/lib/chef/mixin/shell_out.rb +1 -1
  85. data/lib/chef/node/attribute.rb +2 -2
  86. data/lib/chef/node/immutable_collections.rb +1 -1
  87. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  88. data/lib/chef/policy_builder/policyfile.rb +1 -1
  89. data/lib/chef/powershell.rb +1 -1
  90. data/lib/chef/property.rb +2 -2
  91. data/lib/chef/provider.rb +3 -3
  92. data/lib/chef/provider/batch.rb +3 -10
  93. data/lib/chef/provider/cron.rb +2 -14
  94. data/lib/chef/provider/directory.rb +1 -1
  95. data/lib/chef/provider/execute.rb +2 -1
  96. data/lib/chef/provider/file.rb +1 -1
  97. data/lib/chef/provider/group/dscl.rb +2 -2
  98. data/lib/chef/provider/group/windows.rb +1 -1
  99. data/lib/chef/provider/ifconfig.rb +7 -7
  100. data/lib/chef/provider/launchd.rb +28 -32
  101. data/lib/chef/provider/mount/aix.rb +1 -1
  102. data/lib/chef/provider/mount/windows.rb +2 -2
  103. data/lib/chef/provider/noop.rb +1 -1
  104. data/lib/chef/provider/package/cab.rb +1 -1
  105. data/lib/chef/provider/package/chocolatey.rb +1 -1
  106. data/lib/chef/provider/package/dpkg.rb +1 -1
  107. data/lib/chef/provider/package/openbsd.rb +1 -1
  108. data/lib/chef/provider/package/portage.rb +3 -2
  109. data/lib/chef/provider/package/powershell.rb +6 -2
  110. data/lib/chef/provider/package/rubygems.rb +3 -3
  111. data/lib/chef/provider/package/snap.rb +96 -27
  112. data/lib/chef/provider/package/windows.rb +2 -2
  113. data/lib/chef/provider/package/windows/msi.rb +3 -3
  114. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
  115. data/lib/chef/provider/package/yum.rb +1 -1
  116. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  117. data/lib/chef/provider/powershell_script.rb +11 -15
  118. data/lib/chef/provider/remote_directory.rb +2 -2
  119. data/lib/chef/provider/remote_file/http.rb +4 -1
  120. data/lib/chef/provider/script.rb +4 -75
  121. data/lib/chef/provider/service/arch.rb +2 -2
  122. data/lib/chef/provider/service/debian.rb +2 -2
  123. data/lib/chef/provider/service/macosx.rb +13 -2
  124. data/lib/chef/provider/service/openbsd.rb +4 -4
  125. data/lib/chef/provider/service/redhat.rb +1 -1
  126. data/lib/chef/provider/service/simple.rb +3 -3
  127. data/lib/chef/provider/service/upstart.rb +1 -1
  128. data/lib/chef/provider/service/windows.rb +1 -1
  129. data/lib/chef/provider/subversion.rb +2 -2
  130. data/lib/chef/provider/user/aix.rb +1 -1
  131. data/lib/chef/provider/user/dscl.rb +6 -6
  132. data/lib/chef/provider/user/linux.rb +3 -3
  133. data/lib/chef/provider/user/mac.rb +15 -11
  134. data/lib/chef/provider/windows_script.rb +87 -25
  135. data/lib/chef/provider/windows_task.rb +5 -3
  136. data/lib/chef/provider/zypper_repository.rb +30 -10
  137. data/lib/chef/resource.rb +25 -14
  138. data/lib/chef/resource/alternatives.rb +1 -1
  139. data/lib/chef/resource/apt_package.rb +1 -1
  140. data/lib/chef/resource/archive_file.rb +28 -8
  141. data/lib/chef/resource/bash.rb +0 -1
  142. data/lib/chef/resource/batch.rb +4 -2
  143. data/lib/chef/resource/chef_client_scheduled_task.rb +13 -1
  144. data/lib/chef/resource/chef_gem.rb +57 -21
  145. data/lib/chef/resource/chef_handler.rb +2 -2
  146. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  147. data/lib/chef/resource/cron/_cron_shared.rb +98 -0
  148. data/lib/chef/resource/cron/cron.rb +46 -0
  149. data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
  150. data/lib/chef/resource/cron_access.rb +11 -3
  151. data/lib/chef/resource/csh.rb +0 -1
  152. data/lib/chef/resource/dmg_package.rb +1 -1
  153. data/lib/chef/resource/execute.rb +478 -8
  154. data/lib/chef/resource/file.rb +10 -8
  155. data/lib/chef/resource/freebsd_package.rb +1 -1
  156. data/lib/chef/resource/gem_package.rb +35 -2
  157. data/lib/chef/resource/helpers/cron_validations.rb +6 -3
  158. data/lib/chef/resource/homebrew_package.rb +30 -1
  159. data/lib/chef/resource/homebrew_update.rb +107 -0
  160. data/lib/chef/resource/hostname.rb +7 -20
  161. data/lib/chef/resource/kernel_module.rb +14 -1
  162. data/lib/chef/resource/launchd.rb +4 -4
  163. data/lib/chef/resource/locale.rb +3 -3
  164. data/lib/chef/resource/macos_userdefaults.rb +14 -9
  165. data/lib/chef/resource/mount.rb +1 -1
  166. data/lib/chef/resource/msu_package.rb +1 -1
  167. data/lib/chef/resource/perl.rb +0 -1
  168. data/lib/chef/resource/plist.rb +23 -4
  169. data/lib/chef/resource/powershell_script.rb +4 -2
  170. data/lib/chef/resource/python.rb +0 -1
  171. data/lib/chef/resource/remote_file.rb +26 -10
  172. data/lib/chef/resource/ruby.rb +0 -1
  173. data/lib/chef/resource/scm/git.rb +1 -1
  174. data/lib/chef/resource/ssh_known_hosts_entry.rb +15 -0
  175. data/lib/chef/resource/sudo.rb +29 -2
  176. data/lib/chef/resource/swap_file.rb +17 -0
  177. data/lib/chef/resource/template.rb +1 -1
  178. data/lib/chef/resource/timezone.rb +15 -0
  179. data/lib/chef/resource/windows_ad_join.rb +30 -1
  180. data/lib/chef/resource/windows_audit_policy.rb +227 -0
  181. data/lib/chef/resource/windows_auto_run.rb +11 -0
  182. data/lib/chef/resource/windows_certificate.rb +27 -1
  183. data/lib/chef/resource/windows_dfs_server.rb +1 -1
  184. data/lib/chef/resource/windows_firewall_rule.rb +2 -2
  185. data/lib/chef/resource/windows_font.rb +3 -3
  186. data/lib/chef/resource/windows_package.rb +3 -3
  187. data/lib/chef/resource/windows_pagefile.rb +2 -2
  188. data/lib/chef/resource/windows_printer.rb +1 -1
  189. data/lib/chef/resource/windows_script.rb +2 -16
  190. data/lib/chef/resource/windows_security_policy.rb +47 -16
  191. data/lib/chef/resource/windows_share.rb +2 -2
  192. data/lib/chef/resource/windows_shortcut.rb +1 -2
  193. data/lib/chef/resource/windows_task.rb +21 -21
  194. data/lib/chef/resource/windows_user_privilege.rb +45 -3
  195. data/lib/chef/resource/yum_repository.rb +9 -9
  196. data/lib/chef/resource_inspector.rb +4 -3
  197. data/lib/chef/resources.rb +4 -2
  198. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  199. data/lib/chef/search/query.rb +1 -1
  200. data/lib/chef/shell/ext.rb +1 -1
  201. data/lib/chef/util/diff.rb +2 -2
  202. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  203. data/lib/chef/util/windows/net_user.rb +1 -1
  204. data/lib/chef/util/windows/volume.rb +1 -1
  205. data/lib/chef/version.rb +1 -1
  206. data/lib/chef/win32/api.rb +2 -2
  207. data/lib/chef/win32/api/error.rb +3 -1
  208. data/lib/chef/win32/api/file.rb +18 -18
  209. data/lib/chef/win32/api/net.rb +1 -0
  210. data/lib/chef/win32/file.rb +1 -1
  211. data/lib/chef/win32/mutex.rb +1 -1
  212. data/lib/chef/win32/net.rb +1 -0
  213. data/lib/chef/win32/process.rb +2 -2
  214. data/lib/chef/win32/registry.rb +2 -2
  215. data/lib/chef/win32/security.rb +1 -1
  216. data/lib/chef/win32/security/sid.rb +4 -4
  217. data/spec/data/lwrp/providers/buck_passer.rb +1 -1
  218. data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
  219. data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
  220. data/spec/functional/resource/cron_spec.rb +10 -0
  221. data/spec/functional/resource/dnf_package_spec.rb +2 -2
  222. data/spec/functional/resource/git_spec.rb +6 -6
  223. data/spec/functional/resource/launchd_spec.rb +232 -0
  224. data/spec/functional/resource/remote_file_spec.rb +2 -2
  225. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  226. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  227. data/spec/functional/resource/windows_task_spec.rb +12 -12
  228. data/spec/integration/knife/config_use_profile_spec.rb +55 -2
  229. data/spec/support/chef_helpers.rb +1 -1
  230. data/spec/support/platform_helpers.rb +1 -1
  231. data/spec/support/platforms/win32/spec_service.rb +1 -1
  232. data/spec/support/shared/functional/execute_resource.rb +1 -1
  233. data/spec/support/shared/functional/file_resource.rb +1 -1
  234. data/spec/support/shared/functional/windows_script.rb +1 -1
  235. data/spec/support/shared/unit/execute_resource.rb +1 -1
  236. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  237. data/spec/unit/application_spec.rb +7 -0
  238. data/spec/unit/data_bag_spec.rb +1 -1
  239. data/spec/unit/http/ssl_policies_spec.rb +20 -0
  240. data/spec/unit/knife/bootstrap_spec.rb +2 -2
  241. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
  242. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  243. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  244. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  245. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  246. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  247. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  248. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  249. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  250. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  251. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  252. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  253. data/spec/unit/mixin/user_context_spec.rb +1 -9
  254. data/spec/unit/node/attribute_spec.rb +1 -1
  255. data/spec/unit/property_spec.rb +1 -1
  256. data/spec/unit/provider/batch_spec.rb +130 -0
  257. data/spec/unit/provider/cron_spec.rb +9 -49
  258. data/spec/unit/provider/git_spec.rb +3 -3
  259. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  260. data/spec/unit/provider/launchd_spec.rb +8 -50
  261. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  262. data/spec/unit/provider/package/msu_spec.rb +3 -3
  263. data/spec/unit/provider/package/portage_spec.rb +2 -2
  264. data/spec/unit/provider/package/powershell_spec.rb +96 -87
  265. data/spec/unit/provider/package/snap_spec.rb +1 -1
  266. data/spec/unit/provider/powershell_script_spec.rb +3 -45
  267. data/spec/unit/provider/script_spec.rb +20 -110
  268. data/spec/unit/provider/service/gentoo_service_spec.rb +1 -1
  269. data/spec/unit/provider/zypper_repository_spec.rb +60 -10
  270. data/spec/unit/provider_resolver_spec.rb +9 -9
  271. data/spec/unit/resource/archive_file_spec.rb +11 -2
  272. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
  273. data/spec/unit/resource/cron_spec.rb +2 -2
  274. data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
  275. data/spec/unit/resource/homebrew_update_spec.rb +30 -0
  276. data/spec/unit/resource/powershell_script_spec.rb +10 -15
  277. data/spec/unit/resource/timezone_spec.rb +1 -1
  278. data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
  279. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  280. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  281. data/spec/unit/resource/windows_package_spec.rb +10 -0
  282. data/spec/unit/resource/windows_task_spec.rb +1 -1
  283. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  284. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  285. data/spec/unit/resource_spec.rb +67 -1
  286. data/spec/unit/run_context_spec.rb +1 -1
  287. data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
  288. data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
  289. data/spec/unit/win32/registry_spec.rb +1 -1
  290. metadata +24 -23
  291. data/lib/chef/resource/cron.rb +0 -157
@@ -27,8 +27,10 @@ class Chef
27
27
 
28
28
  description "Use the **batch** resource to execute a batch script using the cmd.exe interpreter on Windows. The batch resource creates and executes a temporary file (similar to how the script resource behaves), rather than running the command inline. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use not_if and only_if to guard this resource for idempotence."
29
29
 
30
- def initialize(name, run_context = nil)
31
- super(name, run_context, nil, "cmd.exe")
30
+ def initialize(*args)
31
+ super
32
+ @interpreter = "cmd.exe"
33
+ @default_guard_interpreter = resource_name
32
34
  end
33
35
 
34
36
  end
@@ -48,6 +48,16 @@ class Chef
48
48
  daemon_options ["--override-runlist mycorp_base::default"]
49
49
  end
50
50
  ```
51
+
52
+ **Run #{Chef::Dist::PRODUCT} daily at 01:00 am, specifying a named run-list**:
53
+
54
+ ```ruby
55
+ chef_client_scheduled_task "Run chef-client named run-list daily" do
56
+ frequency 'daily'
57
+ start_time '01:00'
58
+ daemon_options ['-n audit_only']
59
+ end
60
+ ```
51
61
  DOC
52
62
 
53
63
  resource_name :chef_client_scheduled_task
@@ -72,7 +82,8 @@ class Chef
72
82
  coerce: proc { |x| Integer(x) },
73
83
  callbacks: { "should be a positive number" => proc { |v| v > 0 } },
74
84
  description: "Numeric value to go with the scheduled task frequency",
75
- default: 30
85
+ default: lazy { frequency == "minute" ? 30 : 1 },
86
+ default_description: "30 if frequency is 'minute', 1 otherwise"
76
87
 
77
88
  property :accept_chef_license, [true, false],
78
89
  description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
@@ -129,6 +140,7 @@ class Chef
129
140
 
130
141
  # According to https://docs.microsoft.com/en-us/windows/desktop/taskschd/schtasks,
131
142
  # the :once, :onstart, :onlogon, and :onidle schedules don't accept schedule modifiers
143
+
132
144
  windows_task new_resource.task_name do
133
145
  run_level :highest
134
146
  command full_command
@@ -22,26 +22,59 @@ require_relative "../dist"
22
22
 
23
23
  class Chef
24
24
  class Resource
25
- # Use the chef_gem resource to install a gem only for the instance of Ruby that is dedicated to the chef-client.
26
- # When a gem is installed from a local file, it must be added to the node using the remote_file or cookbook_file
27
- # resources.
28
- #
29
- # The chef_gem resource works with all of the same properties and options as the gem_package resource, but does not
30
- # accept the gem_binary property because it always uses the CurrentGemEnvironment under which the chef-client is
31
- # running. In addition to performing actions similar to the gem_package resource, the chef_gem resource does the
32
- # following:
33
- # - Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is
34
- # installed
35
- # - Runs Gem.clear_paths after the action, ensuring that gem is aware of changes so that it can be required
36
- # immediately after it is installed
37
-
38
- require_relative "gem_package"
39
- require_relative "../dist"
40
-
41
25
  class ChefGem < Chef::Resource::Package::GemPackage
42
26
  unified_mode true
43
27
  provides :chef_gem
44
28
 
29
+ description <<~DESC
30
+ Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{Chef::Dist::CLIENT}.
31
+ When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
32
+
33
+ The **chef_gem** resource works with all of the same properties and options as the **gem_package** resource, but does not
34
+ accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{Chef::Dist::CLIENT}` is
35
+ running. In addition to performing actions similar to the **gem_package** resource, the **chef_gem** resource does the
36
+ following:
37
+ - Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is installed.
38
+ - Runs `Gem.clear_paths` after the action, ensuring that gem is aware of changes so that it can be required immediately after it is installed.
39
+
40
+ Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
41
+ installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
42
+ available only to #{Chef::Dist::PRODUCT}.
43
+ Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
44
+ Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
45
+ DESC
46
+
47
+ examples <<~EXAMPLES
48
+ **Compile time vs. converge time installation of gems**
49
+
50
+ To install a gem while #{Chef::Dist::PRODUCT} is configuring the node (the converge phase), set the `compile_time` property to `false`:
51
+ ```ruby
52
+ chef_gem 'right_aws' do
53
+ compile_time false
54
+ action :install
55
+ end
56
+ ```
57
+
58
+ To install a gem while the resource collection is being built (the compile phase), set the `compile_time` property to `true`:
59
+ ```ruby
60
+ chef_gem 'right_aws' do
61
+ compile_time true
62
+ action :install
63
+ end
64
+ ```
65
+
66
+ Install MySQL for Chef
67
+ ```ruby
68
+ apt_update
69
+
70
+ build_essential 'install compilation tools' do
71
+ compile_time true
72
+ end
73
+
74
+ chef_gem 'mysql'
75
+ ```
76
+ EXAMPLES
77
+
45
78
  property :package_name, String,
46
79
  description: "An optional property to set the package name if it differs from the resource block's name.",
47
80
  identity: true
@@ -49,11 +82,14 @@ class Chef
49
82
  property :version, String,
50
83
  description: "The version of a package to be installed or upgraded."
51
84
 
52
- property :gem_binary, default: "#{RbConfig::CONFIG["bindir"]}/gem", default_description: "The `gem` binary included with #{Chef::Dist::PRODUCT}.",
53
- description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be installed.",
54
- callbacks: {
55
- "The chef_gem resource is restricted to the current gem environment, use gem_package to install to other environments." => proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
56
- }
85
+ property :gem_binary, String,
86
+ default: "#{RbConfig::CONFIG["bindir"]}/gem",
87
+ default_description: "The `gem` binary included with #{Chef::Dist::PRODUCT}.",
88
+ description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used.",
89
+ callbacks: {
90
+ "The `chef_gem` resource is restricted to the current gem environment, use `gem_package` to install to other environments." =>
91
+ proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
92
+ }
57
93
  end
58
94
  end
59
95
  end
@@ -107,7 +107,7 @@ class Chef
107
107
  end
108
108
  end
109
109
 
110
- # Walks down the namespace heirarchy to return the class object for the given class name.
110
+ # Walks down the namespace hierarchy to return the class object for the given class name.
111
111
  # If the class is not available, NameError is thrown.
112
112
  #
113
113
  # @param class_full_name [String] full class name such as 'Chef::Handler::Foo' or 'MyHandler'.
@@ -118,7 +118,7 @@ class Chef
118
118
  class_name = ancestors.pop
119
119
 
120
120
  # We need to search the ancestors only for the first/uppermost namespace of the class, so we
121
- # need to enable the #const_get inherit paramenter only when we are searching in Kernel scope
121
+ # need to enable the #const_get inherit parameter only when we are searching in Kernel scope
122
122
  # (see COOK-4117).
123
123
  parent = ancestors.inject(Kernel) { |scope, const_name| scope.const_get(const_name, scope === Kernel) }
124
124
  child = parent.const_get(class_name, parent === Kernel)
@@ -45,7 +45,7 @@ class Chef
45
45
  chef_vault_secret 'root-password' do
46
46
  admins 'jtimberman,paulmooring'
47
47
  data_bag 'secrets'
48
- raw_data({'auth' => 'DontUseThisPasswordForRoot'})
48
+ raw_data({'auth' => 'DoNotUseThisPasswordForRoot'})
49
49
  search '*:*'
50
50
  end
51
51
  ```
@@ -0,0 +1,98 @@
1
+ unified_mode true
2
+
3
+ TIMEOUT_OPTS = %w{duration preserve-status foreground kill-after signal}.freeze
4
+ TIMEOUT_REGEX = /\A\S+/.freeze
5
+ WEEKDAYS = {
6
+ sunday: "0", monday: "1", tuesday: "2", wednesday: "3", thursday: "4", friday: "5", saturday: "6",
7
+ sun: "0", mon: "1", tue: "2", wed: "3", thu: "4", fri: "5", sat: "6"
8
+ }.freeze
9
+
10
+ property :minute, [Integer, String],
11
+ description: "The minute at which the cron entry should run (`0 - 59`).",
12
+ default: "*", callbacks: {
13
+ "should be a valid minute spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 0, 59) },
14
+ }
15
+
16
+ property :hour, [Integer, String],
17
+ description: "The hour at which the cron entry is to run (`0 - 23`).",
18
+ default: "*", callbacks: {
19
+ "should be a valid hour spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 0, 23) },
20
+ }
21
+
22
+ property :day, [Integer, String],
23
+ description: "The day of month at which the cron entry should run (`1 - 31`).",
24
+ default: "*", callbacks: {
25
+ "should be a valid day spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 1, 31) },
26
+ }
27
+
28
+ property :month, [Integer, String],
29
+ description: "The month in the year on which a cron entry is to run (`1 - 12`, `jan-dec`, or `*`).",
30
+ default: "*", callbacks: {
31
+ "should be a valid month spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_month(spec) },
32
+ }
33
+
34
+ property :weekday, [Integer, String, Symbol],
35
+ description: "The day of the week on which this entry is to run (`0-7`, `mon-sun`, `monday-sunday`, or `*`), where Sunday is both `0` and `7`.",
36
+ default: "*", coerce: proc { |day| weekday_in_crontab(day) },
37
+ callbacks: {
38
+ "should be a valid weekday spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_dow(spec) },
39
+ }
40
+
41
+ property :shell, String,
42
+ description: "Set the `SHELL` environment variable."
43
+
44
+ property :path, String,
45
+ description: "Set the `PATH` environment variable."
46
+
47
+ property :home, String,
48
+ description: "Set the `HOME` environment variable."
49
+
50
+ property :mailto, String,
51
+ description: "Set the `MAILTO` environment variable."
52
+
53
+ property :command, String,
54
+ description: "The command to be run, or the path to a file that contains the command to be run.",
55
+ identity: true,
56
+ required: [:create]
57
+
58
+ property :user, String,
59
+ description: "The name of the user that runs the command.",
60
+ default: "root"
61
+
62
+ property :environment, Hash,
63
+ description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of `({'ENV_VARIABLE' => 'VALUE'})`. **Note**: These variables must exist for a command to be run successfully.",
64
+ default: lazy { {} }
65
+
66
+ property :time_out, Hash,
67
+ description: "A Hash of timeouts in the form of `({'OPTION' => 'VALUE'})`. Accepted valid options are:
68
+ - `preserve-status` (BOOL, default: 'false'),
69
+ - `foreground` (BOOL, default: 'false'),
70
+ - `kill-after` (in seconds),
71
+ - `signal` (a name like 'HUP' or a number)",
72
+ default: lazy { {} },
73
+ introduced: "15.7",
74
+ coerce: proc { |h|
75
+ if h.is_a?(Hash)
76
+ invalid_keys = h.keys - TIMEOUT_OPTS
77
+ unless invalid_keys.empty?
78
+ error_msg = "Key of option time_out must be equal to one of: \"#{TIMEOUT_OPTS.join('", "')}\"! You passed \"#{invalid_keys.join(", ")}\"."
79
+ raise Chef::Exceptions::ValidationFailed, error_msg
80
+ end
81
+ unless h.values.all? { |x| x =~ TIMEOUT_REGEX }
82
+ error_msg = "Values of option time_out should be non-empty strings without any leading whitespace."
83
+ raise Chef::Exceptions::ValidationFailed, error_msg
84
+ end
85
+ h
86
+ elsif h.is_a?(Integer) || h.is_a?(String)
87
+ { "duration" => h }
88
+ end
89
+ }
90
+
91
+ private
92
+ # Convert weekday input value into crontab format that
93
+ # could be written in the crontab
94
+ # @return [Integer, String] A weekday formed as per the user inputs.
95
+ def weekday_in_crontab(day)
96
+ weekday = day.to_s.downcase.to_sym
97
+ WEEKDAYS[weekday] || day
98
+ end
@@ -0,0 +1,46 @@
1
+ #
2
+ # Author:: Bryan McLellan (btm@loftninjas.org)
3
+ # Author:: Tyler Cloke (<tyler@chef.io>)
4
+ # Copyright:: Copyright 2009-2016, Bryan McLellan
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require_relative "../../resource"
21
+ require_relative "../helpers/cron_validations"
22
+ require_relative "../../provider/cron" # do not remove. we actually need this below
23
+
24
+ class Chef
25
+ class Resource
26
+ class Cron < Chef::Resource
27
+ unified_mode true
28
+
29
+ use "cron_shared"
30
+
31
+ provides :cron
32
+
33
+ description "Use the **cron** resource to manage cron entries for time-based job scheduling. Properties for a schedule will default to * if not provided. The cron resource requires access to a crontab program, typically cron."
34
+
35
+ state_attrs :minute, :hour, :day, :month, :weekday, :user
36
+
37
+ default_action :create
38
+ allowed_actions :create, :delete
39
+
40
+ property :time, Symbol,
41
+ description: "A time interval.",
42
+ equal_to: Chef::Provider::Cron::SPECIAL_TIME_VALUES
43
+
44
+ end
45
+ end
46
+ end
@@ -15,15 +15,18 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require_relative "../resource"
19
- require_relative "helpers/cron_validations"
18
+ require_relative "../../resource"
19
+ require_relative "../helpers/cron_validations"
20
20
  require "shellwords" unless defined?(Shellwords)
21
- require_relative "../dist"
21
+ require_relative "../../dist"
22
22
 
23
23
  class Chef
24
24
  class Resource
25
25
  class CronD < Chef::Resource
26
26
  unified_mode true
27
+
28
+ use "cron_shared"
29
+
27
30
  provides :cron_d
28
31
 
29
32
  introduced "14.4"
@@ -98,92 +101,9 @@ class Chef
98
101
  description: "Schedule your cron job with one of the special predefined value instead of ** * pattern.",
99
102
  equal_to: %w{ @reboot @yearly @annually @monthly @weekly @daily @midnight @hourly }
100
103
 
101
- property :minute, [Integer, String],
102
- description: "The minute at which the cron entry should run (`0 - 59`).",
103
- default: "*", callbacks: {
104
- "should be a valid minute spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 0, 59) },
105
- }
106
-
107
- property :hour, [Integer, String],
108
- description: "The hour at which the cron entry is to run (`0 - 23`).",
109
- default: "*", callbacks: {
110
- "should be a valid hour spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 0, 23) },
111
- }
112
-
113
- property :day, [Integer, String],
114
- description: "The day of month at which the cron entry should run (`1 - 31`).",
115
- default: "*", callbacks: {
116
- "should be a valid day spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 1, 31) },
117
- }
118
-
119
- property :month, [Integer, String],
120
- description: "The month in the year on which a cron entry is to run (`1 - 12`, `jan-dec`, or `*`).",
121
- default: "*", callbacks: {
122
- "should be a valid month spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_month(spec) },
123
- }
124
-
125
- property :weekday, [Integer, String],
126
- description: "The day of the week on which this entry is to run (`0-7`, `mon-sun`, or `*`), where Sunday is both `0` and `7`.",
127
- default: "*", callbacks: {
128
- "should be a valid weekday spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_dow(spec) },
129
- }
130
-
131
- property :command, String,
132
- description: "The command to run.",
133
- required: [:create]
134
-
135
- property :user, String,
136
- description: "The name of the user that runs the command.",
137
- default: "root"
138
-
139
- property :mailto, String,
140
- description: "Set the `MAILTO` environment variable in the cron.d file."
141
-
142
- property :path, String,
143
- description: "Set the `PATH` environment variable in the cron.d file."
144
-
145
- property :home, String,
146
- description: "Set the `HOME` environment variable in the cron.d file."
147
-
148
- property :shell, String,
149
- description: "Set the `SHELL` environment variable in the cron.d file."
150
-
151
104
  property :comment, String,
152
105
  description: "A comment to place in the cron.d file."
153
106
 
154
- property :environment, Hash,
155
- description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of `({'ENV_VARIABLE' => 'VALUE'})`.",
156
- default: lazy { {} }
157
-
158
- TIMEOUT_OPTS = %w{duration preserve-status foreground kill-after signal}.freeze
159
- TIMEOUT_REGEX = /\A\S+/.freeze
160
-
161
- property :time_out, Hash,
162
- description: "A Hash of timeouts in the form of `({'OPTION' => 'VALUE'})`.
163
- Accepted valid options are:
164
- `preserve-status` (BOOL, default: 'false'),
165
- `foreground` (BOOL, default: 'false'),
166
- `kill-after` (in seconds),
167
- `signal` (a name like 'HUP' or a number)",
168
- default: lazy { {} },
169
- introduced: "15.7",
170
- coerce: proc { |h|
171
- if h.is_a?(Hash)
172
- invalid_keys = h.keys - TIMEOUT_OPTS
173
- unless invalid_keys.empty?
174
- error_msg = "Key of option time_out must be equal to one of: \"#{TIMEOUT_OPTS.join('", "')}\"! You passed \"#{invalid_keys.join(", ")}\"."
175
- raise Chef::Exceptions::ValidationFailed, error_msg
176
- end
177
- unless h.values.all? { |x| x =~ TIMEOUT_REGEX }
178
- error_msg = "Values of option time_out should be non-empty string without any leading whitespaces."
179
- raise Chef::Exceptions::ValidationFailed, error_msg
180
- end
181
- h
182
- elsif h.is_a?(Integer) || h.is_a?(String)
183
- { "duration" => h }
184
- end
185
- }
186
-
187
107
  property :mode, [String, Integer],
188
108
  description: "The octal mode of the generated crontab file.",
189
109
  default: "0600"
@@ -238,7 +158,7 @@ class Chef
238
158
 
239
159
  # @todo this is Chef 12 era cleanup. Someday we should remove it all
240
160
  template "/etc/cron.d/#{sanitized_name}" do
241
- source ::File.expand_path("../support/cron.d.erb", __FILE__)
161
+ source ::File.expand_path("../../support/cron.d.erb", __FILE__)
242
162
  local true
243
163
  mode new_resource.mode
244
164
  variables(
@@ -28,7 +28,7 @@ class Chef
28
28
  provides(:cron_manage) # legacy name @todo in Chef 15 we should { true } this so it wins over the cookbook
29
29
 
30
30
  introduced "14.4"
31
- description "Use the **cron_access** resource to manage the /etc/cron.allow and /etc/cron.deny files. Note: This resource previously shipped in the `cron` cookbook as `cron_manage`, which it can still be used as for backwards compatibility with existing Chef Infra Client releases."
31
+ description "Use the **cron_access** resource to manage cron's cron.allow and cron.deny files. Note: This resource previously shipped in the `cron` cookbook as `cron_manage`, which it can still be used as for backwards compatibility with existing Chef Infra Client releases."
32
32
  examples <<~DOC
33
33
  **Add the mike user to cron.allow**
34
34
 
@@ -58,11 +58,18 @@ class Chef
58
58
  description: "An optional property to set the user name if it differs from the resource block's name.",
59
59
  name_property: true
60
60
 
61
+ CRON_PATHS = {
62
+ "aix" => "/var/adm/cron",
63
+ "solaris" => "/etc/cron.d",
64
+ "default" => "/etc",
65
+ }.freeze
66
+
61
67
  action :allow do
62
68
  description "Add the user to the cron.allow file."
69
+ allow_path = ::File.join(value_for_platform_family(CRON_PATHS), "cron.allow")
63
70
 
64
71
  with_run_context :root do
65
- edit_resource(:template, "/etc/cron.allow") do |new_resource|
72
+ edit_resource(:template, allow_path) do |new_resource|
66
73
  source ::File.expand_path("../support/cron_access.erb", __FILE__)
67
74
  local true
68
75
  mode "0600"
@@ -76,9 +83,10 @@ class Chef
76
83
 
77
84
  action :deny do
78
85
  description "Add the user to the cron.deny file."
86
+ deny_path = ::File.join(value_for_platform_family(CRON_PATHS), "cron.deny")
79
87
 
80
88
  with_run_context :root do
81
- edit_resource(:template, "/etc/cron.deny") do |new_resource|
89
+ edit_resource(:template, deny_path) do |new_resource|
82
90
  source ::File.expand_path("../support/cron_access.erb", __FILE__)
83
91
  local true
84
92
  mode "0600"