chef 16.4.41 → 16.5.64

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) 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.gemspec +2 -1
  6. data/lib/chef/application.rb +18 -16
  7. data/lib/chef/application/apply.rb +12 -7
  8. data/lib/chef/application/base.rb +26 -23
  9. data/lib/chef/application/client.rb +10 -4
  10. data/lib/chef/application/exit_code.rb +13 -4
  11. data/lib/chef/application/knife.rb +22 -11
  12. data/lib/chef/application/solo.rb +2 -1
  13. data/lib/chef/application/windows_service.rb +14 -14
  14. data/lib/chef/application/windows_service_manager.rb +6 -6
  15. data/lib/chef/chef_fs/knife.rb +2 -2
  16. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  17. data/lib/chef/client.rb +10 -11
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  19. data/lib/chef/cookbook/synchronizer.rb +2 -2
  20. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  21. data/lib/chef/cookbook_uploader.rb +1 -1
  22. data/lib/chef/data_collector.rb +6 -5
  23. data/lib/chef/data_collector/config_validation.rb +22 -13
  24. data/lib/chef/data_collector/run_end_message.rb +2 -2
  25. data/lib/chef/data_collector/run_start_message.rb +1 -1
  26. data/lib/chef/deprecated.rb +1 -1
  27. data/lib/chef/deprecation/warnings.rb +2 -2
  28. data/lib/chef/digester.rb +2 -2
  29. data/lib/chef/dsl/chef_vault.rb +1 -1
  30. data/lib/chef/dsl/data_query.rb +2 -2
  31. data/lib/chef/dsl/platform_introspection.rb +1 -1
  32. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  33. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  34. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  35. data/lib/chef/environment.rb +2 -2
  36. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  37. data/lib/chef/exceptions.rb +4 -4
  38. data/lib/chef/file_access_control/windows.rb +5 -1
  39. data/lib/chef/formatters/doc.rb +7 -6
  40. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  41. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  42. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  43. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  44. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  45. data/lib/chef/formatters/minimal.rb +5 -4
  46. data/lib/chef/http.rb +6 -4
  47. data/lib/chef/http/auth_credentials.rb +5 -1
  48. data/lib/chef/http/authenticator.rb +1 -1
  49. data/lib/chef/http/basic_client.rb +4 -2
  50. data/lib/chef/http/decompressor.rb +1 -1
  51. data/lib/chef/http/http_request.rb +7 -5
  52. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  53. data/lib/chef/http/ssl_policies.rb +1 -1
  54. data/lib/chef/json_compat.rb +1 -1
  55. data/lib/chef/knife.rb +4 -4
  56. data/lib/chef/knife/bootstrap.rb +16 -14
  57. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  58. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  59. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  60. data/lib/chef/knife/client_create.rb +3 -3
  61. data/lib/chef/knife/config_get.rb +8 -97
  62. data/lib/chef/knife/config_get_profile.rb +9 -9
  63. data/lib/chef/knife/config_list.rb +139 -0
  64. data/lib/chef/knife/config_list_profiles.rb +8 -98
  65. data/lib/chef/knife/config_show.rb +127 -0
  66. data/lib/chef/knife/config_use.rb +61 -0
  67. data/lib/chef/knife/config_use_profile.rb +9 -24
  68. data/lib/chef/knife/configure.rb +2 -2
  69. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  70. data/lib/chef/knife/core/object_loader.rb +1 -1
  71. data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
  72. data/lib/chef/knife/exec.rb +2 -2
  73. data/lib/chef/knife/node_show.rb +2 -2
  74. data/lib/chef/knife/serve.rb +3 -3
  75. data/lib/chef/knife/ssh.rb +16 -1
  76. data/lib/chef/knife/ssl_check.rb +3 -3
  77. data/lib/chef/knife/status.rb +2 -2
  78. data/lib/chef/knife/user_create.rb +2 -2
  79. data/lib/chef/knife/yaml_convert.rb +1 -1
  80. data/lib/chef/local_mode.rb +2 -2
  81. data/lib/chef/log/syslog.rb +2 -2
  82. data/lib/chef/log/winevt.rb +2 -2
  83. data/lib/chef/mixin/deep_merge.rb +0 -12
  84. data/lib/chef/mixin/openssl_helper.rb +1 -4
  85. data/lib/chef/mixin/template.rb +2 -2
  86. data/lib/chef/mixin/uris.rb +2 -2
  87. data/lib/chef/mixin/versioned_api.rb +1 -2
  88. data/lib/chef/monkey_patches/net_http.rb +4 -4
  89. data/lib/chef/node_map.rb +2 -2
  90. data/lib/chef/policy_builder/policyfile.rb +2 -2
  91. data/lib/chef/provider.rb +0 -4
  92. data/lib/chef/provider/file.rb +2 -2
  93. data/lib/chef/provider/ifconfig.rb +1 -1
  94. data/lib/chef/provider/launchd.rb +2 -2
  95. data/lib/chef/provider/mount/linux.rb +63 -0
  96. data/lib/chef/provider/package/rubygems.rb +21 -18
  97. data/lib/chef/provider/package/snap.rb +0 -1
  98. data/lib/chef/provider/package/windows.rb +2 -2
  99. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  100. data/lib/chef/provider/package/zypper.rb +1 -1
  101. data/lib/chef/provider/remote_file/content.rb +3 -0
  102. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  103. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  104. data/lib/chef/provider/route.rb +2 -6
  105. data/lib/chef/provider/service/macosx.rb +2 -2
  106. data/lib/chef/provider/template_finder.rb +2 -10
  107. data/lib/chef/provider/user/dscl.rb +3 -3
  108. data/lib/chef/provider/user/mac.rb +1 -1
  109. data/lib/chef/provider/windows_task.rb +1 -2
  110. data/lib/chef/provider/zypper_repository.rb +2 -2
  111. data/lib/chef/provider_resolver.rb +1 -1
  112. data/lib/chef/providers.rb +1 -0
  113. data/lib/chef/recipe.rb +2 -2
  114. data/lib/chef/resource.rb +1 -1
  115. data/lib/chef/resource/apt_repository.rb +1 -1
  116. data/lib/chef/resource/bff_package.rb +22 -0
  117. data/lib/chef/resource/breakpoint.rb +57 -2
  118. data/lib/chef/resource/build_essential.rb +1 -1
  119. data/lib/chef/resource/cab_package.rb +29 -0
  120. data/lib/chef/resource/chef_client_cron.rb +32 -25
  121. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  122. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  123. data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
  124. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  125. data/lib/chef/resource/chef_gem.rb +10 -10
  126. data/lib/chef/resource/chef_handler.rb +148 -4
  127. data/lib/chef/resource/chef_sleep.rb +2 -2
  128. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  129. data/lib/chef/resource/cookbook_file.rb +2 -2
  130. data/lib/chef/resource/cron/cron_d.rb +0 -1
  131. data/lib/chef/resource/dnf_package.rb +2 -2
  132. data/lib/chef/resource/dsc_resource.rb +0 -1
  133. data/lib/chef/resource/dsc_script.rb +2 -2
  134. data/lib/chef/resource/execute.rb +6 -6
  135. data/lib/chef/resource/file.rb +4 -4
  136. data/lib/chef/resource/gem_package.rb +5 -5
  137. data/lib/chef/resource/homebrew_package.rb +3 -3
  138. data/lib/chef/resource/homebrew_update.rb +5 -5
  139. data/lib/chef/resource/hostname.rb +2 -2
  140. data/lib/chef/resource/launchd.rb +2 -1
  141. data/lib/chef/resource/locale.rb +2 -2
  142. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  143. data/lib/chef/resource/notify_group.rb +0 -1
  144. data/lib/chef/resource/ohai.rb +46 -3
  145. data/lib/chef/resource/ohai_hint.rb +33 -0
  146. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  147. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  148. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  149. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  150. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  151. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  152. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  153. data/lib/chef/resource/osx_profile.rb +77 -13
  154. data/lib/chef/resource/plist.rb +1 -1
  155. data/lib/chef/resource/powershell_package_source.rb +5 -5
  156. data/lib/chef/resource/reboot.rb +2 -2
  157. data/lib/chef/resource/remote_file.rb +3 -3
  158. data/lib/chef/resource/rhsm_register.rb +22 -10
  159. data/lib/chef/resource/ruby_block.rb +2 -2
  160. data/lib/chef/resource/scm/subversion.rb +2 -2
  161. data/lib/chef/resource/service.rb +3 -3
  162. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  163. data/lib/chef/resource/support/cron.d.erb +1 -1
  164. data/lib/chef/resource/support/cron_access.erb +1 -1
  165. data/lib/chef/resource/support/sudoer.erb +1 -1
  166. data/lib/chef/resource/support/ulimit.erb +1 -1
  167. data/lib/chef/resource/sysctl.rb +1 -5
  168. data/lib/chef/resource/systemd_unit.rb +2 -2
  169. data/lib/chef/resource/template.rb +2 -2
  170. data/lib/chef/resource/windows_ad_join.rb +10 -3
  171. data/lib/chef/resource/windows_certificate.rb +6 -4
  172. data/lib/chef/resource/windows_firewall_profile.rb +22 -20
  173. data/lib/chef/resource/windows_package.rb +28 -5
  174. data/lib/chef/resource/windows_printer.rb +5 -3
  175. data/lib/chef/resource/windows_printer_port.rb +6 -4
  176. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  177. data/lib/chef/resource/windows_workgroup.rb +3 -3
  178. data/lib/chef/resource/yum_package.rb +2 -2
  179. data/lib/chef/resources.rb +3 -1
  180. data/lib/chef/run_context.rb +2 -2
  181. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  182. data/lib/chef/run_lock.rb +2 -2
  183. data/lib/chef/search/query.rb +4 -5
  184. data/lib/chef/shell.rb +31 -26
  185. data/lib/chef/shell/ext.rb +11 -11
  186. data/lib/chef/shell/shell_session.rb +2 -2
  187. data/lib/chef/train_transport.rb +5 -104
  188. data/lib/chef/util/diff.rb +3 -3
  189. data/lib/chef/util/powershell/cmdlet.rb +3 -1
  190. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  191. data/lib/chef/util/threaded_job_queue.rb +0 -2
  192. data/lib/chef/version.rb +1 -1
  193. data/lib/chef/win32/crypto.rb +1 -1
  194. data/lib/chef/win32/registry.rb +1 -2
  195. data/spec/data/shef-config.rb +1 -1
  196. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  197. data/spec/functional/resource/aix_service_spec.rb +2 -2
  198. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  199. data/spec/functional/resource/insserv_spec.rb +1 -1
  200. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  201. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  202. data/spec/functional/resource/windows_task_spec.rb +13 -13
  203. data/spec/functional/version_spec.rb +3 -3
  204. data/spec/integration/client/client_spec.rb +4 -4
  205. data/spec/integration/client/exit_code_spec.rb +3 -2
  206. data/spec/integration/client/ipv6_spec.rb +1 -1
  207. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  208. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  209. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  210. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  211. data/spec/integration/ohai/ohai_spec.rb +61 -0
  212. data/spec/integration/recipes/remote_directory.rb +1 -1
  213. data/spec/integration/solo/solo_spec.rb +5 -5
  214. data/spec/spec_helper.rb +6 -3
  215. data/spec/stress/win32/file_spec.rb +1 -1
  216. data/spec/support/chef_helpers.rb +2 -2
  217. data/spec/support/matchers/leak.rb +2 -2
  218. data/spec/support/platform_helpers.rb +16 -34
  219. data/spec/support/shared/functional/securable_resource.rb +108 -27
  220. data/spec/support/shared/functional/win32_service.rb +1 -1
  221. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  222. data/spec/tiny_server.rb +0 -1
  223. data/spec/unit/application/client_spec.rb +2 -2
  224. data/spec/unit/application/exit_code_spec.rb +10 -0
  225. data/spec/unit/application_spec.rb +4 -6
  226. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  227. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  228. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  229. data/spec/unit/cookbook_spec.rb +2 -2
  230. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  231. data/spec/unit/data_collector_spec.rb +0 -113
  232. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  233. data/spec/unit/file_access_control_spec.rb +1 -1
  234. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  235. data/spec/unit/knife/core/ui_spec.rb +1 -0
  236. data/spec/unit/knife/ssh_spec.rb +2 -2
  237. data/spec/unit/lwrp_spec.rb +3 -3
  238. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  239. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  240. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  241. data/spec/unit/mixin/securable_spec.rb +2 -2
  242. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  243. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  244. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  245. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  246. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  247. data/spec/unit/provider/route_spec.rb +0 -2
  248. data/spec/unit/recipe_spec.rb +1 -1
  249. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  250. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  251. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  252. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  253. data/spec/unit/resource/launchd_spec.rb +8 -0
  254. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  255. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  256. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  257. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  258. data/spec/unit/run_lock_spec.rb +5 -1
  259. data/spec/unit/runner_spec.rb +1 -2
  260. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  261. data/spec/unit/shell/shell_session_spec.rb +35 -64
  262. data/spec/unit/shell_spec.rb +16 -19
  263. data/spec/unit/train_transport_spec.rb +14 -13
  264. data/spec/unit/util/selinux_spec.rb +2 -0
  265. data/tasks/rspec.rb +0 -2
  266. metadata +41 -17
  267. data/lib/chef/dist.rb +0 -68
  268. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -18,7 +18,7 @@
18
18
  #
19
19
 
20
20
  require "etc" unless defined?(Etc)
21
- require "rexml/document" unless defined?(REXML::Document)
21
+ autoload :REXML, "rexml/document"
22
22
  require_relative "../../resource/service"
23
23
  require_relative "../../resource/macosx_service"
24
24
  require_relative "simple"
@@ -47,7 +47,7 @@ class Chef
47
47
  @current_resource = Chef::Resource::MacosxService.new(@new_resource.name)
48
48
  @current_resource.service_name(@new_resource.service_name)
49
49
  @plist_size = 0
50
- @plist = @new_resource.plist ? @new_resource.plist : find_service_plist
50
+ @plist = @new_resource.plist || find_service_plist
51
51
  @service_label = find_service_label
52
52
  # LaunchAgents should be loaded as the console user.
53
53
  @console_user = @plist ? @plist.include?("LaunchAgents") : false
@@ -43,19 +43,11 @@ class Chef
43
43
  protected
44
44
 
45
45
  def template_source_name(name, options)
46
- if options[:source]
47
- options[:source]
48
- else
49
- name
50
- end
46
+ options[:source] || name
51
47
  end
52
48
 
53
49
  def find_cookbook_name(options)
54
- if options[:cookbook]
55
- options[:cookbook]
56
- else
57
- @cookbook_name
58
- end
50
+ options[:cookbook] || @cookbook_name
59
51
  end
60
52
  end
61
53
  end
@@ -19,8 +19,8 @@
19
19
  require_relative "../../mixin/shell_out"
20
20
  require_relative "../user"
21
21
  require_relative "../../resource/user/dscl_user"
22
- require "openssl" unless defined?(OpenSSL)
23
- require "plist"
22
+ autoload :OpenSSL, "openssl"
23
+ autoload :Plist, "plist"
24
24
  require_relative "../../util/path_helper"
25
25
 
26
26
  class Chef
@@ -587,7 +587,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
587
587
  result = shell_out("dscl", ".", "-#{args[0]}", args[1..-1])
588
588
  return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 )
589
589
  raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0
590
- raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if /No such key: /.match?(result.stdout)
590
+ raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if result.stdout.include?("No such key: ")
591
591
 
592
592
  result.stdout
593
593
  end
@@ -22,7 +22,7 @@ require_relative "../../mixin/shell_out"
22
22
  require_relative "../../mixin/which"
23
23
  require_relative "../user"
24
24
  require_relative "../../resource/user/mac_user"
25
- require "plist"
25
+ autoload :Plist, "plist"
26
26
 
27
27
  class Chef
28
28
  class Provider
@@ -16,8 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require "rexml/document" unless defined?(REXML::Document)
20
- require "iso8601" if ChefUtils.windows?
19
+ autoload :ISO8601, "iso8601" if ChefUtils.windows?
21
20
  require_relative "../provider"
22
21
  require_relative "../util/path_helper"
23
22
  require "win32/taskscheduler" if ChefUtils.windows?
@@ -20,7 +20,7 @@ require_relative "../resource"
20
20
  require_relative "../dsl/declare_resource"
21
21
  require_relative "noop"
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 Provider
@@ -110,7 +110,7 @@ class Chef
110
110
  logger.trace("Will use :cookbook_file resource to cache the gpg key locally")
111
111
  :cookbook_file
112
112
  else
113
- raise Chef::Exceptions::FileNotFound, "Cannot determine location of gpgkey. Must start with 'http' or be a file managed by #{Chef::Dist::PRODUCT}."
113
+ raise Chef::Exceptions::FileNotFound, "Cannot determine location of gpgkey. Must start with 'http' or be a file managed by #{ChefUtils::Dist::Infra::PRODUCT}."
114
114
  end
115
115
  end
116
116
 
@@ -113,7 +113,7 @@ class Chef
113
113
 
114
114
  # if resource.provider is set, just return one of those objects
115
115
  def maybe_explicit_provider(resource)
116
- resource.provider if resource.provider
116
+ resource.provider
117
117
  end
118
118
 
119
119
  # try dynamically finding a provider based on querying the providers to see what they support
@@ -119,6 +119,7 @@ require_relative "provider/mount/mount"
119
119
  require_relative "provider/mount/aix"
120
120
  require_relative "provider/mount/solaris"
121
121
  require_relative "provider/mount/windows"
122
+ require_relative "provider/mount/linux"
122
123
 
123
124
  require_relative "provider/remote_file/ftp"
124
125
  require_relative "provider/remote_file/sftp"
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require "yaml" unless defined?(YAML)
20
+ autoload :YAML, "yaml"
21
21
  require_relative "dsl/recipe"
22
22
  require_relative "mixin/from_file"
23
23
  require_relative "mixin/deprecation"
@@ -122,7 +122,7 @@ class Chef
122
122
  end
123
123
 
124
124
  def to_s
125
- "cookbook: #{cookbook_name ? cookbook_name : "(none)"}, recipe: #{recipe_name ? recipe_name : "(none)"} "
125
+ "cookbook: #{cookbook_name || "(none)"}, recipe: #{recipe_name || "(none)"} "
126
126
  end
127
127
 
128
128
  def inspect
@@ -36,7 +36,7 @@ require_relative "resource/resource_notification"
36
36
  require_relative "provider_resolver"
37
37
  require_relative "resource_resolver"
38
38
  require_relative "provider"
39
- require "set" unless defined?(Set)
39
+ autoload :Set, "set"
40
40
 
41
41
  require_relative "mixin/deprecation"
42
42
  require_relative "mixin/properties"
@@ -19,7 +19,7 @@
19
19
  require_relative "../resource"
20
20
  require_relative "../http/simple"
21
21
  require "tmpdir" unless defined?(Dir.mktmpdir)
22
- require "addressable" unless defined?(Addressable)
22
+ autoload :Addressable, "addressable"
23
23
 
24
24
  class Chef
25
25
  class Resource
@@ -17,6 +17,7 @@
17
17
  #
18
18
 
19
19
  require_relative "package"
20
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
20
21
 
21
22
  class Chef
22
23
  class Resource
@@ -27,6 +28,27 @@ class Chef
27
28
 
28
29
  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."
29
30
  introduced "12.0"
31
+ examples <<~DOC
32
+ The **bff_package** resource is the default package provider on the AIX platform. The base **package** resource may be used, and then when the platform is AIX, #{ChefUtils::Dist::Infra::PRODUCT} will identify the correct package provider. The following examples show how to install part of the IBM XL C/C++ compiler.
33
+
34
+ **Installing using the base package resource**
35
+
36
+ ```ruby
37
+ package 'xlccmp.13.1.0' do
38
+ source '/var/tmp/IBM_XL_C_13.1.0/usr/sys/inst.images/xlccmp.13.1.0'
39
+ action :install
40
+ end
41
+ ```
42
+
43
+ **Installing using the bff_package resource**
44
+
45
+ ```ruby
46
+ bff_package 'xlccmp.13.1.0' do
47
+ source '/var/tmp/IBM_XL_C_13.1.0/usr/sys/inst.images/xlccmp.13.1.0'
48
+ action :install
49
+ end
50
+ ```
51
+ DOC
30
52
 
31
53
  property :package_name, String,
32
54
  description: "An optional property to set the package name if it differs from the resource block's name.",
@@ -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
@@ -26,8 +26,63 @@ class Chef
26
26
 
27
27
  provides :breakpoint, target_mode: true
28
28
 
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."
29
+ description "Use the **breakpoint** resource to add breakpoints to recipes. Run the #{ChefUtils::Dist::Infra::SHELL} in #{ChefUtils::Dist::Infra::PRODUCT} mode, and then use those breakpoints to debug recipes. Breakpoints are ignored by the #{ChefUtils::Dist::Infra::CLIENT} during an actual #{ChefUtils::Dist::Infra::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."
30
30
  introduced "12.0"
31
+ examples <<~DOC
32
+ **A recipe without a breakpoint**
33
+
34
+ ```ruby
35
+ yum_key node['yum']['elrepo']['key'] do
36
+ url node['yum']['elrepo']['key_url']
37
+ action :add
38
+ end
39
+
40
+ yum_repository 'elrepo' do
41
+ description 'ELRepo.org Community Enterprise Linux Extras Repository'
42
+ key node['yum']['elrepo']['key']
43
+ mirrorlist node['yum']['elrepo']['url']
44
+ includepkgs node['yum']['elrepo']['includepkgs']
45
+ exclude node['yum']['elrepo']['exclude']
46
+ action :create
47
+ end
48
+ ```
49
+
50
+ **The same recipe with breakpoints**
51
+
52
+ ```ruby
53
+ breakpoint "before yum_key node['yum']['repo_name']['key']" do
54
+ action :break
55
+ end
56
+
57
+ yum_key node['yum']['repo_name']['key'] do
58
+ url node['yum']['repo_name']['key_url']
59
+ action :add
60
+ end
61
+
62
+ breakpoint "after yum_key node['yum']['repo_name']['key']" do
63
+ action :break
64
+ end
65
+
66
+ breakpoint "before yum_repository 'repo_name'" do
67
+ action :break
68
+ end
69
+
70
+ yum_repository 'repo_name' do
71
+ description 'description'
72
+ key node['yum']['repo_name']['key']
73
+ mirrorlist node['yum']['repo_name']['url']
74
+ includepkgs node['yum']['repo_name']['includepkgs']
75
+ exclude node['yum']['repo_name']['exclude']
76
+ action :create
77
+ end
78
+
79
+ breakpoint "after yum_repository 'repo_name'" do
80
+ action :break
81
+ end
82
+ ```
83
+
84
+ where the name of each breakpoint is an arbitrary string. In the previous examples, the names are used to indicate if the breakpoint is before or after a resource, and then also to specify which resource.
85
+ DOC
31
86
 
32
87
  default_action :break
33
88
 
@@ -15,7 +15,7 @@
15
15
  #
16
16
 
17
17
  require_relative "../resource"
18
- require "plist"
18
+ autoload :Plist, "plist"
19
19
 
20
20
  class Chef
21
21
  class Resource
@@ -29,6 +29,35 @@ class Chef
29
29
 
30
30
  description "Use the **cab_package** resource to install or remove Microsoft Windows cabinet (.cab) packages."
31
31
  introduced "12.15"
32
+ examples <<~'DOC'
33
+ **Using local path in source**
34
+
35
+ ```ruby
36
+ cab_package 'Install .NET 3.5 sp1 via KB958488' do
37
+ source 'C:\Users\xyz\AppData\Local\Temp\Windows6.1-KB958488-x64.cab'
38
+ action :install
39
+ end
40
+
41
+ cab_package 'Remove .NET 3.5 sp1 via KB958488' do
42
+ source 'C:\Users\xyz\AppData\Local\Temp\Windows6.1-KB958488-x64.cab'
43
+ action :remove
44
+ end
45
+ ```
46
+
47
+ **Using URL in source**
48
+
49
+ ```ruby
50
+ cab_package 'Install .NET 3.5 sp1 via KB958488' do
51
+ source 'https://s3.amazonaws.com/my_bucket/Windows6.1-KB958488-x64.cab'
52
+ action :install
53
+ end
54
+
55
+ cab_package 'Remove .NET 3.5 sp1 via KB958488' do
56
+ source 'https://s3.amazonaws.com/my_bucket/Temp\Windows6.1-KB958488-x64.cab'
57
+ action :remove
58
+ end
59
+ ```
60
+ DOC
32
61
 
33
62
  allowed_actions :install, :remove
34
63
 
@@ -15,9 +15,9 @@
15
15
  #
16
16
 
17
17
  require_relative "../resource"
18
- require_relative "../dist"
18
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
19
19
  require_relative "helpers/cron_validations"
20
- require "digest/md5"
20
+ require "digest/md5" unless defined?(Digest::MD5)
21
21
 
22
22
  class Chef
23
23
  class Resource
@@ -26,25 +26,25 @@ class Chef
26
26
 
27
27
  provides :chef_client_cron
28
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."
29
+ description "Use the **chef_client_cron** resource to setup the #{ChefUtils::Dist::Infra::PRODUCT} to run as a cron job. This resource will also create the specified log directory if it doesn't already exist."
30
30
  introduced "16.0"
31
31
  examples <<~DOC
32
- **Setup #{Chef::Dist::PRODUCT} to run using the default 30 minute cadence**:
32
+ **Setup #{ChefUtils::Dist::Infra::PRODUCT} to run using the default 30 minute cadence**:
33
33
 
34
34
  ```ruby
35
- chef_client_cron "Run #{Chef::Dist::PRODUCT} as a cron job"
35
+ chef_client_cron "Run #{ChefUtils::Dist::Infra::PRODUCT} as a cron job"
36
36
  ```
37
37
 
38
- **Run #{Chef::Dist::PRODUCT} twice a day**:
38
+ **Run #{ChefUtils::Dist::Infra::PRODUCT} twice a day**:
39
39
 
40
40
  ```ruby
41
- chef_client_cron "Run #{Chef::Dist::PRODUCT} every 12 hours" do
41
+ chef_client_cron "Run #{ChefUtils::Dist::Infra::PRODUCT} every 12 hours" do
42
42
  minute 0
43
43
  hour "0,12"
44
44
  end
45
45
  ```
46
46
 
47
- **Run #{Chef::Dist::PRODUCT} with extra options passed to the client**:
47
+ **Run #{ChefUtils::Dist::Infra::PRODUCT} with extra options passed to the client**:
48
48
 
49
49
  ```ruby
50
50
  chef_client_cron "Run an override recipe" do
@@ -56,42 +56,42 @@ class Chef
56
56
  extend Chef::ResourceHelpers::CronValidations
57
57
 
58
58
  property :job_name, String,
59
- default: Chef::Dist::CLIENT,
59
+ default: ChefUtils::Dist::Infra::CLIENT,
60
60
  description: "The name of the cron job to create."
61
61
 
62
62
  property :comment, String,
63
63
  description: "A comment to place in the cron.d file."
64
64
 
65
65
  property :user, String,
66
- description: "The name of the user that #{Chef::Dist::PRODUCT} runs as.",
66
+ description: "The name of the user that #{ChefUtils::Dist::Infra::PRODUCT} runs as.",
67
67
  default: "root"
68
68
 
69
69
  property :minute, [Integer, String],
70
- description: "The minute at which #{Chef::Dist::PRODUCT} is to run (0 - 59) or a cron pattern such as '0,30'.",
70
+ description: "The minute at which #{ChefUtils::Dist::Infra::PRODUCT} is to run (0 - 59) or a cron pattern such as '0,30'.",
71
71
  default: "0,30", callbacks: {
72
72
  "should be a valid minute spec" => method(:validate_minute),
73
73
  }
74
74
 
75
75
  property :hour, [Integer, String],
76
- description: "The hour at which #{Chef::Dist::PRODUCT} is to run (0 - 23) or a cron pattern such as '0,12'.",
76
+ description: "The hour at which #{ChefUtils::Dist::Infra::PRODUCT} is to run (0 - 23) or a cron pattern such as '0,12'.",
77
77
  default: "*", callbacks: {
78
78
  "should be a valid hour spec" => method(:validate_hour),
79
79
  }
80
80
 
81
81
  property :day, [Integer, String],
82
- description: "The day of month at which #{Chef::Dist::PRODUCT} is to run (1 - 31) or a cron pattern such as '1,7,14,21,28'.",
82
+ description: "The day of month at which #{ChefUtils::Dist::Infra::PRODUCT} is to run (1 - 31) or a cron pattern such as '1,7,14,21,28'.",
83
83
  default: "*", callbacks: {
84
84
  "should be a valid day spec" => method(:validate_day),
85
85
  }
86
86
 
87
87
  property :month, [Integer, String],
88
- description: "The month in the year on which #{Chef::Dist::PRODUCT} is to run (1 - 12, jan-dec, or *).",
88
+ description: "The month in the year on which #{ChefUtils::Dist::Infra::PRODUCT} is to run (1 - 12, jan-dec, or *).",
89
89
  default: "*", callbacks: {
90
90
  "should be a valid month spec" => method(:validate_month),
91
91
  }
92
92
 
93
93
  property :weekday, [Integer, String],
94
- description: "The day of the week on which #{Chef::Dist::PRODUCT} is to run (0-7, mon-sun, or *), where Sunday is both 0 and 7.",
94
+ description: "The day of the week on which #{ChefUtils::Dist::Infra::PRODUCT} is to run (0-7, mon-sun, or *), where Sunday is both 0 and 7.",
95
95
  default: "*", callbacks: {
96
96
  "should be a valid weekday spec" => method(:validate_dow),
97
97
  }
@@ -100,7 +100,7 @@ class Chef
100
100
  default: 300,
101
101
  coerce: proc { |x| Integer(x) },
102
102
  callbacks: { "should be a positive number" => proc { |v| v > 0 } },
103
- description: "A random number of seconds between 0 and X to add to interval so that all #{Chef::Dist::CLIENT} commands don't execute at the same time."
103
+ description: "A random number of seconds between 0 and X to add to interval so that all #{ChefUtils::Dist::Infra::CLIENT} commands don't execute at the same time."
104
104
 
105
105
  property :mailto, String,
106
106
  description: "The e-mail address to e-mail any cron task failures to."
@@ -110,12 +110,12 @@ class Chef
110
110
  default: false
111
111
 
112
112
  property :config_directory, String,
113
- default: Chef::Dist::CONF_DIR,
113
+ default: ChefConfig::Config.etc_chef_dir,
114
114
  description: "The path of the config directory."
115
115
 
116
116
  property :log_directory, String,
117
- default: lazy { platform?("mac_os_x") ? "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize}" : "/var/log/#{Chef::Dist::DIR_SUFFIX}" },
118
- default_description: "/Library/Logs/#{Chef::Dist::DIR_SUFFIX.capitalize} on macOS and /var/log/#{Chef::Dist::DIR_SUFFIX} otherwise",
117
+ default: lazy { platform?("mac_os_x") ? "/Library/Logs/#{ChefUtils::Dist::Infra::DIR_SUFFIX.capitalize}" : "/var/log/#{ChefUtils::Dist::Infra::DIR_SUFFIX}" },
118
+ default_description: "/Library/Logs/#{ChefUtils::Dist::Infra::DIR_SUFFIX.capitalize} on macOS and /var/log/#{ChefUtils::Dist::Infra::DIR_SUFFIX} otherwise",
119
119
  description: "The path of the directory to create the log file in."
120
120
 
121
121
  property :log_file_name, String,
@@ -127,17 +127,23 @@ class Chef
127
127
  description: "Append to the log file instead of overwriting the log file on each run."
128
128
 
129
129
  property :chef_binary_path, String,
130
- default: "/opt/#{Chef::Dist::DIR_SUFFIX}/bin/#{Chef::Dist::CLIENT}",
131
- description: "The path to the #{Chef::Dist::CLIENT} binary."
130
+ default: "/opt/#{ChefUtils::Dist::Infra::DIR_SUFFIX}/bin/#{ChefUtils::Dist::Infra::CLIENT}",
131
+ description: "The path to the #{ChefUtils::Dist::Infra::CLIENT} binary."
132
132
 
133
133
  property :daemon_options, Array,
134
134
  default: lazy { [] },
135
- description: "An array of options to pass to the #{Chef::Dist::CLIENT} command."
135
+ description: "An array of options to pass to the #{ChefUtils::Dist::Infra::CLIENT} command."
136
136
 
137
137
  property :environment, Hash,
138
138
  default: lazy { {} },
139
139
  description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of `({'ENV_VARIABLE' => 'VALUE'})`."
140
140
 
141
+ property :nice, [Integer, String],
142
+ description: "The process priority to run the #{ChefUtils::Dist::Infra::CLIENT} process at. A value of -20 is the highest priority and 19 is the lowest priority.",
143
+ introduced: "16.5",
144
+ coerce: proc { |x| Integer(x) },
145
+ callbacks: { "should be an Integer between -20 and 19" => proc { |v| v >= -20 && v <= 19 } }
146
+
141
147
  action :add do
142
148
  # TODO: Replace this with a :create_if_missing action on directory when that exists
143
149
  unless ::Dir.exist?(new_resource.log_directory)
@@ -158,7 +164,7 @@ class Chef
158
164
  mailto new_resource.mailto if new_resource.mailto
159
165
  user new_resource.user
160
166
  comment new_resource.comment if new_resource.comment
161
- command cron_command
167
+ command client_command
162
168
  end
163
169
  end
164
170
 
@@ -187,15 +193,16 @@ class Chef
187
193
  #
188
194
  # @return [String]
189
195
  #
190
- def cron_command
196
+ def client_command
191
197
  cmd = ""
192
198
  cmd << "/bin/sleep #{splay_sleep_time(new_resource.splay)}; "
199
+ cmd << "#{which("nice")} -n #{new_resource.nice} " if new_resource.nice
193
200
  cmd << "#{new_resource.chef_binary_path} "
194
201
  cmd << "#{new_resource.daemon_options.join(" ")} " unless new_resource.daemon_options.empty?
195
202
  cmd << "-c #{::File.join(new_resource.config_directory, "client.rb")} "
196
203
  cmd << "--chef-license accept " if new_resource.accept_chef_license
197
204
  cmd << log_command
198
- cmd << " || echo \"#{Chef::Dist::PRODUCT} execution failed\"" if new_resource.mailto
205
+ cmd << " || echo \"#{ChefUtils::Dist::Infra::PRODUCT} execution failed\"" if new_resource.mailto
199
206
  cmd
200
207
  end
201
208