chef 15.11.3-universal-mingw32 → 16.1.16-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -7
  3. data/README.md +1 -1
  4. data/Rakefile +44 -16
  5. data/chef.gemspec +6 -4
  6. data/distro/powershell/chef/chef.psm1 +3 -3
  7. data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
  8. data/lib/chef/action_collection.rb +16 -5
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +18 -1
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/knife.rb +1 -1
  13. data/lib/chef/chef_class.rb +4 -4
  14. data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
  15. data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  17. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +3 -3
  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 +3 -3
  21. data/lib/chef/client.rb +16 -14
  22. data/lib/chef/config.rb +1 -1
  23. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook/gem_installer.rb +1 -1
  25. data/lib/chef/cookbook/metadata.rb +45 -22
  26. data/lib/chef/cookbook_loader.rb +1 -1
  27. data/lib/chef/cookbook_manifest.rb +1 -1
  28. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  29. data/lib/chef/cookbook_version.rb +38 -3
  30. data/lib/chef/data_collector.rb +1 -1
  31. data/lib/chef/data_collector/error_handlers.rb +1 -1
  32. data/lib/chef/data_collector/run_end_message.rb +7 -1
  33. data/lib/chef/decorator/lazy_array.rb +2 -2
  34. data/lib/chef/deprecated.rb +4 -0
  35. data/lib/chef/digester.rb +4 -4
  36. data/lib/chef/dist.rb +8 -0
  37. data/lib/chef/dsl/chef_vault.rb +84 -0
  38. data/lib/chef/dsl/declare_resource.rb +7 -5
  39. data/lib/chef/dsl/platform_introspection.rb +3 -2
  40. data/lib/chef/dsl/recipe.rb +7 -12
  41. data/lib/chef/dsl/universal.rb +3 -7
  42. data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
  43. data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/formatters/base.rb +1 -1
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  48. data/lib/chef/http.rb +1 -1
  49. data/lib/chef/http/decompressor.rb +1 -1
  50. data/lib/chef/http/http_request.rb +3 -2
  51. data/lib/chef/json_compat.rb +1 -1
  52. data/lib/chef/key.rb +1 -1
  53. data/lib/chef/knife.rb +2 -4
  54. data/lib/chef/knife/acl_add.rb +57 -0
  55. data/lib/chef/knife/acl_base.rb +183 -0
  56. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  57. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  58. data/lib/chef/knife/acl_remove.rb +62 -0
  59. data/lib/chef/knife/acl_show.rb +56 -0
  60. data/lib/chef/knife/bootstrap.rb +84 -90
  61. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +2 -2
  62. data/lib/chef/knife/bootstrap/client_builder.rb +2 -2
  63. data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
  64. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +12 -12
  65. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  66. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  67. data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
  68. data/lib/chef/knife/core/node_presenter.rb +2 -2
  69. data/lib/chef/knife/core/status_presenter.rb +5 -5
  70. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  71. data/lib/chef/knife/core/ui.rb +17 -1
  72. data/lib/chef/knife/core/windows_bootstrap_context.rb +44 -42
  73. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  74. data/lib/chef/knife/group_add.rb +55 -0
  75. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  76. data/lib/chef/knife/group_destroy.rb +53 -0
  77. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  78. data/lib/chef/knife/group_remove.rb +56 -0
  79. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  80. data/lib/chef/knife/key_create_base.rb +1 -1
  81. data/lib/chef/knife/key_edit_base.rb +1 -1
  82. data/lib/chef/knife/ssh.rb +12 -31
  83. data/lib/chef/knife/status.rb +3 -3
  84. data/lib/chef/knife/supermarket_download.rb +1 -2
  85. data/lib/chef/knife/supermarket_install.rb +2 -3
  86. data/lib/chef/knife/supermarket_list.rb +1 -2
  87. data/lib/chef/knife/supermarket_search.rb +1 -2
  88. data/lib/chef/knife/supermarket_share.rb +1 -2
  89. data/lib/chef/knife/supermarket_show.rb +1 -2
  90. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  91. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  92. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  93. data/lib/chef/knife/user_invite_list.rb +34 -0
  94. data/lib/chef/knife/user_invite_rescind.rb +63 -0
  95. data/lib/chef/knife/yaml_convert.rb +91 -0
  96. data/lib/chef/mixin/api_version_request_handling.rb +1 -1
  97. data/lib/chef/mixin/checksum.rb +0 -1
  98. data/lib/chef/mixin/openssl_helper.rb +4 -4
  99. data/lib/chef/mixin/powershell_exec.rb +10 -1
  100. data/lib/chef/mixin/powershell_out.rb +1 -1
  101. data/lib/chef/mixin/properties.rb +16 -2
  102. data/lib/chef/mixin/shell_out.rb +1 -5
  103. data/lib/chef/monkey_patches/net_http.rb +0 -4
  104. data/lib/chef/node.rb +18 -6
  105. data/lib/chef/node/attribute.rb +2 -2
  106. data/lib/chef/node/immutable_collections.rb +1 -1
  107. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  108. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  109. data/lib/chef/node_map.rb +5 -31
  110. data/lib/chef/platform/priority_map.rb +4 -4
  111. data/lib/chef/platform/query_helpers.rb +6 -34
  112. data/lib/chef/policy_builder/policyfile.rb +1 -1
  113. data/lib/chef/powershell.rb +14 -0
  114. data/lib/chef/property.rb +24 -6
  115. data/lib/chef/provider.rb +40 -6
  116. data/lib/chef/provider/cron.rb +2 -2
  117. data/lib/chef/provider/directory.rb +3 -3
  118. data/lib/chef/provider/dsc_resource.rb +1 -1
  119. data/lib/chef/provider/dsc_script.rb +1 -1
  120. data/lib/chef/provider/execute.rb +3 -9
  121. data/lib/chef/provider/file.rb +6 -6
  122. data/lib/chef/provider/git.rb +84 -27
  123. data/lib/chef/provider/group.rb +4 -4
  124. data/lib/chef/provider/http_request.rb +6 -6
  125. data/lib/chef/provider/ifconfig.rb +4 -4
  126. data/lib/chef/provider/launchd.rb +45 -64
  127. data/lib/chef/provider/link.rb +2 -2
  128. data/lib/chef/provider/mount.rb +5 -5
  129. data/lib/chef/provider/osx_profile.rb +7 -3
  130. data/lib/chef/provider/package.rb +2 -2
  131. data/lib/chef/provider/package/cab.rb +5 -6
  132. data/lib/chef/provider/package/chocolatey.rb +1 -3
  133. data/lib/chef/provider/package/dnf.rb +66 -10
  134. data/lib/chef/provider/package/dnf/dnf_helper.py +85 -26
  135. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  136. data/lib/chef/provider/package/dnf/version.rb +5 -1
  137. data/lib/chef/provider/package/dpkg.rb +1 -1
  138. data/lib/chef/provider/package/freebsd/base.rb +2 -1
  139. data/lib/chef/provider/package/homebrew.rb +107 -43
  140. data/lib/chef/provider/package/macports.rb +0 -2
  141. data/lib/chef/provider/package/msu.rb +4 -1
  142. data/lib/chef/provider/package/pacman.rb +25 -34
  143. data/lib/chef/provider/package/portage.rb +1 -0
  144. data/lib/chef/provider/package/powershell.rb +1 -1
  145. data/lib/chef/provider/package/rubygems.rb +30 -3
  146. data/lib/chef/provider/package/windows.rb +29 -53
  147. data/lib/chef/provider/package/windows/msi.rb +2 -2
  148. data/lib/chef/provider/package/yum.rb +1 -9
  149. data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
  150. data/lib/chef/provider/package/zypper.rb +0 -1
  151. data/lib/chef/provider/powershell_script.rb +5 -11
  152. data/lib/chef/provider/registry_key.rb +4 -4
  153. data/lib/chef/provider/remote_directory.rb +5 -5
  154. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  155. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  156. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  157. data/lib/chef/provider/route.rb +5 -3
  158. data/lib/chef/provider/ruby_block.rb +1 -1
  159. data/lib/chef/provider/script.rb +2 -2
  160. data/lib/chef/provider/service.rb +8 -8
  161. data/lib/chef/provider/service/aixinit.rb +1 -1
  162. data/lib/chef/provider/service/arch.rb +1 -1
  163. data/lib/chef/provider/service/debian.rb +30 -28
  164. data/lib/chef/provider/service/macosx.rb +16 -10
  165. data/lib/chef/provider/service/systemd.rb +12 -12
  166. data/lib/chef/provider/service/upstart.rb +1 -1
  167. data/lib/chef/provider/service/windows.rb +5 -11
  168. data/lib/chef/provider/subversion.rb +25 -5
  169. data/lib/chef/provider/systemd_unit.rb +26 -25
  170. data/lib/chef/provider/user.rb +6 -6
  171. data/lib/chef/provider/user/aix.rb +1 -1
  172. data/lib/chef/provider/user/dscl.rb +6 -6
  173. data/lib/chef/provider/user/mac.rb +20 -15
  174. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  175. data/lib/chef/provider/windows_env.rb +3 -3
  176. data/lib/chef/provider/windows_script.rb +2 -2
  177. data/lib/chef/provider/windows_task.rb +10 -10
  178. data/lib/chef/providers.rb +0 -6
  179. data/lib/chef/recipe.rb +36 -0
  180. data/lib/chef/resource.rb +44 -57
  181. data/lib/chef/resource/action_class.rb +24 -22
  182. data/lib/chef/resource/alternatives.rb +210 -0
  183. data/lib/chef/resource/apt_package.rb +33 -3
  184. data/lib/chef/resource/apt_preference.rb +103 -7
  185. data/lib/chef/resource/apt_repository.rb +357 -18
  186. data/lib/chef/resource/apt_update.rb +58 -5
  187. data/lib/chef/resource/archive_file.rb +6 -5
  188. data/lib/chef/resource/bash.rb +3 -1
  189. data/lib/chef/resource/batch.rb +1 -1
  190. data/lib/chef/resource/bff_package.rb +10 -2
  191. data/lib/chef/resource/breakpoint.rb +1 -2
  192. data/lib/chef/resource/build_essential.rb +49 -51
  193. data/lib/chef/resource/cab_package.rb +9 -2
  194. data/lib/chef/resource/chef_client_cron.rb +228 -0
  195. data/lib/chef/resource/chef_client_scheduled_task.rb +201 -0
  196. data/lib/chef/resource/chef_client_systemd_timer.rb +180 -0
  197. data/lib/chef/resource/chef_gem.rb +15 -18
  198. data/lib/chef/resource/chef_handler.rb +5 -4
  199. data/lib/chef/resource/chef_sleep.rb +7 -5
  200. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  201. data/lib/chef/resource/chocolatey_config.rb +8 -4
  202. data/lib/chef/resource/chocolatey_feature.rb +7 -4
  203. data/lib/chef/resource/chocolatey_package.rb +7 -4
  204. data/lib/chef/resource/chocolatey_source.rb +7 -4
  205. data/lib/chef/resource/cookbook_file.rb +4 -3
  206. data/lib/chef/resource/cron.rb +34 -80
  207. data/lib/chef/resource/cron_access.rb +10 -6
  208. data/lib/chef/resource/cron_d.rb +44 -95
  209. data/lib/chef/resource/csh.rb +3 -1
  210. data/lib/chef/resource/directory.rb +3 -3
  211. data/lib/chef/resource/dmg_package.rb +22 -19
  212. data/lib/chef/resource/dnf_package.rb +3 -4
  213. data/lib/chef/resource/dpkg_package.rb +3 -2
  214. data/lib/chef/resource/dsc_resource.rb +6 -4
  215. data/lib/chef/resource/dsc_script.rb +3 -2
  216. data/lib/chef/resource/execute.rb +15 -14
  217. data/lib/chef/resource/file.rb +14 -9
  218. data/lib/chef/resource/freebsd_package.rb +3 -2
  219. data/lib/chef/resource/gem_package.rb +19 -11
  220. data/lib/chef/resource/group.rb +5 -2
  221. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  222. data/lib/chef/resource/homebrew_cask.rb +3 -2
  223. data/lib/chef/resource/homebrew_package.rb +5 -3
  224. data/lib/chef/resource/homebrew_tap.rb +3 -2
  225. data/lib/chef/resource/hostname.rb +26 -20
  226. data/lib/chef/resource/http_request.rb +1 -2
  227. data/lib/chef/resource/ifconfig.rb +8 -8
  228. data/lib/chef/resource/ips_package.rb +11 -3
  229. data/lib/chef/resource/kernel_module.rb +30 -30
  230. data/lib/chef/resource/ksh.rb +3 -1
  231. data/lib/chef/resource/launchd.rb +3 -3
  232. data/lib/chef/resource/link.rb +5 -27
  233. data/lib/chef/resource/locale.rb +60 -26
  234. data/lib/chef/resource/log.rb +13 -2
  235. data/lib/chef/resource/lwrp_base.rb +1 -1
  236. data/lib/chef/resource/macos_userdefaults.rb +18 -10
  237. data/lib/chef/resource/macosx_service.rb +3 -2
  238. data/lib/chef/resource/macports_package.rb +10 -2
  239. data/lib/chef/resource/mdadm.rb +63 -3
  240. data/lib/chef/resource/mount.rb +4 -1
  241. data/lib/chef/resource/msu_package.rb +19 -2
  242. data/lib/chef/resource/notify_group.rb +8 -3
  243. data/lib/chef/resource/ohai.rb +20 -4
  244. data/lib/chef/resource/ohai_hint.rb +4 -13
  245. data/lib/chef/resource/openbsd_package.rb +10 -2
  246. data/lib/chef/resource/openssl_dhparam.rb +11 -2
  247. data/lib/chef/resource/openssl_ec_private_key.rb +24 -2
  248. data/lib/chef/resource/openssl_ec_public_key.rb +22 -2
  249. data/lib/chef/resource/openssl_rsa_private_key.rb +21 -2
  250. data/lib/chef/resource/openssl_rsa_public_key.rb +23 -2
  251. data/lib/chef/resource/openssl_x509_certificate.rb +38 -2
  252. data/lib/chef/resource/openssl_x509_crl.rb +13 -2
  253. data/lib/chef/resource/openssl_x509_request.rb +38 -2
  254. data/lib/chef/resource/osx_profile.rb +4 -3
  255. data/lib/chef/resource/package.rb +3 -2
  256. data/lib/chef/resource/pacman_package.rb +3 -2
  257. data/lib/chef/resource/paludis_package.rb +13 -4
  258. data/lib/chef/resource/perl.rb +3 -1
  259. data/lib/chef/resource/plist.rb +207 -0
  260. data/lib/chef/resource/portage_package.rb +14 -4
  261. data/lib/chef/resource/powershell_package.rb +2 -4
  262. data/lib/chef/resource/powershell_package_source.rb +4 -2
  263. data/lib/chef/resource/powershell_script.rb +8 -18
  264. data/lib/chef/resource/python.rb +3 -1
  265. data/lib/chef/resource/reboot.rb +1 -2
  266. data/lib/chef/resource/registry_key.rb +2 -3
  267. data/lib/chef/resource/remote_directory.rb +3 -1
  268. data/lib/chef/resource/remote_file.rb +3 -2
  269. data/lib/chef/resource/rhsm_errata.rb +1 -4
  270. data/lib/chef/resource/rhsm_errata_level.rb +1 -2
  271. data/lib/chef/resource/rhsm_register.rb +3 -3
  272. data/lib/chef/resource/rhsm_repo.rb +4 -3
  273. data/lib/chef/resource/rhsm_subscription.rb +5 -4
  274. data/lib/chef/resource/route.rb +6 -2
  275. data/lib/chef/resource/rpm_package.rb +13 -3
  276. data/lib/chef/resource/ruby.rb +3 -1
  277. data/lib/chef/resource/ruby_block.rb +2 -5
  278. data/lib/chef/resource/scm/_scm.rb +49 -0
  279. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  280. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +10 -7
  281. data/lib/chef/resource/script.rb +7 -4
  282. data/lib/chef/resource/service.rb +7 -8
  283. data/lib/chef/resource/smartos_package.rb +10 -2
  284. data/lib/chef/resource/snap_package.rb +4 -2
  285. data/lib/chef/resource/solaris_package.rb +10 -2
  286. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  287. data/lib/chef/resource/sudo.rb +11 -11
  288. data/lib/chef/resource/support/cron.d.erb +1 -1
  289. data/lib/chef/resource/support/cron_access.erb +1 -1
  290. data/lib/chef/resource/support/sudoer.erb +1 -2
  291. data/lib/chef/resource/support/ulimit.erb +41 -0
  292. data/lib/chef/resource/swap_file.rb +7 -5
  293. data/lib/chef/resource/sysctl.rb +63 -4
  294. data/lib/chef/resource/systemd_unit.rb +6 -4
  295. data/lib/chef/resource/template.rb +0 -1
  296. data/lib/chef/resource/timezone.rb +8 -19
  297. data/lib/chef/resource/user.rb +3 -5
  298. data/lib/chef/resource/user/aix_user.rb +0 -2
  299. data/lib/chef/resource/user/dscl_user.rb +1 -1
  300. data/lib/chef/resource/user/linux_user.rb +0 -2
  301. data/lib/chef/resource/user/mac_user.rb +1 -1
  302. data/lib/chef/resource/user/pw_user.rb +0 -2
  303. data/lib/chef/resource/user/solaris_user.rb +0 -2
  304. data/lib/chef/resource/user/windows_user.rb +0 -2
  305. data/lib/chef/resource/user_ulimit.rb +116 -0
  306. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  307. data/lib/chef/resource/windows_ad_join.rb +20 -7
  308. data/lib/chef/resource/windows_auto_run.rb +2 -3
  309. data/lib/chef/resource/windows_certificate.rb +3 -3
  310. data/lib/chef/resource/windows_dfs_folder.rb +1 -2
  311. data/lib/chef/resource/windows_dfs_namespace.rb +1 -2
  312. data/lib/chef/resource/windows_dfs_server.rb +2 -3
  313. data/lib/chef/resource/windows_dns_record.rb +0 -1
  314. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  315. data/lib/chef/resource/windows_env.rb +12 -4
  316. data/lib/chef/resource/windows_feature.rb +59 -4
  317. data/lib/chef/resource/windows_feature_dism.rb +24 -24
  318. data/lib/chef/resource/windows_feature_powershell.rb +44 -78
  319. data/lib/chef/resource/windows_firewall_rule.rb +121 -8
  320. data/lib/chef/resource/windows_font.rb +10 -2
  321. data/lib/chef/resource/windows_package.rb +76 -7
  322. data/lib/chef/resource/windows_pagefile.rb +31 -4
  323. data/lib/chef/resource/windows_path.rb +18 -2
  324. data/lib/chef/resource/windows_printer.rb +26 -7
  325. data/lib/chef/resource/windows_printer_port.rb +29 -2
  326. data/lib/chef/resource/windows_script.rb +3 -4
  327. data/lib/chef/resource/windows_security_policy.rb +119 -0
  328. data/lib/chef/resource/windows_service.rb +46 -32
  329. data/lib/chef/resource/windows_share.rb +22 -6
  330. data/lib/chef/resource/windows_shortcut.rb +13 -3
  331. data/lib/chef/resource/windows_task.rb +129 -16
  332. data/lib/chef/resource/windows_uac.rb +20 -2
  333. data/lib/chef/resource/windows_user_privilege.rb +199 -0
  334. data/lib/chef/resource/windows_workgroup.rb +19 -4
  335. data/lib/chef/resource/yum_package.rb +91 -7
  336. data/lib/chef/resource/yum_repository.rb +30 -12
  337. data/lib/chef/resource/zypper_package.rb +32 -5
  338. data/lib/chef/resource/zypper_repository.rb +19 -6
  339. data/lib/chef/resource_builder.rb +8 -0
  340. data/lib/chef/resource_inspector.rb +3 -2
  341. data/lib/chef/resource_resolver.rb +7 -14
  342. data/lib/chef/resources.rb +11 -3
  343. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  344. data/lib/chef/scan_access_control.rb +1 -1
  345. data/lib/chef/shell.rb +22 -0
  346. data/lib/chef/shell/ext.rb +1 -1
  347. data/lib/chef/version.rb +1 -1
  348. data/lib/chef/win32/api.rb +2 -2
  349. data/lib/chef/win32/api/error.rb +3 -1
  350. data/lib/chef/win32/api/file.rb +1 -1
  351. data/lib/chef/win32/api/net.rb +1 -0
  352. data/lib/chef/win32/api/security.rb +6 -0
  353. data/lib/chef/win32/file.rb +1 -9
  354. data/lib/chef/win32/mutex.rb +1 -1
  355. data/lib/chef/win32/net.rb +1 -0
  356. data/lib/chef/win32/security.rb +40 -2
  357. data/lib/chef/win32/security/sid.rb +4 -4
  358. data/spec/functional/assets/inittest +8 -7
  359. data/spec/functional/knife/ssh_spec.rb +23 -19
  360. data/spec/functional/resource/cron_spec.rb +10 -29
  361. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  362. data/spec/functional/resource/git_spec.rb +184 -134
  363. data/spec/functional/resource/insserv_spec.rb +1 -1
  364. data/spec/functional/resource/launchd_spec.rb +232 -0
  365. data/spec/functional/resource/link_spec.rb +3 -3
  366. data/spec/functional/resource/locale_spec.rb +13 -2
  367. data/spec/functional/resource/msu_package_spec.rb +5 -2
  368. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  369. data/spec/functional/resource/remote_file_spec.rb +1 -1
  370. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  371. data/spec/functional/resource/windows_task_spec.rb +4 -4
  372. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  373. data/spec/functional/run_lock_spec.rb +1 -1
  374. data/spec/functional/shell_spec.rb +1 -1
  375. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  376. data/spec/functional/version_spec.rb +1 -1
  377. data/spec/functional/win32/registry_spec.rb +0 -6
  378. data/spec/functional/win32/security_spec.rb +22 -0
  379. data/spec/integration/client/client_spec.rb +123 -2
  380. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  381. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  382. data/spec/integration/knife/raw_spec.rb +34 -6
  383. data/spec/integration/knife/redirection_spec.rb +2 -2
  384. data/spec/integration/knife/show_spec.rb +32 -3
  385. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +3 -3
  386. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  387. data/spec/integration/recipes/notifies_spec.rb +49 -20
  388. data/spec/integration/recipes/notifying_block_spec.rb +8 -5
  389. data/spec/integration/recipes/provider_choice.rb +2 -0
  390. data/spec/integration/recipes/recipe_dsl_spec.rb +45 -143
  391. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  392. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -1
  393. data/spec/integration/recipes/resource_load_spec.rb +133 -12
  394. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  395. data/spec/integration/solo/solo_spec.rb +3 -3
  396. data/spec/spec_helper.rb +18 -3
  397. data/spec/support/chef_helpers.rb +2 -2
  398. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  399. data/spec/support/platform_helpers.rb +2 -20
  400. data/spec/support/recipe_dsl_helper.rb +83 -0
  401. data/spec/support/shared/functional/http.rb +2 -2
  402. data/spec/support/shared/functional/windows_script.rb +3 -16
  403. data/spec/support/shared/integration/knife_support.rb +9 -6
  404. data/spec/support/shared/unit/mock_shellout.rb +1 -1
  405. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
  406. data/spec/unit/application/apply_spec.rb +3 -0
  407. data/spec/unit/application/client_spec.rb +5 -1
  408. data/spec/unit/application_spec.rb +1 -2
  409. data/spec/unit/client_spec.rb +7 -5
  410. data/spec/unit/cookbook/gem_installer_spec.rb +2 -2
  411. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  412. data/spec/unit/data_collector_spec.rb +39 -18
  413. data/spec/unit/file_access_control_spec.rb +1 -1
  414. data/spec/unit/json_compat_spec.rb +1 -1
  415. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  416. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  417. data/spec/unit/knife/bootstrap_spec.rb +20 -38
  418. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  419. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  420. data/spec/unit/knife/core/ui_spec.rb +16 -0
  421. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +9 -63
  422. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  423. data/spec/unit/knife/ssh_spec.rb +8 -111
  424. data/spec/unit/knife/status_spec.rb +1 -1
  425. data/spec/unit/knife_spec.rb +18 -0
  426. data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
  427. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  428. data/spec/unit/mixin/shell_out_spec.rb +25 -31
  429. data/spec/unit/node/attribute_spec.rb +3 -3
  430. data/spec/unit/node_spec.rb +24 -0
  431. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  432. data/spec/unit/property/state_spec.rb +12 -7
  433. data/spec/unit/property/validation_spec.rb +25 -1
  434. data/spec/unit/property_spec.rb +12 -9
  435. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  436. data/spec/unit/provider/apt_repository_spec.rb +34 -36
  437. data/spec/unit/provider/apt_update_spec.rb +12 -11
  438. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  439. data/spec/unit/provider/cron_spec.rb +2 -2
  440. data/spec/unit/provider/directory_spec.rb +4 -15
  441. data/spec/unit/provider/file_spec.rb +4 -4
  442. data/spec/unit/provider/git_spec.rb +41 -1
  443. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  444. data/spec/unit/provider/launchd_spec.rb +8 -50
  445. data/spec/unit/provider/link_spec.rb +0 -1
  446. data/spec/unit/provider/log_spec.rb +3 -3
  447. data/spec/unit/provider/mdadm_spec.rb +3 -3
  448. data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
  449. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  450. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  451. data/spec/unit/provider/package/portage_spec.rb +2 -2
  452. data/spec/unit/provider/package/powershell_spec.rb +3 -2
  453. data/spec/unit/provider/package/rubygems_spec.rb +211 -26
  454. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  455. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  456. data/spec/unit/provider/remote_file_spec.rb +3 -4
  457. data/spec/unit/provider/service/debian_service_spec.rb +34 -13
  458. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  459. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  460. data/spec/unit/provider/subversion_spec.rb +4 -2
  461. data/spec/unit/provider/template_spec.rb +3 -4
  462. data/spec/unit/provider/zypper_repository_spec.rb +17 -17
  463. data/spec/unit/provider_resolver_spec.rb +4 -4
  464. data/spec/unit/recipe_spec.rb +68 -0
  465. data/spec/unit/resource/alternatives_spec.rb +120 -0
  466. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  467. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  468. data/spec/unit/resource/apt_update_spec.rb +0 -18
  469. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  470. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  471. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  472. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  473. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  474. data/spec/unit/resource/cron_d_spec.rb +6 -48
  475. data/spec/unit/resource/cron_spec.rb +4 -10
  476. data/spec/unit/resource/gem_package_spec.rb +3 -3
  477. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  478. data/spec/unit/resource/link_spec.rb +0 -4
  479. data/spec/unit/resource/locale_spec.rb +0 -34
  480. data/spec/unit/resource/msu_package_spec.rb +4 -0
  481. data/spec/unit/resource/ohai_spec.rb +56 -2
  482. data/spec/unit/resource/plist_spec.rb +130 -0
  483. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  484. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  485. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  486. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  487. data/spec/unit/resource/service_spec.rb +4 -0
  488. data/spec/unit/resource/user_spec.rb +2 -2
  489. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  490. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  491. data/spec/unit/resource/windows_feature_powershell_spec.rb +2 -17
  492. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  493. data/spec/unit/resource/windows_package_spec.rb +14 -0
  494. data/spec/unit/resource/windows_service_spec.rb +9 -0
  495. data/spec/unit/resource_reporter_spec.rb +2 -6
  496. data/spec/unit/resource_spec.rb +10 -3
  497. data/spec/unit/run_lock_spec.rb +1 -1
  498. data/spec/unit/scan_access_control_spec.rb +1 -1
  499. data/spec/unit/search/query_spec.rb +1 -1
  500. data/spec/unit/win32/registry_spec.rb +1 -1
  501. data/tasks/rspec.rb +6 -14
  502. metadata +92 -37
  503. data/lib/chef/dsl/core.rb +0 -52
  504. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  505. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  506. data/lib/chef/provider/apt_preference.rb +0 -93
  507. data/lib/chef/provider/apt_repository.rb +0 -358
  508. data/lib/chef/provider/apt_update.rb +0 -79
  509. data/lib/chef/provider/log.rb +0 -43
  510. data/lib/chef/provider/mdadm.rb +0 -85
  511. data/lib/chef/provider/ohai.rb +0 -45
  512. data/lib/chef/resource/git.rb +0 -37
  513. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -21,13 +21,15 @@ require_relative "../resource"
21
21
  class Chef
22
22
  class Resource
23
23
  class AptUpdate < Chef::Resource
24
- resource_name :apt_update
24
+ unified_mode true
25
+
25
26
  provides(:apt_update) { true }
26
27
 
27
- description "Use the apt_update resource to manage APT repository updates on Debian and Ubuntu platforms."
28
+ description "Use the **apt_update** resource to manage APT repository updates on Debian and Ubuntu platforms."
28
29
  introduced "12.7"
29
30
  examples <<~DOC
30
- Update the Apt repository at a specified interval
31
+ **Update the Apt repository at a specified interval**:
32
+
31
33
  ```ruby
32
34
  apt_update 'all platforms' do
33
35
  frequency 86400
@@ -35,7 +37,8 @@ class Chef
35
37
  end
36
38
  ```
37
39
 
38
- Update the Apt repository at the start of a Chef Infra Client run
40
+ **Update the Apt repository at the start of a Chef Infra Client run**:
41
+
39
42
  ```ruby
40
43
  apt_update 'update'
41
44
  ```
@@ -45,11 +48,61 @@ class Chef
45
48
  property :name, String, default: ""
46
49
 
47
50
  property :frequency, Integer,
48
- description: "Determines how frequently (in seconds) APT repository updates are made. Use this property when the :periodic action is specified.",
51
+ description: "Determines how frequently (in seconds) APT repository updates are made. Use this property when the `:periodic` action is specified.",
49
52
  default: 86_400
50
53
 
51
54
  default_action :periodic
52
55
  allowed_actions :update, :periodic
56
+
57
+ action_class do
58
+ APT_CONF_DIR = "/etc/apt/apt.conf.d".freeze
59
+ STAMP_DIR = "/var/lib/apt/periodic".freeze
60
+
61
+ # Determines whether we need to run `apt-get update`
62
+ #
63
+ # @return [Boolean]
64
+ def apt_up_to_date?
65
+ ::File.exist?("#{STAMP_DIR}/update-success-stamp") &&
66
+ ::File.mtime("#{STAMP_DIR}/update-success-stamp") > Time.now - new_resource.frequency
67
+ end
68
+
69
+ def do_update
70
+ [STAMP_DIR, APT_CONF_DIR].each do |d|
71
+ directory d do
72
+ recursive true
73
+ end
74
+ end
75
+
76
+ file "#{APT_CONF_DIR}/15update-stamp" do
77
+ content "APT::Update::Post-Invoke-Success {\"touch #{STAMP_DIR}/update-success-stamp 2>/dev/null || true\";};\n"
78
+ action :create_if_missing
79
+ end
80
+
81
+ execute "apt-get -q update" do
82
+ command [ "apt-get", "-q", "update" ]
83
+ default_env true
84
+ end
85
+ end
86
+ end
87
+
88
+ action :periodic do
89
+ return unless debian?
90
+
91
+ unless apt_up_to_date?
92
+ converge_by "update new lists of packages" do
93
+ do_update
94
+ end
95
+ end
96
+ end
97
+
98
+ action :update do
99
+ return unless debian?
100
+
101
+ converge_by "force update new lists of packages" do
102
+ do_update
103
+ end
104
+ end
105
+
53
106
  end
54
107
  end
55
108
  end
@@ -23,15 +23,16 @@ require_relative "../resource"
23
23
  class Chef
24
24
  class Resource
25
25
  class ArchiveFile < Chef::Resource
26
+ unified_mode true
26
27
 
27
- resource_name :archive_file
28
28
  provides :archive_file
29
29
  provides :libarchive_file # legacy cookbook name
30
30
 
31
31
  introduced "15.0"
32
- description "Use the archive_file resource to extract archive files to disk. This resource uses the libarchive library to extract multiple archive formats including tar, gzip, bzip, and zip formats."
32
+ description "Use the **archive_file** resource to extract archive files to disk. This resource uses the libarchive library to extract multiple archive formats including tar, gzip, bzip, and zip formats."
33
33
  examples <<~DOC
34
- Extract a zip file to a specified directory
34
+ **Extract a zip file to a specified directory**:
35
+
35
36
  ```ruby
36
37
  archive_file 'Precompiled.zip' do
37
38
  path '/tmp/Precompiled.zip'
@@ -60,11 +61,11 @@ class Chef
60
61
  required: true
61
62
 
62
63
  property :options, [Array, Symbol],
63
- description: "An array of symbols representing extraction flags. Example: :no_overwrite to prevent overwriting files on disk. By default, this properly sets :time which preserves the modification timestamps of files in the archive when writing them to disk.",
64
+ description: "An array of symbols representing extraction flags. Example: `:no_overwrite` to prevent overwriting files on disk. By default, this properly sets `:time` which preserves the modification timestamps of files in the archive when writing them to disk.",
64
65
  default: lazy { [:time] }
65
66
 
66
67
  property :overwrite, [TrueClass, FalseClass, :auto],
67
- description: "Should the resource overwrite the destination file contents if they already exist? If set to :auto the date stamp of files within the archive will be compared to those on disk and disk contents will be overwritten if they differ. This may cause unintended consequences if disk date stamps are changed between runs, which will result in the files being overwritten during each client run. Make sure to properly test any change to this property.",
68
+ description: "Should the resource overwrite the destination file contents if they already exist? If set to `:auto` the date stamp of files within the archive will be compared to those on disk and disk contents will be overwritten if they differ. This may cause unintended consequences if disk date stamps are changed between runs, which will result in the files being overwritten during each client run. Make sure to properly test any change to this property.",
68
69
  default: false
69
70
 
70
71
  # backwards compatibility for the legacy cookbook names
@@ -24,7 +24,9 @@ class Chef
24
24
  class Bash < Chef::Resource::Script
25
25
  unified_mode true
26
26
 
27
- description "Use the bash resource to execute scripts using the Bash interpreter. This resource may also use any of the actions and properties that are available to the execute resource. 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."
27
+ provides :bash
28
+
29
+ description "Use the **bash** resource to execute scripts using the Bash interpreter. This resource may also use any of the actions and properties that are available to the execute resource. 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."
28
30
 
29
31
  def initialize(name, run_context = nil)
30
32
  super
@@ -25,7 +25,7 @@ class Chef
25
25
 
26
26
  provides :batch
27
27
 
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."
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
30
  def initialize(name, run_context = nil)
31
31
  super(name, run_context, nil, "cmd.exe")
@@ -21,11 +21,19 @@ require_relative "package"
21
21
  class Chef
22
22
  class Resource
23
23
  class BffPackage < Chef::Resource::Package
24
- resource_name :bff_package
24
+ unified_mode true
25
+
25
26
  provides :bff_package
26
27
 
27
- description "Use the bff_package resource to manage packages for the AIX platform using the installp utility. When a package is installed from a local file, it must be added to the node using the remote_file or cookbook_file resources."
28
+ description "Use the **bff_package** resource to manage packages for the AIX platform using the installp utility. When a package is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources."
28
29
  introduced "12.0"
30
+
31
+ property :package_name, String,
32
+ description: "An optional property to set the package name if it differs from the resource block's name.",
33
+ identity: true
34
+
35
+ property :version, String,
36
+ description: "The version of a package to be installed or upgraded."
29
37
  end
30
38
  end
31
39
  end
@@ -25,9 +25,8 @@ class Chef
25
25
  unified_mode true
26
26
 
27
27
  provides :breakpoint, target_mode: true
28
- resource_name :breakpoint
29
28
 
30
- description "Use the breakpoint resource to add breakpoints to recipes. Run the #{Chef::Dist::SHELL} in #{Chef::Dist::PRODUCT} mode, and then use those breakpoints to debug recipes. Breakpoints are ignored by the #{Chef::Dist::CLIENT} during an actual #{Chef::Dist::CLIENT} run. That said, breakpoints are typically used to debug recipes only when running them in a non-production environment, after which they are removed from those recipes before the parent cookbook is uploaded to the Chef server."
29
+ description "Use the **breakpoint** resource to add breakpoints to recipes. Run the #{Chef::Dist::SHELL} in #{Chef::Dist::PRODUCT} mode, and then use those breakpoints to debug recipes. Breakpoints are ignored by the #{Chef::Dist::CLIENT} during an actual #{Chef::Dist::CLIENT} run. That said, breakpoints are typically used to debug recipes only when running them in a non-production environment, after which they are removed from those recipes before the parent cookbook is uploaded to the Chef server."
31
30
  introduced "12.0"
32
31
 
33
32
  default_action :break
@@ -20,34 +20,42 @@ require "plist"
20
20
  class Chef
21
21
  class Resource
22
22
  class BuildEssential < Chef::Resource
23
- resource_name :build_essential
23
+ unified_mode true
24
+
24
25
  provides(:build_essential) { true }
25
26
 
26
- description "Use the build_essential resource to install the packages required for compiling C software from source."
27
+ description "Use the **build_essential** resource to install the packages required for compiling C software from source."
27
28
  introduced "14.0"
28
29
  examples <<~DOC
29
- Install compilation packages
30
+ **Install compilation packages**:
31
+
30
32
  ```ruby
31
33
  build_essential
32
34
  ```
33
35
 
34
- Install compilation packages during the compilation phase
36
+ **Install compilation packages during the compilation phase**:
37
+
35
38
  ```ruby
36
39
  build_essential 'Install compilation tools' do
37
40
  compile_time true
38
41
  end
39
42
  ```
43
+
44
+ **Upgrade compilation packages on macOS systems**:
45
+
46
+ ```ruby
47
+ build_essential 'Install compilation tools' do
48
+ action :upgrade
49
+ end
50
+ ```
40
51
  DOC
41
52
 
42
53
  # this allows us to use build_essential without setting a name
43
54
  property :name, String, default: ""
44
55
 
45
- property :compile_time, [TrueClass, FalseClass],
46
- description: "Install the build essential packages at compile time.",
47
- default: false, desired_state: false
48
-
49
56
  property :raise_if_unsupported, [TrueClass, FalseClass],
50
57
  description: "Raise a hard error on platforms where this resource is unsupported.",
58
+ introduced: "15.5",
51
59
  default: false, desired_state: false # FIXME: make this default to true
52
60
 
53
61
  action :install do
@@ -57,11 +65,8 @@ class Chef
57
65
  case
58
66
  when debian?
59
67
  package %w{ autoconf binutils-doc bison build-essential flex gettext ncurses-dev }
60
- when fedora_derived?
61
- package %w{ autoconf bison flex gcc gcc-c++ gettext kernel-devel make m4 ncurses-devel patch }
62
-
63
- # Ensure GCC 4 is available on older pre-6 EL
64
- package %w{ gcc44 gcc44-c++ } if platform_family?("rhel") && node["platform_version"].to_i < 6
68
+ when fedora_derived?
69
+ package %w{ autoconf bison flex gcc gcc-c++ gettext kernel-devel make m4 ncurses-devel patch }
65
70
  when freebsd?
66
71
  package "devel/gmake"
67
72
  package "devel/autoconf"
@@ -88,11 +93,7 @@ class Chef
88
93
  package "bison"
89
94
  package "gnu-coreutils"
90
95
  package "flex"
91
- package "gcc" do
92
- # lock because we don't use 5 yet
93
- version "4.8.2"
94
- end
95
- package "gcc-3"
96
+ package "gcc"
96
97
  package "gnu-grep"
97
98
  package "gnu-make"
98
99
  package "gnu-patch"
@@ -109,22 +110,33 @@ class Chef
109
110
  package "pkg-config"
110
111
  when suse?
111
112
  package %w{ autoconf bison flex gcc gcc-c++ kernel-default-devel make m4 }
112
- package %w{ gcc48 gcc48-c++ } if node["platform_version"].to_i < 12
113
113
  else
114
- if new_resource.raise_if_unsupported
115
- raise <<-EOH
114
+ msg = <<-EOH
116
115
  The build_essential resource does not currently support the '#{node["platform_family"]}'
117
116
  platform family. Skipping...
118
- EOH
117
+ EOH
118
+ if new_resource.raise_if_unsupported
119
+ raise msg
119
120
  else
120
- Chef::Log.warn <<-EOH
121
- The build_essential resource does not currently support the '#{node["platform_family"]}'
122
- platform family. Skipping...
123
- EOH
121
+ Chef::Log.warn msg
124
122
  end
125
123
  end
126
124
  end
127
125
 
126
+ action :upgrade do
127
+ description "Upgrade build essential (Xcode Command Line) tools on macOS"
128
+
129
+ if macos?
130
+ pkg_label = xcode_cli_package_label
131
+
132
+ # With upgrade action we should install if it's not installed or if there's an available update.
133
+ # `xcode_cli_package_label` will be nil if there's no update.
134
+ install_xcode_cli_tools(pkg_label) if !xcode_cli_installed? || xcode_cli_package_label
135
+ else
136
+ Chef::Log.info "The build_essential resource :upgrade action is only supported on macOS systems. Skipping..."
137
+ end
138
+ end
139
+
128
140
  action_class do
129
141
  #
130
142
  # Install Xcode Command Line tools via softwareupdate CLI
@@ -134,19 +146,16 @@ class Chef
134
146
  def install_xcode_cli_tools(label)
135
147
  # This script was graciously borrowed and modified from Tim Sutton's
136
148
  # osx-vm-templates at https://github.com/timsutton/osx-vm-templates/blob/b001475df54a9808d3d56d06e71b8fa3001fff42/scripts/xcode-cli-tools.sh
137
-
138
- if label.nil?
139
- Chef::Log.warn("Could not determine a Xcode CLI Tools package to install via softwareupdate")
140
- else
141
- # create the placeholder file that's checked by CLI updates' .dist code
142
- # in Apple's SUS catalog and then remove it when we're done
143
- execute "install Xcode Command Line tools" do
144
- command <<-EOH
145
- touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
146
- softwareupdate -i "#{label}" --verbose
147
- rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
148
- EOH
149
- end
149
+ execute "install Xcode Command Line tools" do
150
+ command <<-EOH
151
+ # create the placeholder file that's checked by CLI updates' .dist code
152
+ # in Apple's SUS catalog
153
+ touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
154
+ # install it
155
+ softwareupdate -i "#{label}" --verbose
156
+ # Remove the placeholder to prevent perpetual appearance in the update utility
157
+ rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
158
+ EOH
150
159
  end
151
160
  end
152
161
 
@@ -156,7 +165,7 @@ class Chef
156
165
  #
157
166
  # @return [true, false]
158
167
  def xcode_cli_installed?
159
- packages = Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
168
+ packages = ::Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
160
169
  packages.select! { |package| package["displayName"].match? "Command Line Tools" }
161
170
  !packages.empty?
162
171
  end
@@ -176,17 +185,6 @@ class Chef
176
185
  available_updates.stdout[/^\s*\* (?:Label: )?(Command Line Tools.*)/, 1]
177
186
  end
178
187
  end
179
-
180
- # this resource forces itself to run at compile_time
181
- #
182
- # @return [void]
183
- def after_created
184
- return unless compile_time
185
-
186
- Array(action).each do |action|
187
- run_action(action)
188
- end
189
- end
190
188
  end
191
189
  end
192
190
  end
@@ -23,15 +23,22 @@ class Chef
23
23
  class Resource
24
24
  class CabPackage < Chef::Resource::Package
25
25
  include Chef::Mixin::Uris
26
+ unified_mode true
26
27
 
27
- resource_name :cab_package
28
28
  provides :cab_package
29
29
 
30
- description "Use the cab_package resource to install or remove Microsoft Windows cabinet (.cab) packages."
30
+ description "Use the **cab_package** resource to install or remove Microsoft Windows cabinet (.cab) packages."
31
31
  introduced "12.15"
32
32
 
33
33
  allowed_actions :install, :remove
34
34
 
35
+ property :package_name, String,
36
+ description: "An optional property to set the package name if it differs from the resource block's name.",
37
+ identity: true
38
+
39
+ property :version, String,
40
+ description: "The version of a package to be installed or upgraded."
41
+
35
42
  property :source, String,
36
43
  description: "The local file path or URL for the CAB package.",
37
44
  coerce: (proc do |s|
@@ -0,0 +1,228 @@
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require_relative "../resource"
18
+ require_relative "../dist"
19
+ require_relative "helpers/cron_validations"
20
+ require "digest/md5"
21
+
22
+ class Chef
23
+ class Resource
24
+ class ChefClientCron < Chef::Resource
25
+ unified_mode true
26
+
27
+ provides :chef_client_cron
28
+
29
+ description "Use the **chef_client_cron** resource to setup the #{Chef::Dist::PRODUCT} to run as a cron job. This resource will also create the specified log directory if it doesn't already exist."
30
+ introduced "16.0"
31
+ examples <<~DOC
32
+ **Setup #{Chef::Dist::PRODUCT} to run using the default 30 minute cadence**:
33
+
34
+ ```ruby
35
+ chef_client_cron "Run #{Chef::Dist::PRODUCT} as a cron job"
36
+ ```
37
+
38
+ **Run #{Chef::Dist::PRODUCT} twice a day**:
39
+
40
+ ```ruby
41
+ chef_client_cron "Run #{Chef::Dist::PRODUCT} every 12 hours" do
42
+ minute 0
43
+ hour "0,12"
44
+ end
45
+ ```
46
+
47
+ **Run #{Chef::Dist::PRODUCT} with extra options passed to the client**:
48
+
49
+ ```ruby
50
+ chef_client_cron "Run an override recipe" do
51
+ daemon_options ["--override-runlist mycorp_base::default"]
52
+ end
53
+ ```
54
+ DOC
55
+
56
+ extend Chef::ResourceHelpers::CronValidations
57
+
58
+ property :job_name, String,
59
+ default: Chef::Dist::CLIENT,
60
+ description: "The name of the cron job to create."
61
+
62
+ property :comment, String,
63
+ description: "A comment to place in the cron.d file."
64
+
65
+ property :user, String,
66
+ description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
67
+ default: "root"
68
+
69
+ property :minute, [Integer, String],
70
+ description: "The minute at which #{Chef::Dist::PRODUCT} is to run (0 - 59) or a cron pattern such as '0,30'.",
71
+ default: "0,30", callbacks: {
72
+ "should be a valid minute spec" => method(:validate_minute),
73
+ }
74
+
75
+ property :hour, [Integer, String],
76
+ description: "The hour at which #{Chef::Dist::PRODUCT} is to run (0 - 23) or a cron pattern such as '0,12'.",
77
+ default: "*", callbacks: {
78
+ "should be a valid hour spec" => method(:validate_hour),
79
+ }
80
+
81
+ property :day, [Integer, String],
82
+ description: "The day of month at which #{Chef::Dist::PRODUCT} is to run (1 - 31) or a cron pattern such as '1,7,14,21,28'.",
83
+ default: "*", callbacks: {
84
+ "should be a valid day spec" => method(:validate_day),
85
+ }
86
+
87
+ property :month, [Integer, String],
88
+ description: "The month in the year on which #{Chef::Dist::PRODUCT} is to run (1 - 12, jan-dec, or *).",
89
+ default: "*", callbacks: {
90
+ "should be a valid month spec" => method(:validate_month),
91
+ }
92
+
93
+ property :weekday, [Integer, String],
94
+ description: "The day of the week on which #{Chef::Dist::PRODUCT} is to run (0-7, mon-sun, or *), where Sunday is both 0 and 7.",
95
+ default: "*", callbacks: {
96
+ "should be a valid weekday spec" => method(:validate_dow),
97
+ }
98
+
99
+ property :splay, [Integer, String],
100
+ default: 300,
101
+ coerce: proc { |x| Integer(x) },
102
+ callbacks: { "should be a positive number" => proc { |v| v > 0 } },
103
+ description: "A random number of seconds between 0 and X to add to interval so that all #{Chef::Dist::CLIENT} commands don't execute at the same time."
104
+
105
+ property :mailto, String,
106
+ description: "The e-mail address to e-mail any cron task failures to."
107
+
108
+ property :accept_chef_license, [true, false],
109
+ description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
110
+ default: false
111
+
112
+ property :config_directory, String,
113
+ default: Chef::Dist::CONF_DIR,
114
+ description: "The path of the config directory."
115
+
116
+ property :log_directory, String,
117
+ default: lazy { platform?("mac_os_x") ? "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize}" : "/var/log/#{Chef::Dist::DIR_SUFFIX}" },
118
+ default_description: "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize} on macOS and /var/log/#{Chef::Dist::DIR_SUFFIX} otherwise",
119
+ description: "The path of the directory to create the log file in."
120
+
121
+ property :log_file_name, String,
122
+ default: "client.log",
123
+ description: "The name of the log file to use."
124
+
125
+ property :append_log_file, [true, false],
126
+ default: true,
127
+ description: "Append to the log file instead of overwriting the log file on each run."
128
+
129
+ property :chef_binary_path, String,
130
+ default: "/opt/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}",
131
+ description: "The path to the #{Chef::Dist::CLIENT} binary."
132
+
133
+ property :daemon_options, Array,
134
+ default: lazy { [] },
135
+ description: "An array of options to pass to the #{Chef::Dist::CLIENT} command."
136
+
137
+ property :environment, Hash,
138
+ default: lazy { {} },
139
+ description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of `({'ENV_VARIABLE' => 'VALUE'})`."
140
+
141
+ action :add do
142
+ # TODO: Replace this with a :create_if_missing action on directory when that exists
143
+ unless ::Dir.exist?(new_resource.log_directory)
144
+ directory new_resource.log_directory do
145
+ owner new_resource.user
146
+ mode "0750"
147
+ recursive true
148
+ end
149
+ end
150
+
151
+ declare_resource(cron_resource_type, new_resource.job_name) do
152
+ minute new_resource.minute
153
+ hour new_resource.hour
154
+ day new_resource.day
155
+ weekday new_resource.weekday
156
+ month new_resource.month
157
+ environment new_resource.environment
158
+ mailto new_resource.mailto if new_resource.mailto
159
+ user new_resource.user
160
+ comment new_resource.comment if new_resource.comment
161
+ command cron_command
162
+ end
163
+ end
164
+
165
+ action :remove do
166
+ declare_resource(cron_resource_type, new_resource.job_name) do
167
+ action :delete
168
+ end
169
+ end
170
+
171
+ action_class do
172
+ #
173
+ # Generate a uniformly distributed unique number to sleep from 0 to the splay time
174
+ #
175
+ # @param [Integer] splay The number of seconds to splay
176
+ #
177
+ # @return [Integer]
178
+ #
179
+ def splay_sleep_time(splay)
180
+ seed = node["shard_seed"] || Digest::MD5.hexdigest(node.name).to_s.hex
181
+ random = Random.new(seed.to_i)
182
+ random.rand(splay)
183
+ end
184
+
185
+ #
186
+ # The complete cron command to run
187
+ #
188
+ # @return [String]
189
+ #
190
+ def cron_command
191
+ cmd = ""
192
+ cmd << "/bin/sleep #{splay_sleep_time(new_resource.splay)}; "
193
+ cmd << "#{new_resource.chef_binary_path} "
194
+ cmd << "#{new_resource.daemon_options.join(" ")} " unless new_resource.daemon_options.empty?
195
+ cmd << "-c #{::File.join(new_resource.config_directory, "client.rb")} "
196
+ cmd << "--chef-license accept " if new_resource.accept_chef_license
197
+ cmd << log_command
198
+ cmd << " || echo \"#{Chef::Dist::PRODUCT} execution failed\"" if new_resource.mailto
199
+ cmd
200
+ end
201
+
202
+ #
203
+ # The portion of the overall cron job that handles logging based on the append_log_file property
204
+ #
205
+ # @return [String]
206
+ #
207
+ def log_command
208
+ if new_resource.append_log_file
209
+ "-L #{::File.join(new_resource.log_directory, new_resource.log_file_name)}"
210
+ else
211
+ "> #{::File.join(new_resource.log_directory, new_resource.log_file_name)} 2>&1"
212
+ end
213
+ end
214
+
215
+ #
216
+ # The type of cron resource to run. Linux systems all support the /etc/cron.d directory
217
+ # and can use the cron_d resource, but Solaris / AIX / FreeBSD need to use the crontab
218
+ # via the legacy cron resource.
219
+ #
220
+ # @return [Symbol]
221
+ #
222
+ def cron_resource_type
223
+ linux? ? :cron_d : :cron
224
+ end
225
+ end
226
+ end
227
+ end
228
+ end