chef 16.3.38-universal-mingw32 → 16.5.64-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/knife +1 -1
  5. data/chef-universal-mingw32.gemspec +0 -1
  6. data/chef.gemspec +2 -1
  7. data/distro/templates/powershell/chef/chef.psm1.erb +18 -18
  8. data/ext/win32-eventlog/Rakefile +2 -2
  9. data/ext/win32-eventlog/chef-log.man.erb +4 -4
  10. data/lib/chef/action_collection.rb +4 -0
  11. data/lib/chef/api_client/registration.rb +2 -2
  12. data/lib/chef/application.rb +19 -17
  13. data/lib/chef/application/apply.rb +17 -12
  14. data/lib/chef/application/base.rb +26 -23
  15. data/lib/chef/application/client.rb +10 -4
  16. data/lib/chef/application/exit_code.rb +13 -4
  17. data/lib/chef/application/knife.rb +22 -11
  18. data/lib/chef/application/solo.rb +2 -1
  19. data/lib/chef/application/windows_service.rb +39 -39
  20. data/lib/chef/application/windows_service_manager.rb +6 -6
  21. data/lib/chef/chef_class.rb +0 -1
  22. data/lib/chef/chef_fs/chef_fs_data_store.rb +54 -54
  23. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
  24. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
  25. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
  26. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
  27. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
  28. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
  29. data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
  30. data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
  31. data/lib/chef/chef_fs/knife.rb +2 -2
  32. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  33. data/lib/chef/client.rb +21 -22
  34. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  35. data/lib/chef/cookbook/synchronizer.rb +2 -2
  36. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  37. data/lib/chef/cookbook_uploader.rb +1 -1
  38. data/lib/chef/data_collector.rb +6 -5
  39. data/lib/chef/data_collector/config_validation.rb +22 -13
  40. data/lib/chef/data_collector/run_end_message.rb +13 -3
  41. data/lib/chef/data_collector/run_start_message.rb +1 -1
  42. data/lib/chef/deprecated.rb +1 -1
  43. data/lib/chef/deprecation/warnings.rb +2 -2
  44. data/lib/chef/digester.rb +2 -2
  45. data/lib/chef/dsl/chef_vault.rb +1 -1
  46. data/lib/chef/dsl/data_query.rb +2 -2
  47. data/lib/chef/dsl/platform_introspection.rb +9 -9
  48. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  49. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  50. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  51. data/lib/chef/environment.rb +4 -4
  52. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  53. data/lib/chef/exceptions.rb +5 -5
  54. data/lib/chef/file_access_control/windows.rb +5 -1
  55. data/lib/chef/file_content_management/tempfile.rb +9 -9
  56. data/lib/chef/formatters/doc.rb +7 -6
  57. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  58. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  59. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  60. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  61. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  62. data/lib/chef/formatters/minimal.rb +5 -4
  63. data/lib/chef/handler.rb +2 -0
  64. data/lib/chef/http.rb +15 -13
  65. data/lib/chef/http/auth_credentials.rb +5 -1
  66. data/lib/chef/http/authenticator.rb +3 -1
  67. data/lib/chef/http/basic_client.rb +4 -2
  68. data/lib/chef/http/decompressor.rb +1 -1
  69. data/lib/chef/http/http_request.rb +7 -5
  70. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  71. data/lib/chef/http/ssl_policies.rb +1 -1
  72. data/lib/chef/json_compat.rb +2 -2
  73. data/lib/chef/knife.rb +4 -4
  74. data/lib/chef/knife/bootstrap.rb +18 -16
  75. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  76. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  77. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  78. data/lib/chef/knife/client_create.rb +3 -3
  79. data/lib/chef/knife/config_get.rb +8 -97
  80. data/lib/chef/knife/config_get_profile.rb +9 -9
  81. data/lib/chef/knife/config_list.rb +139 -0
  82. data/lib/chef/knife/config_list_profiles.rb +8 -98
  83. data/lib/chef/knife/config_show.rb +127 -0
  84. data/lib/chef/knife/config_use.rb +61 -0
  85. data/lib/chef/knife/config_use_profile.rb +9 -24
  86. data/lib/chef/knife/configure.rb +4 -2
  87. data/lib/chef/knife/cookbook_download.rb +1 -1
  88. data/lib/chef/knife/cookbook_metadata.rb +1 -1
  89. data/lib/chef/knife/cookbook_upload.rb +23 -23
  90. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  91. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  92. data/lib/chef/knife/core/hashed_command_loader.rb +2 -2
  93. data/lib/chef/knife/core/object_loader.rb +1 -1
  94. data/lib/chef/knife/core/windows_bootstrap_context.rb +42 -34
  95. data/lib/chef/knife/delete.rb +15 -15
  96. data/lib/chef/knife/exec.rb +4 -4
  97. data/lib/chef/knife/node_show.rb +2 -2
  98. data/lib/chef/knife/serve.rb +3 -3
  99. data/lib/chef/knife/ssh.rb +22 -7
  100. data/lib/chef/knife/ssl_check.rb +3 -3
  101. data/lib/chef/knife/status.rb +2 -2
  102. data/lib/chef/knife/user_create.rb +2 -2
  103. data/lib/chef/knife/xargs.rb +19 -19
  104. data/lib/chef/knife/yaml_convert.rb +1 -1
  105. data/lib/chef/local_mode.rb +2 -2
  106. data/lib/chef/log/syslog.rb +2 -2
  107. data/lib/chef/log/winevt.rb +2 -2
  108. data/lib/chef/mixin/checksum.rb +0 -1
  109. data/lib/chef/mixin/deep_merge.rb +35 -18
  110. data/lib/chef/mixin/openssl_helper.rb +4 -5
  111. data/lib/chef/mixin/shell_out.rb +1 -1
  112. data/lib/chef/mixin/template.rb +2 -2
  113. data/lib/chef/mixin/uris.rb +2 -2
  114. data/lib/chef/mixin/versioned_api.rb +1 -2
  115. data/lib/chef/mixin/which.rb +1 -1
  116. data/lib/chef/monkey_patches/net_http.rb +4 -4
  117. data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
  118. data/lib/chef/node/attribute.rb +2 -4
  119. data/lib/chef/node_map.rb +2 -2
  120. data/lib/chef/platform/service_helpers.rb +1 -1
  121. data/lib/chef/policy_builder/policyfile.rb +2 -2
  122. data/lib/chef/property.rb +1 -1
  123. data/lib/chef/provider.rb +0 -4
  124. data/lib/chef/provider/cron/unix.rb +0 -2
  125. data/lib/chef/provider/file.rb +2 -2
  126. data/lib/chef/provider/git.rb +5 -5
  127. data/lib/chef/provider/group.rb +0 -2
  128. data/lib/chef/provider/group/suse.rb +5 -5
  129. data/lib/chef/provider/ifconfig.rb +1 -4
  130. data/lib/chef/provider/launchd.rb +2 -2
  131. data/lib/chef/provider/mount.rb +0 -2
  132. data/lib/chef/provider/mount/linux.rb +63 -0
  133. data/lib/chef/provider/package.rb +0 -2
  134. data/lib/chef/provider/package/rubygems.rb +22 -19
  135. data/lib/chef/provider/package/snap.rb +1 -2
  136. data/lib/chef/provider/package/windows.rb +2 -2
  137. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -10
  138. data/lib/chef/provider/package/zypper.rb +1 -1
  139. data/lib/chef/provider/powershell_script.rb +21 -5
  140. data/lib/chef/provider/remote_file/content.rb +3 -0
  141. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  142. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  143. data/lib/chef/provider/route.rb +2 -6
  144. data/lib/chef/provider/service/arch.rb +1 -1
  145. data/lib/chef/provider/service/debian.rb +1 -1
  146. data/lib/chef/provider/service/gentoo.rb +2 -2
  147. data/lib/chef/provider/service/macosx.rb +4 -4
  148. data/lib/chef/provider/service/openbsd.rb +1 -4
  149. data/lib/chef/provider/service/redhat.rb +2 -2
  150. data/lib/chef/provider/service/upstart.rb +1 -1
  151. data/lib/chef/provider/service/windows.rb +10 -10
  152. data/lib/chef/provider/systemd_unit.rb +0 -2
  153. data/lib/chef/provider/template/content.rb +1 -0
  154. data/lib/chef/provider/template_finder.rb +2 -10
  155. data/lib/chef/provider/user/dscl.rb +5 -5
  156. data/lib/chef/provider/user/mac.rb +10 -10
  157. data/lib/chef/provider/windows_task.rb +1 -5
  158. data/lib/chef/provider/zypper_repository.rb +2 -3
  159. data/lib/chef/provider_resolver.rb +1 -1
  160. data/lib/chef/providers.rb +1 -1
  161. data/lib/chef/recipe.rb +2 -2
  162. data/lib/chef/resource.rb +7 -11
  163. data/lib/chef/resource/apt_repository.rb +2 -11
  164. data/lib/chef/resource/bff_package.rb +22 -0
  165. data/lib/chef/resource/breakpoint.rb +57 -2
  166. data/lib/chef/resource/build_essential.rb +1 -1
  167. data/lib/chef/resource/cab_package.rb +29 -0
  168. data/lib/chef/resource/chef_client_cron.rb +32 -25
  169. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  170. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  171. data/lib/chef/resource/chef_client_systemd_timer.rb +26 -19
  172. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  173. data/lib/chef/resource/chef_gem.rb +10 -10
  174. data/lib/chef/resource/chef_handler.rb +148 -4
  175. data/lib/chef/resource/chef_sleep.rb +2 -2
  176. data/lib/chef/resource/chef_vault_secret.rb +14 -14
  177. data/lib/chef/resource/cookbook_file.rb +2 -2
  178. data/lib/chef/resource/cron/cron_d.rb +0 -1
  179. data/lib/chef/resource/dnf_package.rb +2 -2
  180. data/lib/chef/resource/dsc_resource.rb +0 -1
  181. data/lib/chef/resource/dsc_script.rb +2 -2
  182. data/lib/chef/resource/execute.rb +8 -9
  183. data/lib/chef/resource/file.rb +4 -4
  184. data/lib/chef/resource/gem_package.rb +5 -5
  185. data/lib/chef/resource/homebrew_package.rb +3 -3
  186. data/lib/chef/resource/homebrew_update.rb +7 -7
  187. data/lib/chef/resource/hostname.rb +19 -19
  188. data/lib/chef/resource/launchd.rb +2 -1
  189. data/lib/chef/resource/locale.rb +2 -2
  190. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  191. data/lib/chef/resource/notify_group.rb +0 -1
  192. data/lib/chef/resource/ohai.rb +46 -3
  193. data/lib/chef/resource/ohai_hint.rb +33 -0
  194. data/lib/chef/resource/openssl_dhparam.rb +29 -5
  195. data/lib/chef/resource/openssl_ec_private_key.rb +8 -3
  196. data/lib/chef/resource/openssl_ec_public_key.rb +4 -2
  197. data/lib/chef/resource/openssl_rsa_private_key.rb +8 -3
  198. data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
  199. data/lib/chef/resource/openssl_x509_certificate.rb +38 -35
  200. data/lib/chef/resource/openssl_x509_crl.rb +21 -10
  201. data/lib/chef/resource/openssl_x509_request.rb +37 -36
  202. data/lib/chef/resource/osx_profile.rb +292 -6
  203. data/lib/chef/resource/plist.rb +1 -1
  204. data/lib/chef/resource/powershell_package_source.rb +6 -6
  205. data/lib/chef/resource/powershell_script.rb +24 -30
  206. data/lib/chef/resource/reboot.rb +2 -2
  207. data/lib/chef/resource/remote_file.rb +3 -3
  208. data/lib/chef/resource/rhsm_register.rb +22 -10
  209. data/lib/chef/resource/ruby_block.rb +2 -2
  210. data/lib/chef/resource/scm/subversion.rb +2 -2
  211. data/lib/chef/resource/service.rb +3 -3
  212. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  213. data/lib/chef/resource/sudo.rb +1 -1
  214. data/lib/chef/resource/support/cron.d.erb +1 -1
  215. data/lib/chef/resource/support/cron_access.erb +1 -1
  216. data/lib/chef/resource/support/sudoer.erb +1 -1
  217. data/lib/chef/resource/support/ulimit.erb +1 -1
  218. data/lib/chef/resource/sysctl.rb +6 -10
  219. data/lib/chef/resource/systemd_unit.rb +2 -2
  220. data/lib/chef/resource/template.rb +2 -2
  221. data/lib/chef/resource/timezone.rb +112 -73
  222. data/lib/chef/resource/windows_ad_join.rb +12 -3
  223. data/lib/chef/resource/windows_audit_policy.rb +3 -0
  224. data/lib/chef/resource/windows_auto_run.rb +2 -0
  225. data/lib/chef/resource/windows_certificate.rb +8 -4
  226. data/lib/chef/resource/windows_dfs_folder.rb +2 -0
  227. data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
  228. data/lib/chef/resource/windows_dfs_server.rb +2 -0
  229. data/lib/chef/resource/windows_dns_record.rb +10 -7
  230. data/lib/chef/resource/windows_dns_zone.rb +12 -7
  231. data/lib/chef/resource/windows_feature.rb +2 -0
  232. data/lib/chef/resource/windows_feature_dism.rb +10 -0
  233. data/lib/chef/resource/windows_feature_powershell.rb +14 -2
  234. data/lib/chef/resource/windows_firewall_profile.rb +24 -20
  235. data/lib/chef/resource/windows_firewall_rule.rb +5 -3
  236. data/lib/chef/resource/windows_font.rb +3 -1
  237. data/lib/chef/resource/windows_package.rb +28 -5
  238. data/lib/chef/resource/windows_pagefile.rb +4 -0
  239. data/lib/chef/resource/windows_printer.rb +22 -21
  240. data/lib/chef/resource/windows_printer_port.rb +20 -17
  241. data/lib/chef/resource/windows_security_policy.rb +2 -0
  242. data/lib/chef/resource/windows_share.rb +5 -3
  243. data/lib/chef/resource/windows_shortcut.rb +2 -0
  244. data/lib/chef/resource/windows_uac.rb +2 -0
  245. data/lib/chef/resource/windows_user_privilege.rb +54 -53
  246. data/lib/chef/resource/windows_workgroup.rb +5 -6
  247. data/lib/chef/resource/yum_package.rb +2 -2
  248. data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
  249. data/lib/chef/resources.rb +3 -1
  250. data/lib/chef/role.rb +2 -2
  251. data/lib/chef/run_context.rb +2 -2
  252. data/lib/chef/run_context/cookbook_compiler.rb +21 -21
  253. data/lib/chef/run_lock.rb +2 -2
  254. data/lib/chef/run_status.rb +2 -6
  255. data/lib/chef/search/query.rb +4 -5
  256. data/lib/chef/server_api_versions.rb +4 -0
  257. data/lib/chef/shell.rb +32 -27
  258. data/lib/chef/shell/ext.rb +11 -11
  259. data/lib/chef/shell/shell_session.rb +2 -2
  260. data/lib/chef/train_transport.rb +5 -104
  261. data/lib/chef/util/backup.rb +1 -1
  262. data/lib/chef/util/diff.rb +14 -14
  263. data/lib/chef/util/powershell/cmdlet.rb +4 -2
  264. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  265. data/lib/chef/util/threaded_job_queue.rb +0 -2
  266. data/lib/chef/version.rb +1 -1
  267. data/lib/chef/win32/crypto.rb +1 -1
  268. data/lib/chef/win32/file.rb +2 -2
  269. data/lib/chef/win32/file/version_info.rb +5 -5
  270. data/lib/chef/win32/registry.rb +1 -2
  271. data/spec/data/shef-config.rb +1 -1
  272. data/spec/data/ssl/chef-rspec.cert +15 -15
  273. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  274. data/spec/functional/resource/aix_service_spec.rb +2 -2
  275. data/spec/functional/resource/aixinit_service_spec.rb +8 -8
  276. data/spec/functional/resource/bff_spec.rb +2 -2
  277. data/spec/functional/resource/cookbook_file_spec.rb +1 -1
  278. data/spec/functional/resource/dsc_resource_spec.rb +1 -1
  279. data/spec/functional/resource/dsc_script_spec.rb +0 -1
  280. data/spec/functional/resource/group_spec.rb +6 -6
  281. data/spec/functional/resource/insserv_spec.rb +5 -5
  282. data/spec/functional/resource/link_spec.rb +20 -20
  283. data/spec/functional/resource/powershell_script_spec.rb +4 -4
  284. data/spec/functional/resource/rpm_spec.rb +2 -2
  285. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  286. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  287. data/spec/functional/resource/windows_certificate_spec.rb +3 -3
  288. data/spec/functional/resource/windows_font_spec.rb +49 -0
  289. data/spec/functional/resource/windows_security_policy_spec.rb +0 -3
  290. data/spec/functional/resource/windows_task_spec.rb +13 -13
  291. data/spec/functional/run_lock_spec.rb +24 -24
  292. data/spec/functional/version_spec.rb +3 -3
  293. data/spec/functional/win32/registry_spec.rb +8 -8
  294. data/spec/functional/win32/service_manager_spec.rb +1 -1
  295. data/spec/integration/client/client_spec.rb +4 -4
  296. data/spec/integration/client/exit_code_spec.rb +3 -2
  297. data/spec/integration/client/ipv6_spec.rb +1 -1
  298. data/spec/integration/knife/common_options_spec.rb +12 -12
  299. data/spec/integration/knife/config_list_spec.rb +220 -0
  300. data/spec/integration/knife/config_show_spec.rb +192 -0
  301. data/spec/integration/knife/config_use_spec.rb +198 -0
  302. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  303. data/spec/integration/knife/diff_spec.rb +3 -1
  304. data/spec/integration/knife/download_spec.rb +3 -1
  305. data/spec/integration/knife/serve_spec.rb +5 -5
  306. data/spec/integration/knife/upload_spec.rb +3 -1
  307. data/spec/integration/ohai/ohai_spec.rb +61 -0
  308. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  309. data/spec/integration/recipes/remote_directory.rb +1 -1
  310. data/spec/integration/solo/solo_spec.rb +5 -5
  311. data/spec/spec_helper.rb +12 -9
  312. data/spec/stress/win32/file_spec.rb +1 -1
  313. data/spec/support/chef_helpers.rb +2 -2
  314. data/spec/support/matchers/leak.rb +2 -2
  315. data/spec/support/platform_helpers.rb +17 -35
  316. data/spec/support/platforms/win32/spec_service.rb +1 -1
  317. data/spec/support/shared/functional/directory_resource.rb +1 -1
  318. data/spec/support/shared/functional/execute_resource.rb +1 -1
  319. data/spec/support/shared/functional/file_resource.rb +20 -20
  320. data/spec/support/shared/functional/securable_resource.rb +108 -27
  321. data/spec/support/shared/functional/win32_service.rb +2 -2
  322. data/spec/support/shared/functional/windows_script.rb +3 -3
  323. data/spec/support/shared/integration/integration_helper.rb +22 -52
  324. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  325. data/spec/support/shared/unit/script_resource.rb +6 -20
  326. data/spec/support/shared/unit/windows_script_resource.rb +15 -28
  327. data/spec/tiny_server.rb +0 -1
  328. data/spec/unit/application/client_spec.rb +2 -2
  329. data/spec/unit/application/exit_code_spec.rb +10 -0
  330. data/spec/unit/application_spec.rb +4 -6
  331. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  332. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  333. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  334. data/spec/unit/cookbook_spec.rb +2 -2
  335. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  336. data/spec/unit/data_collector_spec.rb +28 -113
  337. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  338. data/spec/unit/environment_spec.rb +7 -7
  339. data/spec/unit/file_access_control_spec.rb +1 -1
  340. data/spec/unit/http/api_versions_spec.rb +19 -1
  341. data/spec/unit/knife/bootstrap_spec.rb +20 -20
  342. data/spec/unit/knife/cookbook_download_spec.rb +4 -4
  343. data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
  344. data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
  345. data/spec/unit/knife/core/ui_spec.rb +1 -0
  346. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
  347. data/spec/unit/knife/ssh_spec.rb +2 -2
  348. data/spec/unit/knife/supermarket_share_spec.rb +1 -1
  349. data/spec/unit/lwrp_spec.rb +3 -3
  350. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  351. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  352. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  353. data/spec/unit/mixin/securable_spec.rb +2 -2
  354. data/spec/unit/mixin/template_spec.rb +30 -30
  355. data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
  356. data/spec/unit/node/immutable_collections_spec.rb +8 -4
  357. data/spec/unit/node_spec.rb +5 -5
  358. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  359. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  360. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  361. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  362. data/spec/unit/provider/powershell_script_spec.rb +11 -4
  363. data/spec/unit/provider/remote_directory_spec.rb +9 -9
  364. data/spec/unit/provider/route_spec.rb +0 -2
  365. data/spec/unit/provider/service/arch_service_spec.rb +3 -2
  366. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
  368. data/spec/unit/provider/service/macosx_spec.rb +3 -3
  369. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  370. data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
  371. data/spec/unit/provider_resolver_spec.rb +6 -6
  372. data/spec/unit/recipe_spec.rb +1 -1
  373. data/spec/unit/resource/batch_spec.rb +6 -6
  374. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  375. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  376. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  377. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  378. data/spec/unit/resource/execute_spec.rb +113 -118
  379. data/spec/unit/resource/launchd_spec.rb +8 -0
  380. data/spec/unit/resource/osx_profile_spec.rb +299 -0
  381. data/spec/unit/resource/powershell_script_spec.rb +11 -29
  382. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  383. data/spec/unit/resource/script_spec.rb +6 -1
  384. data/spec/unit/resource/timezone_spec.rb +63 -0
  385. data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
  386. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  387. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  388. data/spec/unit/role_spec.rb +11 -11
  389. data/spec/unit/run_lock_spec.rb +5 -1
  390. data/spec/unit/runner_spec.rb +1 -2
  391. data/spec/unit/server_api_spec.rb +43 -16
  392. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  393. data/spec/unit/shell/shell_session_spec.rb +35 -64
  394. data/spec/unit/shell_spec.rb +16 -19
  395. data/spec/unit/train_transport_spec.rb +14 -13
  396. data/spec/unit/util/selinux_spec.rb +2 -0
  397. data/tasks/rspec.rb +1 -3
  398. metadata +42 -33
  399. data/lib/chef/dist.rb +0 -68
  400. data/lib/chef/provider/osx_profile.rb +0 -255
  401. data/spec/integration/knife/config_get_profile_spec.rb +0 -113
  402. data/spec/integration/knife/config_get_spec.rb +0 -191
  403. data/spec/integration/knife/config_list_profiles_spec.rb +0 -218
  404. data/spec/integration/knife/config_use_profile_spec.rb +0 -154
  405. data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -16,7 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
  require_relative "../resource"
19
- require "plist"
19
+ autoload :Plist, "plist"
20
20
 
21
21
  class Chef
22
22
  class Resource
@@ -33,8 +33,8 @@ class Chef
33
33
  name_property: true
34
34
 
35
35
  property :url, String,
36
- description: "The url to the package source.",
37
- required: true
36
+ description: "The URL to the package source.",
37
+ required: [:register]
38
38
 
39
39
  property :trusted, [TrueClass, FalseClass],
40
40
  description: "Whether or not to trust packages from this source.",
@@ -43,17 +43,17 @@ class Chef
43
43
  property :provider_name, String,
44
44
  equal_to: %w{ Programs msi NuGet msu PowerShellGet psl chocolatey },
45
45
  validation_message: "The following providers are supported: 'Programs', 'msi', 'NuGet', 'msu', 'PowerShellGet', 'psl' or 'chocolatey'",
46
- description: "The package management provider for the source. It supports the following providers: 'Programs', 'msi', 'NuGet', 'msu', 'PowerShellGet', 'psl' and 'chocolatey'.",
46
+ description: "The package management provider for the source.",
47
47
  default: "NuGet"
48
48
 
49
49
  property :publish_location, String,
50
- description: "The url where modules will be published to for this source. Only valid if the provider is 'PowerShellGet'."
50
+ description: "The URL where modules will be published to for this source. Only valid if the provider is `PowerShellGet`."
51
51
 
52
52
  property :script_source_location, String,
53
- description: "The url where scripts are located for this source. Only valid if the provider is 'PowerShellGet'."
53
+ description: "The URL where scripts are located for this source. Only valid if the provider is `PowerShellGet`."
54
54
 
55
55
  property :script_publish_location, String,
56
- description: "The location where scripts will be published to for this source. Only valid if the provider is 'PowerShellGet'."
56
+ description: "The location where scripts will be published to for this source. Only valid if the provider is `PowerShellGet`."
57
57
 
58
58
  load_current_value do
59
59
  cmd = load_resource_state_script(source_name)
@@ -25,19 +25,31 @@ class Chef
25
25
  provides :powershell_script, os: "windows"
26
26
 
27
27
  property :flags, String,
28
- description: "A string that is passed to the Windows PowerShell command",
29
- default: lazy { default_flags },
30
- coerce: proc { |input|
31
- if input == default_flags
32
- # Means there was no input provided,
33
- # and should use defaults in this case
34
- input
35
- else
36
- # The last occurrence of a flag would override its
37
- # previous one at the time of command execution.
38
- [default_flags, input].join(" ")
28
+ description: "A string that is passed to the Windows PowerShell command"
29
+
30
+ property :convert_boolean_return, [true, false],
31
+ default: false,
32
+ description: <<~DESC
33
+ Return `0` if the last line of a command is evaluated to be true or to return `1` if the last line is evaluated to be false.
34
+
35
+ When the `guard_interpreter` common attribute is set to `:powershell_script`, a string command will be evaluated as if this value were set to `true`. This is because the behavior of this attribute is similar to the value of the `"$?"` expression common in UNIX interpreters. For example, this:
36
+
37
+ ```ruby
38
+ powershell_script 'make_safe_backup' do
39
+ guard_interpreter :powershell_script
40
+ code 'cp ~/data/nodes.json ~/data/nodes.bak'
41
+ not_if 'test-path ~/data/nodes.bak'
42
+ end
43
+ ```
44
+
45
+ is similar to:
46
+ ```ruby
47
+ bash 'make_safe_backup' do
48
+ code 'cp ~/data/nodes.json ~/data/nodes.bak'
49
+ not_if 'test -e ~/data/nodes.bak'
39
50
  end
40
- }
51
+ ```
52
+ DESC
41
53
 
42
54
  description "Use the **powershell_script** resource to execute a script using the Windows PowerShell"\
43
55
  " interpreter, much like how the script and script-based resources—bash, csh, perl, python,"\
@@ -52,15 +64,6 @@ class Chef
52
64
  super
53
65
  @interpreter = "powershell.exe"
54
66
  @default_guard_interpreter = resource_name
55
- @convert_boolean_return = false
56
- end
57
-
58
- def convert_boolean_return(arg = nil)
59
- set_or_return(
60
- :convert_boolean_return,
61
- arg,
62
- kind_of: [ FalseClass, TrueClass ]
63
- )
64
67
  end
65
68
 
66
69
  # Allow callers evaluating guards to request default
@@ -73,15 +76,6 @@ class Chef
73
76
  def self.get_default_attributes(opts)
74
77
  { convert_boolean_return: true }
75
78
  end
76
-
77
- # Options that will be passed to Windows PowerShell command
78
- #
79
- # @returns [String]
80
- def default_flags
81
- # Set InputFormat to None as PowerShell will hang if STDIN is redirected
82
- # http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
83
- "-NoLogo -NonInteractive -NoProfile -ExecutionPolicy Bypass -InputFormat None"
84
- end
85
79
  end
86
80
  end
87
81
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../resource"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  class Resource
@@ -36,7 +36,7 @@ class Chef
36
36
 
37
37
  property :reason, String,
38
38
  description: "A string that describes the reboot action.",
39
- default: "Reboot by #{Chef::Dist::PRODUCT}"
39
+ default: "Reboot by #{ChefUtils::Dist::Infra::PRODUCT}"
40
40
 
41
41
  property :delay_mins, Integer,
42
42
  description: "The amount of time (in minutes) to delay a reboot request.",
@@ -22,7 +22,7 @@ require_relative "file"
22
22
  require_relative "../provider/remote_file"
23
23
  require_relative "../mixin/securable"
24
24
  require_relative "../mixin/uris"
25
- require_relative "../dist"
25
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
26
26
 
27
27
  class Chef
28
28
  class Resource
@@ -74,7 +74,7 @@ class Chef
74
74
  end
75
75
 
76
76
  property :checksum, String,
77
- description: "Optional, see `use_conditional_get`. The SHA-256 checksum of the file. Use to prevent a file from being re-downloaded. When the local file matches the checksum, #{Chef::Dist::PRODUCT} does not download it."
77
+ description: "Optional, see `use_conditional_get`. The SHA-256 checksum of the file. Use to prevent a file from being re-downloaded. When the local file matches the checksum, #{ChefUtils::Dist::Infra::PRODUCT} does not download it."
78
78
 
79
79
  # Disable or enable ETag and Last Modified conditional GET. Equivalent to
80
80
  # use_etag(true_or_false)
@@ -93,7 +93,7 @@ class Chef
93
93
  description: "Enable `If-Modified-Since` headers. Set to `false` to disable `If-Modified-Since` headers. To use this setting, `use_conditional_get` must also be set to `true`."
94
94
 
95
95
  property :ftp_active_mode, [ TrueClass, FalseClass ], default: false,
96
- description: "Whether #{Chef::Dist::PRODUCT} uses active or passive FTP. Set to `true` to use active FTP."
96
+ description: "Whether #{ChefUtils::Dist::Infra::PRODUCT} uses active or passive FTP. Set to `true` to use active FTP."
97
97
 
98
98
  property :headers, Hash, default: lazy { {} },
99
99
  description: "A Hash of custom HTTP headers."
@@ -16,7 +16,7 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
- require_relative "../dist"
19
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
20
20
  require "shellwords" unless defined?(Shellwords)
21
21
 
22
22
  class Chef
@@ -47,6 +47,10 @@ class Chef
47
47
  property :password, String,
48
48
  description: "The password to use when registering. This property is not applicable if using an activation key. If specified, username and environment are also required."
49
49
 
50
+ property :system_name, String,
51
+ description: "The name of the system to register, defaults to the hostname.",
52
+ introduced: "16.5"
53
+
50
54
  property :auto_attach,
51
55
  [TrueClass, FalseClass],
52
56
  description: "If true, RHSM will attempt to automatically attach the host to applicable subscriptions. It is generally better to use an activation key with the subscriptions pre-defined.",
@@ -61,7 +65,7 @@ class Chef
61
65
  default: false, desired_state: false
62
66
 
63
67
  property :https_for_ca_consumer, [TrueClass, FalseClass],
64
- description: "If true, #{Chef::Dist::PRODUCT} will fetch the katello-ca-consumer-latest.noarch.rpm from the satellite_host using HTTPS.",
68
+ description: "If true, #{ChefUtils::Dist::Infra::PRODUCT} will fetch the katello-ca-consumer-latest.noarch.rpm from the satellite_host using HTTPS.",
65
69
  default: false, desired_state: false,
66
70
  introduced: "15.9"
67
71
 
@@ -121,24 +125,30 @@ class Chef
121
125
  end
122
126
 
123
127
  action_class do
128
+ #
129
+ # @return [Symbol] dnf_package or yum_package depending on OS release
130
+ #
124
131
  def package_resource
125
132
  node["platform_version"].to_i >= 8 ? :dnf_package : :yum_package
126
133
  end
127
134
 
135
+ #
136
+ # @return [Boolean] is the node registered with RHSM
137
+ #
128
138
  def registered_with_rhsm?
129
- # FIXME: use shell_out
130
- cmd = Mixlib::ShellOut.new("subscription-manager status", env: { LANG: "en_US" })
131
- cmd.run_command
132
- !cmd.stdout.match(/Overall Status: Unknown/)
139
+ @registered ||= !shell_out("subscription-manager status").stdout.include?("Overall Status: Unknown")
133
140
  end
134
141
 
142
+ #
143
+ # @return [Boolean] is katello-ca-consumer installed
144
+ #
135
145
  def katello_cert_rpm_installed?
136
- # FIXME: use shell_out
137
- cmd = Mixlib::ShellOut.new("rpm -qa | grep katello-ca-consumer")
138
- cmd.run_command
139
- !cmd.stdout.match(/katello-ca-consumer/).nil?
146
+ shell_out("rpm -qa").stdout.include?("katello-ca-consumer")
140
147
  end
141
148
 
149
+ #
150
+ # @return [String] The URI to fetch katello-ca-consumer-latest.noarch.rpm from
151
+ #
142
152
  def ca_consumer_package_source
143
153
  protocol = new_resource.https_for_ca_consumer ? "https" : "http"
144
154
  "#{protocol}://#{new_resource.satellite_host}/pub/katello-ca-consumer-latest.noarch.rpm"
@@ -153,6 +163,7 @@ class Chef
153
163
 
154
164
  command << new_resource.activation_key.map { |key| "--activationkey=#{Shellwords.shellescape(key)}" }
155
165
  command << "--org=#{Shellwords.shellescape(new_resource.organization)}"
166
+ command << "--name=#{Shellwords.shellescape(new_resource.system_name)}" if new_resource.system_name
156
167
  command << "--force" if new_resource.force
157
168
 
158
169
  return command.join(" ")
@@ -165,6 +176,7 @@ class Chef
165
176
  command << "--username=#{Shellwords.shellescape(new_resource.username)}"
166
177
  command << "--password=#{Shellwords.shellescape(new_resource.password)}"
167
178
  command << "--environment=#{Shellwords.shellescape(new_resource.environment)}" if using_satellite_host?
179
+ command << "--name=#{Shellwords.shellescape(new_resource.system_name)}" if new_resource.system_name
168
180
  command << "--auto-attach" if new_resource.auto_attach
169
181
  command << "--force" if new_resource.force
170
182
 
@@ -19,7 +19,7 @@
19
19
 
20
20
  require_relative "../resource"
21
21
  require_relative "../provider/ruby_block"
22
- require_relative "../dist"
22
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
23
23
 
24
24
  class Chef
25
25
  class Resource
@@ -28,7 +28,7 @@ class Chef
28
28
 
29
29
  provides :ruby_block, target_mode: true
30
30
 
31
- description "Use the **ruby_block** resource to execute Ruby code during a #{Chef::Dist::PRODUCT} run. Ruby code in the ruby_block resource is evaluated with other resources during convergence, whereas Ruby code outside of a ruby_block resource is evaluated before other resources, as the recipe is compiled."
31
+ description "Use the **ruby_block** resource to execute Ruby code during a #{ChefUtils::Dist::Infra::PRODUCT} run. Ruby code in the ruby_block resource is evaluated with other resources during convergence, whereas Ruby code outside of a ruby_block resource is evaluated before other resources, as the recipe is compiled."
32
32
 
33
33
  default_action :run
34
34
  allowed_actions :create, :run
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require_relative "../../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
 
22
22
  class Chef
23
23
  class Resource
@@ -38,7 +38,7 @@ class Chef
38
38
  default: "--no-auth-cache"
39
39
 
40
40
  property :svn_info_args, [String, nil, FalseClass],
41
- description: "Use when the `svn info` command is used by #{Chef::Dist::PRODUCT} and arguments need to be passed. The `svn_arguments` command does not work when the `svn info` command is used.",
41
+ description: "Use when the `svn info` command is used by #{ChefUtils::Dist::Infra::PRODUCT} and arguments need to be passed. The `svn_arguments` command does not work when the `svn info` command is used.",
42
42
  coerce: proc { |v| v == false ? nil : v }, # coerce false to nil
43
43
  default: "--no-auth-cache"
44
44
 
@@ -20,7 +20,7 @@
20
20
  require "chef-utils/dsl/service" unless defined?(ChefUtils::DSL::Service)
21
21
  require_relative "../resource"
22
22
  require "shellwords" unless defined?(Shellwords)
23
- require_relative "../dist"
23
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
24
24
 
25
25
  class Chef
26
26
  class Resource
@@ -39,7 +39,7 @@ class Chef
39
39
 
40
40
  # this is a poor API please do not re-use this pattern
41
41
  property :supports, Hash, default: { restart: nil, reload: nil, status: nil },
42
- description: "A list of properties that controls how #{Chef::Dist::PRODUCT} is to attempt to manage a service: :restart, :reload, :status. For :restart, the init script or other service provider can use a restart command; if :restart is not specified, the #{Chef::Dist::CLIENT} attempts to stop and then start a service. For :reload, the init script or other service provider can use a reload command. For :status, the init script or other service provider can use a status command to determine if the service is running; if :status is not specified, the #{Chef::Dist::CLIENT} attempts to match the service_name against the process table as a regular expression, unless a pattern is specified as a parameter property. Default value: { restart: false, reload: false, status: false } for all platforms (except for the Red Hat platform family, which defaults to { restart: false, reload: false, status: true }.)",
42
+ description: "A list of properties that controls how #{ChefUtils::Dist::Infra::PRODUCT} is to attempt to manage a service: :restart, :reload, :status. For :restart, the init script or other service provider can use a restart command; if :restart is not specified, the #{ChefUtils::Dist::Infra::CLIENT} attempts to stop and then start a service. For :reload, the init script or other service provider can use a reload command. For :status, the init script or other service provider can use a status command to determine if the service is running; if :status is not specified, the #{ChefUtils::Dist::Infra::CLIENT} attempts to match the service_name against the process table as a regular expression, unless a pattern is specified as a parameter property. Default value: { restart: false, reload: false, status: false } for all platforms (except for the Red Hat platform family, which defaults to { restart: false, reload: false, status: true }.)",
43
43
  coerce: proc { |x| x.is_a?(Array) ? x.each_with_object({}) { |i, m| m[i] = true } : x }
44
44
 
45
45
  property :service_name, String,
@@ -82,7 +82,7 @@ class Chef
82
82
  # specify overrides for the start_command, stop_command and
83
83
  # restart_command properties.
84
84
  property :init_command, String,
85
- description: "The path to the init script that is associated with the service. Use init_command to prevent the need to specify overrides for the start_command, stop_command, and restart_command properties. When this property is not specified, the #{Chef::Dist::PRODUCT} will use the default init command for the service provider being used.",
85
+ description: "The path to the init script that is associated with the service. Use init_command to prevent the need to specify overrides for the start_command, stop_command, and restart_command properties. When this property is not specified, the #{ChefUtils::Dist::Infra::PRODUCT} will use the default init command for the service provider being used.",
86
86
  desired_state: false
87
87
 
88
88
  # if the service is enabled or not
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
 
20
20
  require_relative "../resource"
21
- require_relative "../dist"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
22
22
 
23
23
  class Chef
24
24
  class Resource
@@ -130,7 +130,7 @@ class Chef
130
130
 
131
131
  # all this does is send an immediate run_action(:create) to the template resource
132
132
  action :flush do
133
- description "Immediately flush the entries to the config file. Without this the actual writing of the file is delayed in the #{Chef::Dist::PRODUCT} run so all entries can be accumulated before writing the file out."
133
+ description "Immediately flush the entries to the config file. Without this the actual writing of the file is delayed in the #{ChefUtils::Dist::Infra::PRODUCT} run so all entries can be accumulated before writing the file out."
134
134
 
135
135
  with_run_context :root do
136
136
  # if you haven't ever called ssh_known_hosts_entry before you're definitely doing it wrong so we blow up hard.
@@ -255,7 +255,7 @@ class Chef
255
255
  end
256
256
 
257
257
  def visudo_content(path)
258
- if ::File.exists?(path)
258
+ if ::File.exist?(path)
259
259
  "cat #{new_resource.config_prefix}/sudoers | #{new_resource.visudo_binary} -cf - && #{new_resource.visudo_binary} -cf %{path}"
260
260
  else
261
261
  "cat #{new_resource.config_prefix}/sudoers %{path} | #{new_resource.visudo_binary} -cf -"
@@ -1,4 +1,4 @@
1
- # Generated by <%= Chef::Dist::PRODUCT %>. Changes will be overwritten.
1
+ # Generated by <%= ChefUtils::Dist::Infra::PRODUCT %>. Changes will be overwritten.
2
2
  <% if @mailto -%>
3
3
  MAILTO=<%= @mailto %>
4
4
  <% end -%>
@@ -1,4 +1,4 @@
1
- # Generated by <%= Chef::Dist::PRODUCT %>. Changes will be overwritten.
1
+ # Generated by <%= ChefUtils::Dist::Infra::PRODUCT %>. Changes will be overwritten.
2
2
  <% @users.sort.uniq.each do |user| -%>
3
3
  <%= user %>
4
4
  <% end -%>
@@ -1,4 +1,4 @@
1
- # This file is managed by <%= Chef::Dist::PRODUCT %>. Changes will be overwritten.
1
+ # This file is managed by <%= ChefUtils::Dist::Infra::PRODUCT %>. Changes will be overwritten.
2
2
 
3
3
  <% @command_aliases.each do |a| -%>
4
4
  Cmnd_Alias <%= a[:name].upcase %> = <%= a[:command_list].join(', ') %>
@@ -1,4 +1,4 @@
1
- # Generated by <%= Chef::Dist::PRODUCT %>. Changes will be overwritten.
1
+ # Generated by <%= ChefUtils::Dist::Infra::PRODUCT %>. Changes will be overwritten.
2
2
 
3
3
  # Limits settings for <%= @ulimit_user %>
4
4
 
@@ -25,11 +25,7 @@ class Chef
25
25
  provides(:sysctl) { true }
26
26
  provides(:sysctl_param) { true }
27
27
 
28
- description "Use the **sysctl** resource to set or remove kernel parameters using the sysctl"\
29
- " command line tool and configuration files in the system's sysctl.d directory. "\
30
- "Configuration files managed by this resource are named 99-chef-KEYNAME.conf. If"\
31
- " an existing value was already set for the value it will be backed up to the node"\
32
- " and restored if the :remove action is used later."
28
+ description "Use the **sysctl** resource to set or remove kernel parameters using the `sysctl` command line tool and configuration files in the system's `sysctl.d` directory. Configuration files managed by this resource are named `99-chef-KEYNAME.conf`."
33
29
  examples <<~DOC
34
30
  **Set vm.swappiness**:
35
31
 
@@ -128,11 +124,11 @@ class Chef
128
124
  end
129
125
 
130
126
  load_current_value do
131
- begin
132
- value get_sysctl_value(key)
133
- rescue
134
- current_value_does_not_exist!
135
- end
127
+
128
+ value get_sysctl_value(key)
129
+ rescue
130
+ current_value_does_not_exist!
131
+
136
132
  end
137
133
 
138
134
  action :apply do
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "../resource"
20
- require_relative "../dist"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
21
  require "iniparse"
22
22
 
23
23
  class Chef
@@ -52,7 +52,7 @@ class Chef
52
52
  description: "The user account that the systemd unit process is run under. The path to the unit for that user would be something like '/etc/systemd/user/sshd.service'. If no user account is specified, the systemd unit will run under a 'system' account, with the path to the unit being something like '/etc/systemd/system/sshd.service'."
53
53
 
54
54
  property :content, [String, Hash],
55
- description: "A string or hash that contains a systemd [unit file](https://www.freedesktop.org/software/systemd/man/systemd.unit.html) definition that describes the properties of systemd-managed entities, such as services, sockets, devices, and so on. In #{Chef::Dist::PRODUCT} 14.4 or later, repeatable options can be implemented with an array."
55
+ description: "A string or hash that contains a systemd [unit file](https://www.freedesktop.org/software/systemd/man/systemd.unit.html) definition that describes the properties of systemd-managed entities, such as services, sockets, devices, and so on. In #{ChefUtils::Dist::Infra::PRODUCT} 14.4 or later, repeatable options can be implemented with an array."
56
56
 
57
57
  property :triggers_reload, [TrueClass, FalseClass],
58
58
  description: "Specifies whether to trigger a daemon reload when creating or deleting a unit.",
@@ -20,7 +20,7 @@
20
20
 
21
21
  require_relative "file"
22
22
  require_relative "../mixin/securable"
23
- require_relative "../dist"
23
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
24
24
 
25
25
  class Chef
26
26
  class Resource
@@ -69,7 +69,7 @@ class Chef
69
69
 
70
70
  property :local, [ TrueClass, FalseClass ],
71
71
  default: false, desired_state: false,
72
- description: "Load a template from a local path. By default, the #{Chef::Dist::CLIENT} loads templates from a cookbook's /templates directory. When this property is set to true, use the source property to specify the path to a template on the local node."
72
+ description: "Load a template from a local path. By default, the #{ChefUtils::Dist::Infra::CLIENT} loads templates from a cookbook's /templates directory. When this property is set to true, use the source property to specify the path to a template on the local node."
73
73
 
74
74
  # Declares a helper method to be defined in the template context when
75
75
  # rendering.
@@ -26,7 +26,7 @@ class Chef
26
26
 
27
27
  provides :timezone
28
28
 
29
- description "Use the **timezone** resource to change the system timezone on Windows, Linux, and macOS hosts. Timezones are specified in tz database format, with a complete list of available TZ values for Linux and macOS here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones and for Windows here: https://ss64.com/nt/timezones.html."
29
+ description "Use the **timezone** resource to change the system timezone on Windows, Linux, and macOS hosts. Timezones are specified in tz database format, with a complete list of available TZ values for Linux and macOS here: <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>. On Windows systems run `tzutil /l` for a complete list of valid timezones."
30
30
  introduced "14.6"
31
31
  examples <<~DOC
32
32
  **Set the timezone to UTC**
@@ -35,11 +35,19 @@ class Chef
35
35
  timezone 'UTC'
36
36
  ```
37
37
 
38
- **Set the timezone to UTC with a friendly resource name**
38
+ **Set the timezone to America/Los_Angeles with a friendly resource name on Linux/macOS**
39
39
 
40
40
  ```ruby
41
- timezone 'Set the host's timezone to UTC' do
42
- timezone 'UTC'
41
+ timezone 'Set the host's timezone to America/Los_Angeles' do
42
+ timezone 'America/Los_Angeles'
43
+ end
44
+ ```
45
+
46
+ **Set the timezone to PST with a friendly resource name on Windows**
47
+
48
+ ```ruby
49
+ timezone 'Set the host's timezone to PST' do
50
+ timezone 'Pacific Standard time'
43
51
  end
44
52
  ```
45
53
  DOC
@@ -48,90 +56,121 @@ class Chef
48
56
  description: "An optional property to set the timezone value if it differs from the resource block's name.",
49
57
  name_property: true
50
58
 
51
- action :set do
52
- description "Set the timezone."
53
-
54
- # some linux systems may be missing the timezone data
55
- if linux?
56
- package "tzdata" do
57
- package_name suse? ? "timezone" : "tzdata"
58
- end
59
+ # detect the current TZ on darwin hosts
60
+ #
61
+ # @since 14.7
62
+ # @return [String] TZ database value
63
+ def current_macos_tz
64
+ tz_shellout = shell_out!(["systemsetup", "-gettimezone"])
65
+ if /You need administrator access/.match?(tz_shellout.stdout)
66
+ raise "The timezone resource requires administrative privileges to run on macOS hosts!"
67
+ else
68
+ /Time Zone: (.*)/.match(tz_shellout.stdout)[1]
59
69
  end
70
+ end
60
71
 
61
- # Modern SUSE, Amazon, Fedora, RHEL, Ubuntu & Debian
62
- if systemd?
63
- cmd_set_tz = "/usr/bin/timedatectl --no-ask-password set-timezone #{new_resource.timezone}"
72
+ # detect the current timezone on windows hosts
73
+ #
74
+ # @since 14.7
75
+ # @return [String] timezone id
76
+ def current_windows_tz
77
+ tz_shellout = shell_out("tzutil /g")
78
+ raise "There was an error running the tzutil command" if tz_shellout.error?
64
79
 
65
- cmd_check_if_set = "/usr/bin/timedatectl status"
66
- cmd_check_if_set += " | /usr/bin/awk '/Time.*zone/{print}'"
67
- cmd_check_if_set += " | grep -q #{new_resource.timezone}"
80
+ tz_shellout.stdout.strip
81
+ end
68
82
 
69
- execute cmd_set_tz do
70
- action :run
71
- not_if cmd_check_if_set
72
- end
83
+ # detect the current timezone on systemd hosts
84
+ #
85
+ # @since 16.5
86
+ # @return [String] timezone id
87
+ def current_systemd_tz
88
+ tz_shellout = shell_out(["/usr/bin/timedatectl", "status"])
89
+ raise "There was an error running the timedatectl command" if tz_shellout.error?
90
+
91
+ # https://rubular.com/r/eV68MX9XXbyG4k
92
+ /Time zone: (.*) \(.*/.match(tz_shellout.stdout)[1]
93
+ end
94
+
95
+ # detect the current timezone on non-systemd RHEL-ish hosts
96
+ #
97
+ # @since 16.5
98
+ # @return [String] timezone id
99
+ def current_rhel_tz
100
+ return nil unless ::File.exist?("/etc/sysconfig/clock")
101
+
102
+ # https://rubular.com/r/aoj01L3bKBM7wh
103
+ /ZONE="(.*)"/.match(::File.read("/etc/sysconfig/clock"))[1]
104
+ end
105
+
106
+ load_current_value do
107
+ if systemd?
108
+ timezone current_systemd_tz
73
109
  else
74
110
  case node["platform_family"]
75
111
  # Old version of RHEL < 7 and Amazon 201X
76
112
  when "rhel", "amazon"
77
- file "/etc/sysconfig/clock" do
78
- owner "root"
79
- group "root"
80
- mode "0644"
81
- action :create
82
- content %{ZONE="#{new_resource.timezone}"\nUTC="true"\n}
83
- end
84
-
85
- execute "tzdata-update" do
86
- command "/usr/sbin/tzdata-update"
87
- action :nothing
88
- only_if { ::File.executable?("/usr/sbin/tzdata-update") }
89
- subscribes :run, "file[/etc/sysconfig/clock]", :immediately
90
- end
91
-
92
- link "/etc/localtime" do
93
- to "/usr/share/zoneinfo/#{new_resource.timezone}"
94
- not_if { ::File.executable?("/usr/sbin/tzdata-update") }
95
- end
113
+ timezone current_rhel_tz
96
114
  when "mac_os_x"
97
- unless current_darwin_tz == new_resource.timezone
98
- converge_by("set timezone to #{new_resource.timezone}") do
99
- shell_out!("sudo systemsetup -settimezone #{new_resource.timezone}")
100
- end
101
- end
115
+ timezone current_macos_tz
102
116
  when "windows"
103
- unless current_windows_tz.casecmp?(new_resource.timezone)
104
- converge_by("setting timezone to \"#{new_resource.timezone}\"") do
105
- shell_out!("tzutil /s \"#{new_resource.timezone}\"")
106
- end
107
- end
117
+ timezone current_windows_tz
108
118
  end
109
119
  end
110
120
  end
111
121
 
112
- action_class do
113
- # detect the current TZ on darwin hosts
114
- #
115
- # @since 14.7
116
- # @return [String] TZ database value
117
- def current_darwin_tz
118
- tz_shellout = shell_out!("systemsetup -gettimezone")
119
- if /You need administrator access/.match?(tz_shellout.stdout)
120
- raise "The timezone resource requires administrative privileges to run on macOS hosts!"
121
- else
122
- /Time Zone: (.*)/.match(tz_shellout.stdout)[1]
123
- end
124
- end
125
-
126
- # detect the current timezone on windows hosts
127
- #
128
- # @since 14.7
129
- # @return [String] timezone id
130
- def current_windows_tz
131
- tz_shellout = shell_out("tzutil /g")
132
- raise "There was an error running the tzutil command" if tz_shellout.exitstatus == 1
122
+ action :set do
123
+ description "Set the timezone."
133
124
 
134
- tz_shellout.stdout.strip
125
+ # we have to check windows first since the value isn't case sensitive here
126
+ if windows?
127
+ unless current_windows_tz.casecmp?(new_resource.timezone)
128
+ converge_by("setting timezone to '#{new_resource.timezone}'") do
129
+ shell_out!(["tzutil", "/s", new_resource.timezone])
130
+ end
131
+ end
132
+ else # linux / macos
133
+ converge_if_changed(:timezone) do
134
+ # Modern SUSE, Amazon, Fedora, RHEL, Ubuntu & Debian
135
+ if systemd?
136
+ # make sure we have the tzdata files
137
+ package suse? ? "timezone" : "tzdata"
138
+
139
+ shell_out!(["/usr/bin/timedatectl", "--no-ask-password", "set-timezone", new_resource.timezone])
140
+ else
141
+ case node["platform_family"]
142
+ # Old version of RHEL < 7 and Amazon 201X
143
+ when "rhel", "amazon"
144
+ # make sure we have the tzdata files
145
+ package "tzdata"
146
+
147
+ file "/etc/sysconfig/clock" do
148
+ owner "root"
149
+ group "root"
150
+ mode "0644"
151
+ action :create
152
+ content <<~CONTENT
153
+ ZONE="#{new_resource.timezone}"
154
+ UTC="true"
155
+ CONTENT
156
+ end
157
+
158
+ execute "tzdata-update" do
159
+ command "/usr/sbin/tzdata-update"
160
+ action :nothing
161
+ only_if { ::File.executable?("/usr/sbin/tzdata-update") }
162
+ subscribes :run, "file[/etc/sysconfig/clock]", :immediately
163
+ end
164
+
165
+ link "/etc/localtime" do
166
+ to "/usr/share/zoneinfo/#{new_resource.timezone}"
167
+ not_if { ::File.executable?("/usr/sbin/tzdata-update") }
168
+ end
169
+ when "mac_os_x"
170
+ shell_out!(["sudo", "systemsetup", "-settimezone", new_resource.timezone])
171
+ end
172
+ end
173
+ end
135
174
  end
136
175
  end
137
176
  end