chef 15.17.4 → 16.0.257

Sign up to get free protection for your applications and to get access to all the features.
Files changed (569) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +14 -20
  3. data/README.md +6 -6
  4. data/Rakefile +18 -23
  5. data/chef-universal-mingw32.gemspec +4 -4
  6. data/chef.gemspec +10 -26
  7. data/lib/chef/action_collection.rb +16 -5
  8. data/lib/chef/api_client/registration.rb +2 -2
  9. data/lib/chef/application.rb +33 -54
  10. data/lib/chef/application/apply.rb +20 -3
  11. data/lib/chef/application/base.rb +8 -3
  12. data/lib/chef/application/exit_code.rb +2 -2
  13. data/lib/chef/application/knife.rb +1 -1
  14. data/lib/chef/chef_class.rb +4 -4
  15. data/lib/chef/chef_fs/chef_fs_data_store.rb +3 -3
  16. data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +1 -1
  17. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +1 -1
  18. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +6 -2
  19. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +1 -1
  20. data/lib/chef/chef_fs/file_system/repository/base_file.rb +0 -1
  21. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  22. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  23. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +5 -5
  24. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  26. data/lib/chef/chef_fs/path_utils.rb +3 -3
  27. data/lib/chef/client.rb +16 -14
  28. data/lib/chef/config.rb +1 -1
  29. data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
  30. data/lib/chef/cookbook/gem_installer.rb +1 -1
  31. data/lib/chef/cookbook/metadata.rb +45 -22
  32. data/lib/chef/cookbook_version.rb +40 -5
  33. data/lib/chef/data_bag.rb +2 -2
  34. data/lib/chef/data_collector/error_handlers.rb +1 -1
  35. data/lib/chef/data_collector/run_end_message.rb +7 -1
  36. data/lib/chef/deprecated.rb +1 -9
  37. data/lib/chef/dist.rb +8 -0
  38. data/lib/chef/dsl/chef_vault.rb +84 -0
  39. data/lib/chef/dsl/declare_resource.rb +7 -5
  40. data/lib/chef/dsl/platform_introspection.rb +2 -3
  41. data/lib/chef/dsl/recipe.rb +7 -12
  42. data/lib/chef/dsl/universal.rb +3 -7
  43. data/lib/chef/environment.rb +2 -2
  44. data/lib/chef/event_dispatch/base.rb +3 -0
  45. data/lib/chef/exceptions.rb +0 -3
  46. data/lib/chef/formatters/doc.rb +1 -1
  47. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
  48. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
  49. data/lib/chef/formatters/indentable_output_stream.rb +7 -16
  50. data/lib/chef/http.rb +1 -2
  51. data/lib/chef/http/http_request.rb +3 -2
  52. data/lib/chef/knife.rb +1 -3
  53. data/lib/chef/knife/acl_add.rb +57 -0
  54. data/lib/chef/knife/acl_base.rb +183 -0
  55. data/lib/chef/knife/acl_bulk_add.rb +78 -0
  56. data/lib/chef/knife/acl_bulk_remove.rb +83 -0
  57. data/lib/chef/knife/acl_remove.rb +62 -0
  58. data/lib/chef/knife/acl_show.rb +56 -0
  59. data/lib/chef/knife/bootstrap.rb +93 -97
  60. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  61. data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
  62. data/lib/chef/knife/bootstrap/templates/chef-full.erb +20 -20
  63. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +13 -15
  64. data/lib/chef/knife/bootstrap/train_connector.rb +0 -1
  65. data/lib/chef/knife/cookbook_download.rb +1 -1
  66. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  67. data/lib/chef/knife/core/bootstrap_context.rb +63 -60
  68. data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
  69. data/lib/chef/knife/core/generic_presenter.rb +4 -3
  70. data/lib/chef/knife/core/hashed_command_loader.rb +2 -3
  71. data/lib/chef/knife/core/node_presenter.rb +2 -2
  72. data/lib/chef/knife/core/status_presenter.rb +5 -5
  73. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  74. data/lib/chef/knife/core/ui.rb +17 -1
  75. data/lib/chef/knife/core/windows_bootstrap_context.rb +45 -58
  76. data/lib/chef/knife/data_bag_secret_options.rb +18 -45
  77. data/lib/chef/knife/environment_compare.rb +1 -1
  78. data/lib/chef/knife/exec.rb +2 -2
  79. data/lib/chef/knife/group_add.rb +55 -0
  80. data/lib/chef/knife/{cookbook_site_download.rb → group_create.rb} +21 -12
  81. data/lib/chef/knife/group_destroy.rb +53 -0
  82. data/lib/chef/knife/{cookbook_site_list.rb → group_list.rb} +14 -11
  83. data/lib/chef/knife/group_remove.rb +56 -0
  84. data/lib/chef/knife/{cookbook_site_install.rb → group_show.rb} +21 -12
  85. data/lib/chef/knife/list.rb +1 -1
  86. data/lib/chef/knife/ssh.rb +12 -50
  87. data/lib/chef/knife/status.rb +3 -3
  88. data/lib/chef/knife/supermarket_download.rb +1 -2
  89. data/lib/chef/knife/supermarket_install.rb +1 -2
  90. data/lib/chef/knife/supermarket_list.rb +1 -2
  91. data/lib/chef/knife/supermarket_search.rb +1 -2
  92. data/lib/chef/knife/supermarket_share.rb +1 -2
  93. data/lib/chef/knife/supermarket_show.rb +1 -2
  94. data/lib/chef/knife/supermarket_unshare.rb +1 -2
  95. data/lib/chef/knife/{cookbook_site_show.rb → user_dissociate.rb} +15 -13
  96. data/lib/chef/knife/{cookbook_site_search.rb → user_invite_add.rb} +16 -13
  97. data/lib/chef/knife/user_invite_list.rb +34 -0
  98. data/lib/chef/knife/user_invite_recind.rb +63 -0
  99. data/lib/chef/knife/yaml_convert.rb +91 -0
  100. data/lib/chef/log.rb +1 -1
  101. data/lib/chef/mixin/create_path.rb +8 -8
  102. data/lib/chef/mixin/openssl_helper.rb +3 -26
  103. data/lib/chef/mixin/powershell_exec.rb +10 -1
  104. data/lib/chef/mixin/powershell_out.rb +1 -1
  105. data/lib/chef/mixin/properties.rb +13 -1
  106. data/lib/chef/mixin/shell_out.rb +0 -4
  107. data/lib/chef/mixin/template.rb +0 -1
  108. data/lib/chef/monkey_patches/net_http.rb +0 -4
  109. data/lib/chef/node.rb +18 -6
  110. data/lib/chef/node/mixin/deep_merge_cache.rb +7 -7
  111. data/lib/chef/node/mixin/immutablize_array.rb +4 -0
  112. data/lib/chef/node/mixin/immutablize_hash.rb +3 -0
  113. data/lib/chef/node_map.rb +7 -36
  114. data/lib/chef/platform/priority_map.rb +4 -4
  115. data/lib/chef/platform/query_helpers.rb +6 -34
  116. data/lib/chef/powershell.rb +14 -0
  117. data/lib/chef/property.rb +22 -4
  118. data/lib/chef/provider.rb +40 -6
  119. data/lib/chef/provider/cron.rb +2 -2
  120. data/lib/chef/provider/directory.rb +2 -2
  121. data/lib/chef/provider/dsc_resource.rb +1 -1
  122. data/lib/chef/provider/dsc_script.rb +1 -1
  123. data/lib/chef/provider/execute.rb +2 -8
  124. data/lib/chef/provider/file.rb +5 -5
  125. data/lib/chef/provider/git.rb +84 -27
  126. data/lib/chef/provider/group.rb +4 -4
  127. data/lib/chef/provider/http_request.rb +6 -6
  128. data/lib/chef/provider/ifconfig.rb +4 -4
  129. data/lib/chef/provider/launchd.rb +36 -51
  130. data/lib/chef/provider/link.rb +2 -2
  131. data/lib/chef/provider/mount.rb +5 -5
  132. data/lib/chef/provider/mount/solaris.rb +1 -0
  133. data/lib/chef/provider/osx_profile.rb +7 -3
  134. data/lib/chef/provider/package.rb +2 -2
  135. data/lib/chef/provider/package/cab.rb +3 -4
  136. data/lib/chef/provider/package/chocolatey.rb +1 -3
  137. data/lib/chef/provider/package/dnf.rb +66 -10
  138. data/lib/chef/provider/package/dnf/dnf_helper.py +84 -30
  139. data/lib/chef/provider/package/dnf/python_helper.rb +79 -36
  140. data/lib/chef/provider/package/dnf/version.rb +5 -1
  141. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -3
  142. data/lib/chef/provider/package/homebrew.rb +106 -42
  143. data/lib/chef/provider/package/msu.rb +3 -1
  144. data/lib/chef/provider/package/pacman.rb +25 -34
  145. data/lib/chef/provider/package/powershell.rb +2 -6
  146. data/lib/chef/provider/package/rubygems.rb +29 -2
  147. data/lib/chef/provider/package/snap.rb +27 -96
  148. data/lib/chef/provider/package/windows.rb +3 -2
  149. data/lib/chef/provider/package/windows/msi.rb +2 -2
  150. data/lib/chef/provider/package/yum.rb +0 -8
  151. data/lib/chef/provider/package/yum/yum_helper.py +0 -4
  152. data/lib/chef/provider/package/zypper.rb +1 -1
  153. data/lib/chef/provider/powershell_script.rb +4 -10
  154. data/lib/chef/provider/registry_key.rb +4 -4
  155. data/lib/chef/provider/remote_directory.rb +3 -3
  156. data/lib/chef/provider/remote_file/ftp.rb +3 -2
  157. data/lib/chef/provider/remote_file/local_file.rb +2 -1
  158. data/lib/chef/provider/remote_file/sftp.rb +3 -2
  159. data/lib/chef/provider/route.rb +5 -3
  160. data/lib/chef/provider/ruby_block.rb +1 -1
  161. data/lib/chef/provider/script.rb +2 -2
  162. data/lib/chef/provider/service.rb +8 -8
  163. data/lib/chef/provider/service/aixinit.rb +1 -1
  164. data/lib/chef/provider/service/arch.rb +2 -2
  165. data/lib/chef/provider/service/debian.rb +31 -29
  166. data/lib/chef/provider/service/gentoo.rb +2 -2
  167. data/lib/chef/provider/service/macosx.rb +7 -12
  168. data/lib/chef/provider/service/openbsd.rb +1 -1
  169. data/lib/chef/provider/service/redhat.rb +2 -2
  170. data/lib/chef/provider/service/simple.rb +3 -3
  171. data/lib/chef/provider/service/systemd.rb +12 -12
  172. data/lib/chef/provider/service/upstart.rb +1 -1
  173. data/lib/chef/provider/service/windows.rb +5 -11
  174. data/lib/chef/provider/subversion.rb +25 -5
  175. data/lib/chef/provider/systemd_unit.rb +26 -25
  176. data/lib/chef/provider/user.rb +6 -6
  177. data/lib/chef/provider/user/dscl.rb +3 -3
  178. data/lib/chef/provider/user/mac.rb +10 -9
  179. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  180. data/lib/chef/provider/windows_env.rb +3 -3
  181. data/lib/chef/provider/windows_script.rb +2 -2
  182. data/lib/chef/provider/windows_task.rb +7 -9
  183. data/lib/chef/provider/yum_repository.rb +1 -1
  184. data/lib/chef/provider/zypper_repository.rb +11 -31
  185. data/lib/chef/providers.rb +0 -6
  186. data/lib/chef/recipe.rb +36 -0
  187. data/lib/chef/resource.rb +41 -56
  188. data/lib/chef/resource/action_class.rb +24 -22
  189. data/lib/chef/resource/alternatives.rb +149 -0
  190. data/lib/chef/resource/apt_package.rb +2 -1
  191. data/lib/chef/resource/apt_preference.rb +69 -2
  192. data/lib/chef/resource/apt_repository.rb +337 -5
  193. data/lib/chef/resource/apt_update.rb +52 -1
  194. data/lib/chef/resource/archive_file.rb +9 -29
  195. data/lib/chef/resource/bash.rb +2 -0
  196. data/lib/chef/resource/bff_package.rb +9 -1
  197. data/lib/chef/resource/breakpoint.rb +0 -1
  198. data/lib/chef/resource/build_essential.rb +42 -48
  199. data/lib/chef/resource/cab_package.rb +8 -1
  200. data/lib/chef/resource/chef_client_cron.rb +225 -0
  201. data/lib/chef/resource/chef_client_scheduled_task.rb +198 -0
  202. data/lib/chef/resource/chef_client_systemd_timer.rb +177 -0
  203. data/lib/chef/resource/chef_gem.rb +9 -16
  204. data/lib/chef/resource/chef_handler.rb +2 -1
  205. data/lib/chef/resource/chef_sleep.rb +0 -1
  206. data/lib/chef/resource/chef_vault_secret.rb +135 -0
  207. data/lib/chef/resource/chocolatey_config.rb +3 -1
  208. data/lib/chef/resource/chocolatey_feature.rb +2 -1
  209. data/lib/chef/resource/chocolatey_package.rb +2 -1
  210. data/lib/chef/resource/chocolatey_source.rb +2 -1
  211. data/lib/chef/resource/cookbook_file.rb +1 -1
  212. data/lib/chef/resource/cron.rb +22 -68
  213. data/lib/chef/resource/cron_access.rb +8 -15
  214. data/lib/chef/resource/cron_d.rb +9 -75
  215. data/lib/chef/resource/csh.rb +2 -0
  216. data/lib/chef/resource/directory.rb +2 -2
  217. data/lib/chef/resource/dmg_package.rb +4 -4
  218. data/lib/chef/resource/dnf_package.rb +2 -3
  219. data/lib/chef/resource/dpkg_package.rb +2 -1
  220. data/lib/chef/resource/dsc_resource.rb +6 -4
  221. data/lib/chef/resource/dsc_script.rb +3 -2
  222. data/lib/chef/resource/execute.rb +13 -12
  223. data/lib/chef/resource/file.rb +3 -1
  224. data/lib/chef/resource/freebsd_package.rb +2 -1
  225. data/lib/chef/resource/gem_package.rb +14 -6
  226. data/lib/chef/resource/group.rb +4 -1
  227. data/lib/chef/resource/helpers/cron_validations.rb +98 -0
  228. data/lib/chef/resource/homebrew_cask.rb +5 -4
  229. data/lib/chef/resource/homebrew_package.rb +4 -2
  230. data/lib/chef/resource/homebrew_tap.rb +2 -1
  231. data/lib/chef/resource/hostname.rb +41 -36
  232. data/lib/chef/resource/http_request.rb +0 -1
  233. data/lib/chef/resource/ifconfig.rb +1 -1
  234. data/lib/chef/resource/ips_package.rb +10 -2
  235. data/lib/chef/resource/kernel_module.rb +29 -29
  236. data/lib/chef/resource/ksh.rb +2 -0
  237. data/lib/chef/resource/launchd.rb +6 -6
  238. data/lib/chef/resource/link.rb +1 -23
  239. data/lib/chef/resource/locale.rb +58 -24
  240. data/lib/chef/resource/log.rb +12 -1
  241. data/lib/chef/resource/lwrp_base.rb +1 -8
  242. data/lib/chef/resource/macos_userdefaults.rb +9 -6
  243. data/lib/chef/resource/macosx_service.rb +2 -1
  244. data/lib/chef/resource/macports_package.rb +10 -2
  245. data/lib/chef/resource/mdadm.rb +62 -2
  246. data/lib/chef/resource/mount.rb +3 -0
  247. data/lib/chef/resource/msu_package.rb +13 -1
  248. data/lib/chef/resource/notify_group.rb +8 -3
  249. data/lib/chef/resource/ohai.rb +19 -3
  250. data/lib/chef/resource/ohai_hint.rb +3 -12
  251. data/lib/chef/resource/openbsd_package.rb +9 -1
  252. data/lib/chef/resource/openssl_dhparam.rb +10 -1
  253. data/lib/chef/resource/openssl_ec_private_key.rb +23 -1
  254. data/lib/chef/resource/openssl_ec_public_key.rb +21 -1
  255. data/lib/chef/resource/openssl_rsa_private_key.rb +20 -1
  256. data/lib/chef/resource/openssl_rsa_public_key.rb +22 -1
  257. data/lib/chef/resource/openssl_x509_certificate.rb +37 -1
  258. data/lib/chef/resource/openssl_x509_crl.rb +12 -1
  259. data/lib/chef/resource/openssl_x509_request.rb +37 -1
  260. data/lib/chef/resource/osx_profile.rb +3 -2
  261. data/lib/chef/resource/package.rb +2 -1
  262. data/lib/chef/resource/pacman_package.rb +2 -1
  263. data/lib/chef/resource/paludis_package.rb +12 -3
  264. data/lib/chef/resource/perl.rb +2 -0
  265. data/lib/chef/resource/plist.rb +207 -0
  266. data/lib/chef/resource/portage_package.rb +13 -3
  267. data/lib/chef/resource/powershell_package.rb +1 -3
  268. data/lib/chef/resource/powershell_package_source.rb +3 -1
  269. data/lib/chef/resource/powershell_script.rb +7 -17
  270. data/lib/chef/resource/python.rb +2 -0
  271. data/lib/chef/resource/reboot.rb +0 -1
  272. data/lib/chef/resource/registry_key.rb +1 -2
  273. data/lib/chef/resource/remote_directory.rb +2 -0
  274. data/lib/chef/resource/remote_file.rb +2 -0
  275. data/lib/chef/resource/rhsm_errata.rb +0 -1
  276. data/lib/chef/resource/rhsm_errata_level.rb +0 -1
  277. data/lib/chef/resource/rhsm_register.rb +2 -1
  278. data/lib/chef/resource/rhsm_repo.rb +3 -1
  279. data/lib/chef/resource/rhsm_subscription.rb +4 -1
  280. data/lib/chef/resource/route.rb +5 -1
  281. data/lib/chef/resource/rpm_package.rb +9 -2
  282. data/lib/chef/resource/ruby.rb +2 -0
  283. data/lib/chef/resource/ruby_block.rb +1 -1
  284. data/lib/chef/resource/scm/_scm.rb +48 -0
  285. data/lib/chef/resource/{scm.rb → scm/git.rb} +16 -30
  286. data/lib/chef/resource/{subversion.rb → scm/subversion.rb} +8 -5
  287. data/lib/chef/resource/script.rb +6 -3
  288. data/lib/chef/resource/service.rb +6 -7
  289. data/lib/chef/resource/smartos_package.rb +9 -1
  290. data/lib/chef/resource/snap_package.rb +3 -1
  291. data/lib/chef/resource/solaris_package.rb +9 -1
  292. data/lib/chef/resource/ssh_known_hosts_entry.rb +6 -3
  293. data/lib/chef/resource/sudo.rb +9 -9
  294. data/lib/chef/resource/support/cron.d.erb +1 -1
  295. data/lib/chef/resource/support/cron_access.erb +1 -1
  296. data/lib/chef/resource/support/sudoer.erb +1 -2
  297. data/lib/chef/resource/support/ulimit.erb +41 -0
  298. data/lib/chef/resource/swap_file.rb +5 -3
  299. data/lib/chef/resource/sysctl.rb +2 -2
  300. data/lib/chef/resource/systemd_unit.rb +4 -2
  301. data/lib/chef/resource/template.rb +0 -1
  302. data/lib/chef/resource/timezone.rb +7 -18
  303. data/lib/chef/resource/user.rb +1 -3
  304. data/lib/chef/resource/user/aix_user.rb +0 -2
  305. data/lib/chef/resource/user/dscl_user.rb +1 -1
  306. data/lib/chef/resource/user/linux_user.rb +0 -2
  307. data/lib/chef/resource/user/mac_user.rb +1 -1
  308. data/lib/chef/resource/user/pw_user.rb +0 -2
  309. data/lib/chef/resource/user/solaris_user.rb +0 -2
  310. data/lib/chef/resource/user/windows_user.rb +0 -2
  311. data/lib/chef/resource/user_ulimit.rb +114 -0
  312. data/lib/chef/resource/whyrun_safe_ruby_block.rb +1 -0
  313. data/lib/chef/resource/windows_ad_join.rb +19 -6
  314. data/lib/chef/resource/windows_auto_run.rb +0 -1
  315. data/lib/chef/resource/windows_certificate.rb +1 -1
  316. data/lib/chef/resource/windows_dfs_folder.rb +0 -1
  317. data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
  318. data/lib/chef/resource/windows_dfs_server.rb +0 -1
  319. data/lib/chef/resource/windows_dns_record.rb +0 -1
  320. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  321. data/lib/chef/resource/windows_env.rb +2 -3
  322. data/lib/chef/resource/windows_feature.rb +2 -2
  323. data/lib/chef/resource/windows_feature_dism.rb +9 -22
  324. data/lib/chef/resource/windows_feature_powershell.rb +17 -82
  325. data/lib/chef/resource/windows_firewall_rule.rb +119 -10
  326. data/lib/chef/resource/windows_font.rb +1 -3
  327. data/lib/chef/resource/windows_package.rb +13 -4
  328. data/lib/chef/resource/windows_pagefile.rb +0 -1
  329. data/lib/chef/resource/windows_path.rb +0 -1
  330. data/lib/chef/resource/windows_printer.rb +0 -1
  331. data/lib/chef/resource/windows_printer_port.rb +0 -1
  332. data/lib/chef/resource/windows_script.rb +3 -4
  333. data/lib/chef/resource/windows_security_policy.rb +90 -0
  334. data/lib/chef/resource/windows_service.rb +45 -31
  335. data/lib/chef/resource/windows_share.rb +3 -7
  336. data/lib/chef/resource/windows_shortcut.rb +0 -1
  337. data/lib/chef/resource/windows_task.rb +14 -15
  338. data/lib/chef/resource/windows_uac.rb +0 -1
  339. data/lib/chef/resource/windows_user_privilege.rb +157 -0
  340. data/lib/chef/resource/windows_workgroup.rb +0 -1
  341. data/lib/chef/resource/yum_package.rb +3 -1
  342. data/lib/chef/resource/yum_repository.rb +2 -1
  343. data/lib/chef/resource/zypper_package.rb +3 -2
  344. data/lib/chef/resource/zypper_repository.rb +2 -1
  345. data/lib/chef/resource_builder.rb +8 -0
  346. data/lib/chef/resource_inspector.rb +6 -6
  347. data/lib/chef/resource_resolver.rb +7 -14
  348. data/lib/chef/resources.rb +11 -3
  349. data/lib/chef/role.rb +2 -2
  350. data/lib/chef/run_context/cookbook_compiler.rb +29 -5
  351. data/lib/chef/shell.rb +23 -32
  352. data/lib/chef/shell/shell_session.rb +0 -2
  353. data/lib/chef/util/diff.rb +1 -1
  354. data/lib/chef/util/dsc/configuration_generator.rb +1 -1
  355. data/lib/chef/util/dsc/lcm_output_parser.rb +3 -3
  356. data/lib/chef/util/powershell/cmdlet.rb +1 -1
  357. data/lib/chef/version.rb +2 -2
  358. data/lib/chef/version_string.rb +1 -1
  359. data/lib/chef/win32/api/file.rb +18 -18
  360. data/lib/chef/win32/api/security.rb +6 -0
  361. data/lib/chef/win32/file.rb +3 -11
  362. data/lib/chef/win32/process.rb +2 -2
  363. data/lib/chef/win32/security.rb +40 -2
  364. data/spec/functional/assets/inittest +8 -7
  365. data/spec/functional/knife/ssh_spec.rb +27 -23
  366. data/spec/functional/resource/aix_service_spec.rb +1 -0
  367. data/spec/functional/resource/aixinit_service_spec.rb +8 -7
  368. data/spec/functional/resource/apt_package_spec.rb +1 -0
  369. data/spec/functional/resource/bff_spec.rb +2 -2
  370. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  371. data/spec/functional/resource/cron_spec.rb +11 -29
  372. data/spec/functional/resource/dnf_package_spec.rb +441 -156
  373. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  374. data/spec/functional/resource/git_spec.rb +184 -134
  375. data/spec/functional/resource/insserv_spec.rb +6 -5
  376. data/spec/functional/resource/link_spec.rb +17 -17
  377. data/spec/functional/resource/locale_spec.rb +13 -2
  378. data/spec/functional/resource/powershell_script_spec.rb +7 -68
  379. data/spec/functional/resource/rpm_spec.rb +2 -2
  380. data/spec/functional/resource/user/dscl_spec.rb +2 -2
  381. data/spec/functional/resource/user/mac_user_spec.rb +2 -2
  382. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  383. data/spec/functional/resource/windows_security_policy_spec.rb +90 -0
  384. data/spec/functional/resource/windows_task_spec.rb +8 -8
  385. data/spec/functional/resource/windows_user_privilege_spec.rb +193 -0
  386. data/spec/functional/run_lock_spec.rb +1 -2
  387. data/spec/functional/shell_spec.rb +6 -6
  388. data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
  389. data/spec/functional/version_spec.rb +1 -1
  390. data/spec/functional/win32/registry_spec.rb +0 -6
  391. data/spec/functional/win32/security_spec.rb +22 -0
  392. data/spec/functional/win32/service_manager_spec.rb +1 -1
  393. data/spec/integration/client/client_spec.rb +123 -2
  394. data/spec/integration/knife/cookbook_show_spec.rb +28 -26
  395. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  396. data/spec/integration/knife/raw_spec.rb +30 -2
  397. data/spec/integration/knife/show_spec.rb +32 -3
  398. data/spec/integration/recipes/accumulator_spec.rb +1 -1
  399. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +5 -5
  400. data/spec/integration/recipes/lwrp_spec.rb +1 -1
  401. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  402. data/spec/integration/recipes/notifies_spec.rb +50 -21
  403. data/spec/integration/recipes/notifying_block_spec.rb +9 -6
  404. data/spec/integration/recipes/provider_choice.rb +2 -0
  405. data/spec/integration/recipes/recipe_dsl_spec.rb +46 -144
  406. data/spec/integration/recipes/resource_action_spec.rb +16 -11
  407. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +1 -3
  408. data/spec/integration/recipes/resource_load_spec.rb +133 -13
  409. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  410. data/spec/integration/recipes/use_partial_spec.rb +112 -0
  411. data/spec/integration/solo/solo_spec.rb +3 -3
  412. data/spec/scripts/ssl-serve.rb +1 -1
  413. data/spec/spec_helper.rb +11 -14
  414. data/spec/support/chef_helpers.rb +2 -2
  415. data/spec/support/lib/chef/resource/zen_follower.rb +2 -0
  416. data/spec/support/platform_helpers.rb +44 -19
  417. data/spec/support/platforms/win32/spec_service.rb +1 -1
  418. data/spec/support/recipe_dsl_helper.rb +83 -0
  419. data/spec/support/shared/functional/directory_resource.rb +1 -1
  420. data/spec/support/shared/functional/execute_resource.rb +1 -1
  421. data/spec/support/shared/functional/file_resource.rb +3 -3
  422. data/spec/support/shared/functional/win32_service.rb +1 -1
  423. data/spec/support/shared/functional/windows_script.rb +5 -18
  424. data/spec/support/shared/integration/knife_support.rb +14 -8
  425. data/spec/unit/application/apply_spec.rb +3 -0
  426. data/spec/unit/application/client_spec.rb +5 -1
  427. data/spec/unit/application_spec.rb +1 -9
  428. data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +4 -2
  429. data/spec/unit/client_spec.rb +7 -5
  430. data/spec/unit/cookbook/gem_installer_spec.rb +3 -4
  431. data/spec/unit/cookbook/metadata_spec.rb +38 -19
  432. data/spec/unit/data_bag_spec.rb +1 -1
  433. data/spec/unit/data_collector_spec.rb +38 -17
  434. data/spec/unit/dsl/platform_introspection_spec.rb +0 -1
  435. data/spec/unit/environment_spec.rb +7 -7
  436. data/spec/unit/event_dispatch/dispatcher_spec.rb +0 -3
  437. data/spec/unit/file_access_control_spec.rb +1 -1
  438. data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +15 -15
  439. data/spec/unit/knife/bootstrap/client_builder_spec.rb +9 -9
  440. data/spec/unit/knife/bootstrap_spec.rb +36 -54
  441. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  442. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  443. data/spec/unit/knife/cookbook_show_spec.rb +1 -0
  444. data/spec/unit/knife/cookbook_upload_spec.rb +6 -5
  445. data/spec/unit/knife/core/bootstrap_context_spec.rb +23 -43
  446. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  447. data/spec/unit/knife/core/ui_spec.rb +16 -0
  448. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +8 -68
  449. data/spec/unit/knife/data_bag_secret_options_spec.rb +22 -14
  450. data/spec/unit/knife/role_env_run_list_add_spec.rb +6 -6
  451. data/spec/unit/knife/role_env_run_list_clear_spec.rb +4 -4
  452. data/spec/unit/knife/role_env_run_list_remove_spec.rb +4 -4
  453. data/spec/unit/knife/role_env_run_list_replace_spec.rb +4 -4
  454. data/spec/unit/knife/role_env_run_list_set_spec.rb +4 -4
  455. data/spec/unit/knife/role_run_list_add_spec.rb +6 -6
  456. data/spec/unit/knife/role_run_list_clear_spec.rb +4 -4
  457. data/spec/unit/knife/role_run_list_remove_spec.rb +4 -4
  458. data/spec/unit/knife/role_run_list_replace_spec.rb +4 -4
  459. data/spec/unit/knife/role_run_list_set_spec.rb +4 -4
  460. data/spec/unit/knife/ssh_spec.rb +10 -113
  461. data/spec/unit/knife/status_spec.rb +1 -1
  462. data/spec/unit/knife/supermarket_share_spec.rb +3 -5
  463. data/spec/unit/knife_spec.rb +18 -0
  464. data/spec/unit/lwrp_spec.rb +4 -4
  465. data/spec/unit/mixin/powershell_exec_spec.rb +10 -0
  466. data/spec/unit/mixin/securable_spec.rb +1 -0
  467. data/spec/unit/mixin/user_context_spec.rb +9 -1
  468. data/spec/unit/node/attribute_spec.rb +2 -2
  469. data/spec/unit/node_spec.rb +24 -0
  470. data/spec/unit/platform/query_helpers_spec.rb +0 -143
  471. data/spec/unit/property/state_spec.rb +12 -7
  472. data/spec/unit/property/validation_spec.rb +25 -1
  473. data/spec/unit/property_spec.rb +18 -15
  474. data/spec/unit/provider/apt_preference_spec.rb +14 -10
  475. data/spec/unit/provider/apt_repository_spec.rb +9 -11
  476. data/spec/unit/provider/apt_update_spec.rb +12 -11
  477. data/spec/unit/provider/cookbook_file_spec.rb +4 -4
  478. data/spec/unit/provider/cron_spec.rb +2 -2
  479. data/spec/unit/provider/directory_spec.rb +4 -15
  480. data/spec/unit/provider/file_spec.rb +4 -4
  481. data/spec/unit/provider/git_spec.rb +44 -4
  482. data/spec/unit/provider/link_spec.rb +0 -1
  483. data/spec/unit/provider/log_spec.rb +3 -3
  484. data/spec/unit/provider/mdadm_spec.rb +3 -3
  485. data/spec/unit/provider/osx_profile_spec.rb +2 -2
  486. data/spec/unit/provider/package/dnf/python_helper_spec.rb +2 -2
  487. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +1 -1
  488. data/spec/unit/provider/package/homebrew_spec.rb +280 -174
  489. data/spec/unit/provider/package/msu_spec.rb +3 -3
  490. data/spec/unit/provider/package/pacman_spec.rb +65 -147
  491. data/spec/unit/provider/package/powershell_spec.rb +88 -96
  492. data/spec/unit/provider/package/rubygems_spec.rb +221 -31
  493. data/spec/unit/provider/package/snap_spec.rb +1 -1
  494. data/spec/unit/provider/package/windows/exe_spec.rb +1 -1
  495. data/spec/unit/provider/package/windows_spec.rb +53 -30
  496. data/spec/unit/provider/powershell_script_spec.rb +21 -61
  497. data/spec/unit/provider/remote_file_spec.rb +3 -4
  498. data/spec/unit/provider/service/arch_service_spec.rb +2 -3
  499. data/spec/unit/provider/service/debian_service_spec.rb +35 -14
  500. data/spec/unit/provider/service/gentoo_service_spec.rb +8 -8
  501. data/spec/unit/provider/service/macosx_spec.rb +210 -214
  502. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  503. data/spec/unit/provider/service/systemd_service_spec.rb +23 -23
  504. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  505. data/spec/unit/provider/service/windows_spec.rb +6 -2
  506. data/spec/unit/provider/subversion_spec.rb +4 -2
  507. data/spec/unit/provider/systemd_unit_spec.rb +24 -28
  508. data/spec/unit/provider/template_spec.rb +3 -4
  509. data/spec/unit/provider/zypper_repository_spec.rb +25 -75
  510. data/spec/unit/provider_resolver_spec.rb +11 -11
  511. data/spec/unit/provider_spec.rb +0 -1
  512. data/spec/unit/recipe_spec.rb +68 -0
  513. data/spec/unit/resource/alternatives_spec.rb +120 -0
  514. data/spec/unit/resource/apt_preference_spec.rb +0 -18
  515. data/spec/unit/resource/apt_repository_spec.rb +0 -18
  516. data/spec/unit/resource/apt_update_spec.rb +0 -18
  517. data/spec/unit/resource/archive_file_spec.rb +2 -11
  518. data/spec/unit/resource/chef_client_cron_spec.rb +119 -0
  519. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +102 -0
  520. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +70 -0
  521. data/spec/unit/resource/chef_vault_secret_spec.rb +40 -0
  522. data/spec/unit/resource/chocolatey_source_spec.rb +2 -1
  523. data/spec/unit/resource/cron_d_spec.rb +6 -48
  524. data/spec/unit/resource/cron_spec.rb +4 -10
  525. data/spec/unit/resource/gem_package_spec.rb +3 -3
  526. data/spec/unit/resource/helpers/cron_validations_spec.rb +77 -0
  527. data/spec/unit/resource/link_spec.rb +0 -4
  528. data/spec/unit/resource/locale_spec.rb +0 -34
  529. data/spec/unit/resource/ohai_spec.rb +56 -2
  530. data/spec/unit/resource/plist_spec.rb +130 -0
  531. data/spec/unit/resource/powershell_script_spec.rb +0 -5
  532. data/spec/unit/resource/{git_spec.rb → scm/git_spec.rb} +50 -2
  533. data/spec/unit/resource/{scm_spec.rb → scm/scm.rb} +1 -52
  534. data/spec/unit/resource/{subversion_spec.rb → scm/subversion_spec.rb} +2 -3
  535. data/spec/unit/resource/service_spec.rb +4 -0
  536. data/spec/unit/resource/user_spec.rb +2 -2
  537. data/spec/unit/resource/user_ulimit_spec.rb +53 -0
  538. data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
  539. data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
  540. data/spec/unit/resource/windows_feature_dism_spec.rb +2 -17
  541. data/spec/unit/resource/windows_feature_powershell_spec.rb +6 -47
  542. data/spec/unit/resource/windows_firewall_rule_spec.rb +88 -41
  543. data/spec/unit/resource/windows_package_spec.rb +4 -1
  544. data/spec/unit/resource/windows_service_spec.rb +9 -0
  545. data/spec/unit/resource/windows_task_spec.rb +1 -1
  546. data/spec/unit/resource/windows_uac_spec.rb +2 -2
  547. data/spec/unit/resource/yum_repository_spec.rb +21 -21
  548. data/spec/unit/resource_reporter_spec.rb +1 -5
  549. data/spec/unit/resource_spec.rb +11 -4
  550. data/spec/unit/role_spec.rb +11 -11
  551. data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
  552. data/spec/unit/run_context_spec.rb +1 -1
  553. data/spec/unit/search/query_spec.rb +1 -1
  554. data/spec/unit/util/threaded_job_queue_spec.rb +0 -9
  555. data/spec/unit/win32/security_spec.rb +3 -4
  556. data/tasks/rspec.rb +1 -1
  557. metadata +110 -75
  558. data/lib/chef/dsl/core.rb +0 -52
  559. data/lib/chef/knife/cookbook_site_share.rb +0 -41
  560. data/lib/chef/knife/cookbook_site_unshare.rb +0 -41
  561. data/lib/chef/provider/apt_preference.rb +0 -93
  562. data/lib/chef/provider/apt_repository.rb +0 -358
  563. data/lib/chef/provider/apt_update.rb +0 -79
  564. data/lib/chef/provider/log.rb +0 -43
  565. data/lib/chef/provider/mdadm.rb +0 -85
  566. data/lib/chef/provider/ohai.rb +0 -45
  567. data/lib/chef/resource/git.rb +0 -37
  568. data/spec/functional/resource/windows_font_spec.rb +0 -49
  569. data/spec/unit/provider/ohai_spec.rb +0 -84
@@ -21,7 +21,8 @@ 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
28
  description "Use the apt_update resource to manage APT repository updates on Debian and Ubuntu platforms."
@@ -50,6 +51,56 @@ class Chef
50
51
 
51
52
  default_action :periodic
52
53
  allowed_actions :update, :periodic
54
+
55
+ action_class do
56
+ APT_CONF_DIR = "/etc/apt/apt.conf.d".freeze
57
+ STAMP_DIR = "/var/lib/apt/periodic".freeze
58
+
59
+ # Determines whether we need to run `apt-get update`
60
+ #
61
+ # @return [Boolean]
62
+ def apt_up_to_date?
63
+ ::File.exist?("#{STAMP_DIR}/update-success-stamp") &&
64
+ ::File.mtime("#{STAMP_DIR}/update-success-stamp") > Time.now - new_resource.frequency
65
+ end
66
+
67
+ def do_update
68
+ [STAMP_DIR, APT_CONF_DIR].each do |d|
69
+ directory d do
70
+ recursive true
71
+ end
72
+ end
73
+
74
+ file "#{APT_CONF_DIR}/15update-stamp" do
75
+ content "APT::Update::Post-Invoke-Success {\"touch #{STAMP_DIR}/update-success-stamp 2>/dev/null || true\";};\n"
76
+ action :create_if_missing
77
+ end
78
+
79
+ execute "apt-get -q update" do
80
+ command [ "apt-get", "-q", "update" ]
81
+ default_env true
82
+ end
83
+ end
84
+ end
85
+
86
+ action :periodic do
87
+ return unless debian?
88
+
89
+ unless apt_up_to_date?
90
+ converge_by "update new lists of packages" do
91
+ do_update
92
+ end
93
+ end
94
+ end
95
+
96
+ action :update do
97
+ return unless debian?
98
+
99
+ converge_by "force update new lists of packages" do
100
+ do_update
101
+ end
102
+ end
103
+
53
104
  end
54
105
  end
55
106
  end
@@ -19,13 +19,12 @@
19
19
  #
20
20
 
21
21
  require_relative "../resource"
22
- require "fileutils" unless defined?(FileUtils)
23
22
 
24
23
  class Chef
25
24
  class Resource
26
25
  class ArchiveFile < Chef::Resource
26
+ unified_mode true
27
27
 
28
- resource_name :archive_file
29
28
  provides :archive_file
30
29
  provides :libarchive_file # legacy cookbook name
31
30
 
@@ -39,18 +38,6 @@ class Chef
39
38
  destination '/srv/files'
40
39
  end
41
40
  ```
42
-
43
- **Set specific permissions on the extracted files**:
44
-
45
- ```ruby
46
- archive_file 'Precompiled.zip' do
47
- owner 'tsmith'
48
- group 'staff'
49
- mode '700'
50
- path '/tmp/Precompiled.zip'
51
- destination '/srv/files'
52
- end
53
- ```
54
41
  DOC
55
42
 
56
43
  property :path, String,
@@ -65,7 +52,7 @@ class Chef
65
52
  description: "The group of the extracted files."
66
53
 
67
54
  property :mode, [String, Integer],
68
- description: "The mode of the extracted files. Integer values are deprecated as octal values (ex. 0755) would not be interpreted correctly.",
55
+ description: "The mode of the extracted files.",
69
56
  default: "755"
70
57
 
71
58
  property :destination, String,
@@ -84,11 +71,11 @@ class Chef
84
71
  alias_method :extract_options, :options
85
72
  alias_method :extract_to, :destination
86
73
 
74
+ require "fileutils" unless defined?(FileUtils)
75
+
87
76
  action :extract do
88
77
  description "Extract and archive file."
89
78
 
90
- require_libarchive
91
-
92
79
  unless ::File.exist?(new_resource.path)
93
80
  raise Errno::ENOENT, "No archive found at #{new_resource.path}! Cannot continue."
94
81
  end
@@ -97,8 +84,7 @@ class Chef
97
84
  Chef::Log.trace("File or directory does not exist at destination path: #{new_resource.destination}")
98
85
 
99
86
  converge_by("create directory #{new_resource.destination}") do
100
- # @todo when we remove the ability for mode to be an int we can remove the .to_s below
101
- FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_s.to_i(8))
87
+ FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_i)
102
88
  end
103
89
 
104
90
  extract(new_resource.path, new_resource.destination, Array(new_resource.options))
@@ -126,16 +112,6 @@ class Chef
126
112
  end
127
113
 
128
114
  action_class do
129
- def require_libarchive
130
- require "ffi-libarchive"
131
- end
132
-
133
- def define_resource_requirements
134
- if new_resource.mode.is_a?(Integer)
135
- Chef.deprecated(:archive_file_integer_file_mode, "The mode property should be passed to archive_file resources as a String and not an Integer to ensure the value is properly interpreted.")
136
- end
137
- end
138
-
139
115
  # This can't be a constant since we might not have required 'ffi-libarchive' yet.
140
116
  def extract_option_map
141
117
  {
@@ -159,6 +135,8 @@ class Chef
159
135
  #
160
136
  # @return [Boolean]
161
137
  def archive_differs_from_disk?(src, dest)
138
+ require "ffi-libarchive"
139
+
162
140
  modified = false
163
141
  Dir.chdir(dest) do
164
142
  archive = Archive::Reader.open_filename(src)
@@ -185,6 +163,8 @@ class Chef
185
163
  #
186
164
  # @return [void]
187
165
  def extract(src, dest, options = [])
166
+ require "ffi-libarchive"
167
+
188
168
  converge_by("extract #{src} to #{dest}") do
189
169
  flags = [options].flatten.map { |option| extract_option_map[option] }.compact.reduce(:|)
190
170
 
@@ -24,6 +24,8 @@ class Chef
24
24
  class Bash < Chef::Resource::Script
25
25
  unified_mode true
26
26
 
27
+ provides :bash
28
+
27
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)
@@ -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
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,7 +25,6 @@ class Chef
25
25
  unified_mode true
26
26
 
27
27
  provides :breakpoint, target_mode: true
28
- resource_name :breakpoint
29
28
 
30
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"
@@ -20,7 +20,8 @@ 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
27
  description "Use the build_essential resource to install the packages required for compiling C software from source."
@@ -37,15 +38,18 @@ class Chef
37
38
  compile_time true
38
39
  end
39
40
  ```
41
+
42
+ Upgrade compilation packages on macOS systems
43
+ ```ruby
44
+ build_essential 'Install compilation tools' do
45
+ action :upgrade
46
+ end
47
+ ```
40
48
  DOC
41
49
 
42
50
  # this allows us to use build_essential without setting a name
43
51
  property :name, String, default: ""
44
52
 
45
- property :compile_time, [TrueClass, FalseClass],
46
- description: "Install the build essential packages at compile time.",
47
- default: false, desired_state: false
48
-
49
53
  property :raise_if_unsupported, [TrueClass, FalseClass],
50
54
  description: "Raise a hard error on platforms where this resource is unsupported.",
51
55
  default: false, desired_state: false # FIXME: make this default to true
@@ -57,11 +61,8 @@ class Chef
57
61
  case
58
62
  when debian?
59
63
  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
64
+ when fedora_derived?
65
+ package %w{ autoconf bison flex gcc gcc-c++ gettext kernel-devel make m4 ncurses-devel patch }
65
66
  when freebsd?
66
67
  package "devel/gmake"
67
68
  package "devel/autoconf"
@@ -88,11 +89,7 @@ class Chef
88
89
  package "bison"
89
90
  package "gnu-coreutils"
90
91
  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"
92
+ package "gcc"
96
93
  package "gnu-grep"
97
94
  package "gnu-make"
98
95
  package "gnu-patch"
@@ -109,22 +106,33 @@ class Chef
109
106
  package "pkg-config"
110
107
  when suse?
111
108
  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
109
  else
114
- if new_resource.raise_if_unsupported
115
- raise <<-EOH
110
+ msg = <<-EOH
116
111
  The build_essential resource does not currently support the '#{node["platform_family"]}'
117
112
  platform family. Skipping...
118
- EOH
113
+ EOH
114
+ if new_resource.raise_if_unsupported
115
+ raise msg
119
116
  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
117
+ Chef::Log.warn msg
124
118
  end
125
119
  end
126
120
  end
127
121
 
122
+ action :upgrade do
123
+ description "Upgrade build essential (Xcode Command Line) tools on macOS"
124
+
125
+ if macos?
126
+ pkg_label = xcode_cli_package_label
127
+
128
+ # With upgrade action we should install if it's not installed or if there's an available update.
129
+ # `xcode_cli_package_label` will be nil if there's no update.
130
+ install_xcode_cli_tools(pkg_label) if !xcode_cli_installed? || xcode_cli_package_label
131
+ else
132
+ Chef::Log.info "The build_essential resource :upgrade action is only supported on macOS systems. Skipping..."
133
+ end
134
+ end
135
+
128
136
  action_class do
129
137
  #
130
138
  # Install Xcode Command Line tools via softwareupdate CLI
@@ -134,19 +142,16 @@ class Chef
134
142
  def install_xcode_cli_tools(label)
135
143
  # This script was graciously borrowed and modified from Tim Sutton's
136
144
  # 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
145
+ execute "install Xcode Command Line tools" do
146
+ command <<-EOH
147
+ # create the placeholder file that's checked by CLI updates' .dist code
148
+ # in Apple's SUS catalog
149
+ touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
150
+ # install it
151
+ softwareupdate -i "#{label}" --verbose
152
+ # Remove the placeholder to prevent perpetual appearance in the update utility
153
+ rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
154
+ EOH
150
155
  end
151
156
  end
152
157
 
@@ -156,7 +161,7 @@ class Chef
156
161
  #
157
162
  # @return [true, false]
158
163
  def xcode_cli_installed?
159
- packages = Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
164
+ packages = ::Plist.parse_xml(::File.open("/Library/Receipts/InstallHistory.plist", "r"))
160
165
  packages.select! { |package| package["displayName"].match? "Command Line Tools" }
161
166
  !packages.empty?
162
167
  end
@@ -176,17 +181,6 @@ class Chef
176
181
  available_updates.stdout[/^\s*\* (?:Label: )?(Command Line Tools.*)/, 1]
177
182
  end
178
183
  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
184
  end
191
185
  end
192
186
  end
@@ -23,8 +23,8 @@ 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
30
  description "Use the cab_package resource to install or remove Microsoft Windows cabinet (.cab) packages."
@@ -32,6 +32,13 @@ class Chef
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,225 @@
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
+ ```ruby
34
+ chef_client_cron "Run chef-client as a cron job"
35
+ ```
36
+
37
+ Run #{Chef::Dist::PRODUCT} twice a day
38
+ ```ruby
39
+ chef_client_cron "Run chef-client every 12 hours" do
40
+ minute 0
41
+ hour "0,12"
42
+ end
43
+ ```
44
+
45
+ Run #{Chef::Dist::PRODUCT} with extra options passed to the client
46
+ ```ruby
47
+ chef_client_cron "Run an override recipe" do
48
+ daemon_options ["--override-runlist mycorp_base::default"]
49
+ end
50
+ ```
51
+ DOC
52
+
53
+ extend Chef::ResourceHelpers::CronValidations
54
+
55
+ property :job_name, String,
56
+ default: Chef::Dist::CLIENT,
57
+ description: "The name of the cron job to create."
58
+
59
+ property :comment, String,
60
+ description: "A comment to place in the cron.d file."
61
+
62
+ property :user, String,
63
+ description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
64
+ default: "root"
65
+
66
+ property :minute, [Integer, String],
67
+ description: "The minute at which #{Chef::Dist::PRODUCT} is to run (0 - 59) or a cron pattern such as '0,30'.",
68
+ default: "0,30", callbacks: {
69
+ "should be a valid minute spec" => method(:validate_minute),
70
+ }
71
+
72
+ property :hour, [Integer, String],
73
+ description: "The hour at which #{Chef::Dist::PRODUCT} is to run (0 - 23) or a cron pattern such as '0,12'.",
74
+ default: "*", callbacks: {
75
+ "should be a valid hour spec" => method(:validate_hour),
76
+ }
77
+
78
+ property :day, [Integer, String],
79
+ 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'.",
80
+ default: "*", callbacks: {
81
+ "should be a valid day spec" => method(:validate_day),
82
+ }
83
+
84
+ property :month, [Integer, String],
85
+ description: "The month in the year on which #{Chef::Dist::PRODUCT} is to run (1 - 12, jan-dec, or *).",
86
+ default: "*", callbacks: {
87
+ "should be a valid month spec" => method(:validate_month),
88
+ }
89
+
90
+ property :weekday, [Integer, String],
91
+ 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.",
92
+ default: "*", callbacks: {
93
+ "should be a valid weekday spec" => method(:validate_dow),
94
+ }
95
+
96
+ property :splay, [Integer, String],
97
+ default: 300,
98
+ coerce: proc { |x| Integer(x) },
99
+ callbacks: { "should be a positive number" => proc { |v| v > 0 } },
100
+ 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."
101
+
102
+ property :mailto, String,
103
+ description: "The e-mail address to e-mail any cron task failures to."
104
+
105
+ property :accept_chef_license, [true, false],
106
+ description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
107
+ default: false
108
+
109
+ property :config_directory, String,
110
+ default: Chef::Dist::CONF_DIR,
111
+ description: "The path of the config directory."
112
+
113
+ property :log_directory, String,
114
+ default: lazy { platform?("mac_os_x") ? "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize}" : "/var/log/#{Chef::Dist::DIR_SUFFIX}" },
115
+ default_description: "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize} on macOS and /var/log/#{Chef::Dist::DIR_SUFFIX} otherwise",
116
+ description: "The path of the directory to create the log file in."
117
+
118
+ property :log_file_name, String,
119
+ default: "client.log",
120
+ description: "The name of the log file to use."
121
+
122
+ property :append_log_file, [true, false],
123
+ default: true,
124
+ description: "Append to the log file instead of overwriting the log file on each run."
125
+
126
+ property :chef_binary_path, String,
127
+ default: "/opt/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}",
128
+ description: "The path to the #{Chef::Dist::CLIENT} binary."
129
+
130
+ property :daemon_options, Array,
131
+ default: lazy { [] },
132
+ description: "An array of options to pass to the #{Chef::Dist::CLIENT} command."
133
+
134
+ property :environment, Hash,
135
+ default: lazy { {} },
136
+ description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of ``({'ENV_VARIABLE' => 'VALUE'})``."
137
+
138
+ action :add do
139
+ # TODO: Replace this with a :create_if_missing action on directory when that exists
140
+ unless ::Dir.exist?(new_resource.log_directory)
141
+ directory new_resource.log_directory do
142
+ owner new_resource.user
143
+ mode "0640"
144
+ recursive true
145
+ end
146
+ end
147
+
148
+ declare_resource(cron_resource_type, new_resource.job_name) do
149
+ minute new_resource.minute
150
+ hour new_resource.hour
151
+ day new_resource.day
152
+ weekday new_resource.weekday
153
+ month new_resource.month
154
+ environment new_resource.environment
155
+ mailto new_resource.mailto if new_resource.mailto
156
+ user new_resource.user
157
+ comment new_resource.comment if new_resource.comment
158
+ command cron_command
159
+ end
160
+ end
161
+
162
+ action :remove do
163
+ cron_d new_resource.job_name do
164
+ action :delete
165
+ end
166
+ end
167
+
168
+ action_class do
169
+ #
170
+ # Generate a uniformly distributed unique number to sleep from 0 to the splay time
171
+ #
172
+ # @param [Integer] splay The number of seconds to splay
173
+ #
174
+ # @return [Integer]
175
+ #
176
+ def splay_sleep_time(splay)
177
+ seed = node["shard_seed"] || Digest::MD5.hexdigest(node.name).to_s.hex
178
+ random = Random.new(seed.to_i)
179
+ random.rand(splay)
180
+ end
181
+
182
+ #
183
+ # The complete cron command to run
184
+ #
185
+ # @return [String]
186
+ #
187
+ def cron_command
188
+ cmd = ""
189
+ cmd << "/bin/sleep #{splay_sleep_time(new_resource.splay)}; "
190
+ cmd << "#{new_resource.chef_binary_path} "
191
+ cmd << "#{new_resource.daemon_options.join(" ")} " unless new_resource.daemon_options.empty?
192
+ cmd << "-c #{::File.join(new_resource.config_directory, "client.rb")} "
193
+ cmd << "--chef-license accept " if new_resource.accept_chef_license
194
+ cmd << log_command
195
+ cmd << " || echo \"#{Chef::Dist::PRODUCT} execution failed\"" if new_resource.mailto
196
+ cmd
197
+ end
198
+
199
+ #
200
+ # The portion of the overall cron job that handles logging based on the append_log_file property
201
+ #
202
+ # @return [String]
203
+ #
204
+ def log_command
205
+ if new_resource.append_log_file
206
+ "-L #{::File.join(new_resource.log_directory, new_resource.log_file_name)}"
207
+ else
208
+ "> #{::File.join(new_resource.log_directory, new_resource.log_file_name)} 2>&1"
209
+ end
210
+ end
211
+
212
+ #
213
+ # The type of cron resource to run. Linux systems all support the /etc/cron.d directory
214
+ # and can use the cron_d resource, but Solaris / AIX / FreeBSD need to use the crontab
215
+ # via the legacy cron resource.
216
+ #
217
+ # @return [Symbol]
218
+ #
219
+ def cron_resource_type
220
+ linux? ? :cron_d : :cron
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end