chef 18.4.2 → 18.5.0

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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -1
  3. data/chef.gemspec +7 -7
  4. data/lib/chef/application/client.rb +12 -0
  5. data/lib/chef/client.rb +10 -16
  6. data/lib/chef/compliance/runner.rb +10 -0
  7. data/lib/chef/cookbook/chefignore.rb +4 -1
  8. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  9. data/lib/chef/cookbook/synchronizer.rb +7 -1
  10. data/lib/chef/cookbook_manifest.rb +2 -2
  11. data/lib/chef/file_access_control/unix.rb +9 -9
  12. data/lib/chef/file_cache.rb +17 -2
  13. data/lib/chef/file_content_management/deploy/target_io.rb +29 -0
  14. data/lib/chef/file_content_management/deploy.rb +4 -1
  15. data/lib/chef/formatters/doc.rb +1 -1
  16. data/lib/chef/mixin/file_class.rb +3 -1
  17. data/lib/chef/mixin/get_source_from_package.rb +1 -1
  18. data/lib/chef/mixin/openssl_helper.rb +1 -1
  19. data/lib/chef/node/attribute.rb +3 -11
  20. data/lib/chef/node/immutable_collections.rb +15 -8
  21. data/lib/chef/node/mixin/state_tracking.rb +6 -3
  22. data/lib/chef/node.rb +1 -1
  23. data/lib/chef/policy_builder/policyfile.rb +8 -0
  24. data/lib/chef/provider/.gitkeep +0 -0
  25. data/lib/chef/provider/cookbook_file.rb +1 -1
  26. data/lib/chef/provider/cron.rb +1 -1
  27. data/lib/chef/provider/directory.rb +15 -15
  28. data/lib/chef/provider/file.rb +42 -29
  29. data/lib/chef/provider/git.rb +8 -8
  30. data/lib/chef/provider/group/aix.rb +1 -1
  31. data/lib/chef/provider/group/dscl.rb +1 -1
  32. data/lib/chef/provider/group/gpasswd.rb +2 -2
  33. data/lib/chef/provider/group/groupadd.rb +1 -1
  34. data/lib/chef/provider/group/groupmod.rb +2 -2
  35. data/lib/chef/provider/group/pw.rb +2 -2
  36. data/lib/chef/provider/group/solaris.rb +2 -2
  37. data/lib/chef/provider/group/usermod.rb +2 -2
  38. data/lib/chef/provider/group.rb +1 -1
  39. data/lib/chef/provider/http_request.rb +2 -3
  40. data/lib/chef/provider/ifconfig/aix.rb +1 -1
  41. data/lib/chef/provider/ifconfig/debian.rb +3 -3
  42. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  43. data/lib/chef/provider/ifconfig.rb +1 -1
  44. data/lib/chef/provider/link.rb +10 -10
  45. data/lib/chef/provider/mount/aix.rb +4 -4
  46. data/lib/chef/provider/mount/linux.rb +4 -4
  47. data/lib/chef/provider/mount/mount.rb +11 -11
  48. data/lib/chef/provider/package/apt.rb +2 -11
  49. data/lib/chef/provider/package/bff.rb +3 -3
  50. data/lib/chef/provider/package/chocolatey.rb +54 -24
  51. data/lib/chef/provider/package/dpkg.rb +3 -3
  52. data/lib/chef/provider/package/freebsd/base.rb +1 -1
  53. data/lib/chef/provider/package/habitat.rb +5 -3
  54. data/lib/chef/provider/package/ips.rb +2 -2
  55. data/lib/chef/provider/package/openbsd.rb +3 -2
  56. data/lib/chef/provider/package/pacman.rb +4 -4
  57. data/lib/chef/provider/package/paludis.rb +2 -2
  58. data/lib/chef/provider/package/portage.rb +1 -1
  59. data/lib/chef/provider/package/powershell.rb +1 -0
  60. data/lib/chef/provider/package/rpm.rb +2 -2
  61. data/lib/chef/provider/package/smartos.rb +2 -2
  62. data/lib/chef/provider/package/snap.rb +2 -1
  63. data/lib/chef/provider/package/snap_tm.rb +79 -0
  64. data/lib/chef/provider/package/solaris.rb +4 -4
  65. data/lib/chef/provider/package/zypper.rb +4 -5
  66. data/lib/chef/provider/package.rb +1 -1
  67. data/lib/chef/provider/remote_directory.rb +5 -5
  68. data/lib/chef/provider/remote_file/http.rb +2 -3
  69. data/lib/chef/provider/remote_file.rb +1 -1
  70. data/lib/chef/provider/route.rb +9 -9
  71. data/lib/chef/provider/service/aix.rb +1 -1
  72. data/lib/chef/provider/service/aixinit.rb +4 -4
  73. data/lib/chef/provider/service/arch.rb +6 -6
  74. data/lib/chef/provider/service/debian.rb +5 -5
  75. data/lib/chef/provider/service/freebsd.rb +7 -7
  76. data/lib/chef/provider/service/gentoo.rb +5 -5
  77. data/lib/chef/provider/service/init.rb +2 -2
  78. data/lib/chef/provider/service/insserv.rb +2 -2
  79. data/lib/chef/provider/service/invokercd.rb +1 -1
  80. data/lib/chef/provider/service/openbsd.rb +7 -7
  81. data/lib/chef/provider/service/redhat.rb +3 -3
  82. data/lib/chef/provider/service/solaris.rb +2 -2
  83. data/lib/chef/provider/service/systemd.rb +2 -2
  84. data/lib/chef/provider/service/upstart.rb +2 -2
  85. data/lib/chef/provider/service/windows.rb +0 -1
  86. data/lib/chef/provider/subversion.rb +8 -8
  87. data/lib/chef/provider/systemd_unit.rb +3 -3
  88. data/lib/chef/provider/template.rb +1 -1
  89. data/lib/chef/provider/user/aix.rb +3 -3
  90. data/lib/chef/provider/user/linux.rb +7 -2
  91. data/lib/chef/provider/user/pw.rb +3 -3
  92. data/lib/chef/provider/user/solaris.rb +7 -7
  93. data/lib/chef/provider/user.rb +7 -8
  94. data/lib/chef/provider/yum_repository.rb +1 -3
  95. data/lib/chef/provider/zypper_repository.rb +1 -1
  96. data/lib/chef/providers.rb +1 -0
  97. data/lib/chef/resource/.gitkeep +0 -0
  98. data/lib/chef/resource/alternatives.rb +2 -2
  99. data/lib/chef/resource/apt_preference.rb +1 -1
  100. data/lib/chef/resource/apt_repository.rb +7 -9
  101. data/lib/chef/resource/apt_update.rb +3 -3
  102. data/lib/chef/resource/bff_package.rb +1 -1
  103. data/lib/chef/resource/chef_client_config.rb +3 -2
  104. data/lib/chef/resource/chef_client_systemd_timer.rb +5 -0
  105. data/lib/chef/resource/chef_gem.rb +1 -1
  106. data/lib/chef/resource/chef_sleep.rb +1 -1
  107. data/lib/chef/resource/cookbook_file.rb +1 -1
  108. data/lib/chef/resource/cron/cron.rb +1 -1
  109. data/lib/chef/resource/cron/cron_d.rb +1 -1
  110. data/lib/chef/resource/cron_access.rb +1 -1
  111. data/lib/chef/resource/directory.rb +1 -1
  112. data/lib/chef/resource/dpkg_package.rb +1 -1
  113. data/lib/chef/resource/execute.rb +8 -6
  114. data/lib/chef/resource/file/verification/json.rb +1 -1
  115. data/lib/chef/resource/file/verification/systemd_unit.rb +1 -1
  116. data/lib/chef/resource/file/verification/yaml.rb +1 -1
  117. data/lib/chef/resource/file.rb +1 -1
  118. data/lib/chef/resource/freebsd_package.rb +2 -2
  119. data/lib/chef/resource/group.rb +1 -1
  120. data/lib/chef/resource/habitat/habitat_package.rb +1 -1
  121. data/lib/chef/resource/habitat/habitat_sup.rb +9 -9
  122. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +2 -2
  123. data/lib/chef/resource/habitat_install.rb +5 -4
  124. data/lib/chef/resource/hostname.rb +11 -10
  125. data/lib/chef/resource/http_request.rb +1 -1
  126. data/lib/chef/resource/ifconfig.rb +1 -1
  127. data/lib/chef/resource/inspec_input.rb +3 -1
  128. data/lib/chef/resource/inspec_waiver.rb +1 -1
  129. data/lib/chef/resource/inspec_waiver_file_entry.rb +1 -1
  130. data/lib/chef/resource/ips_package.rb +2 -2
  131. data/lib/chef/resource/kernel_module.rb +2 -2
  132. data/lib/chef/resource/link.rb +1 -1
  133. data/lib/chef/resource/locale.rb +2 -2
  134. data/lib/chef/resource/mount.rb +1 -1
  135. data/lib/chef/resource/notify_group.rb +1 -1
  136. data/lib/chef/resource/ohai.rb +1 -1
  137. data/lib/chef/resource/ohai_hint.rb +1 -1
  138. data/lib/chef/resource/openbsd_package.rb +2 -2
  139. data/lib/chef/resource/package.rb +1 -1
  140. data/lib/chef/resource/pacman_package.rb +1 -1
  141. data/lib/chef/resource/paludis_package.rb +1 -1
  142. data/lib/chef/resource/portage_package.rb +1 -1
  143. data/lib/chef/resource/powershell_package.rb +4 -0
  144. data/lib/chef/resource/reboot.rb +1 -1
  145. data/lib/chef/resource/remote_directory.rb +1 -1
  146. data/lib/chef/resource/remote_file.rb +1 -1
  147. data/lib/chef/resource/rhsm_errata.rb +1 -1
  148. data/lib/chef/resource/rhsm_errata_level.rb +1 -1
  149. data/lib/chef/resource/rhsm_register.rb +1 -1
  150. data/lib/chef/resource/rhsm_repo.rb +3 -4
  151. data/lib/chef/resource/rhsm_subscription.rb +8 -9
  152. data/lib/chef/resource/route.rb +1 -1
  153. data/lib/chef/resource/rpm_package.rb +1 -1
  154. data/lib/chef/resource/scm/git.rb +1 -1
  155. data/lib/chef/resource/scm/subversion.rb +1 -1
  156. data/lib/chef/resource/selinux/common_helpers.rb +1 -1
  157. data/lib/chef/resource/selinux_boolean.rb +1 -1
  158. data/lib/chef/resource/selinux_fcontext.rb +3 -3
  159. data/lib/chef/resource/selinux_install.rb +1 -1
  160. data/lib/chef/resource/selinux_login.rb +1 -1
  161. data/lib/chef/resource/selinux_module.rb +5 -5
  162. data/lib/chef/resource/selinux_permissive.rb +2 -2
  163. data/lib/chef/resource/selinux_port.rb +2 -2
  164. data/lib/chef/resource/selinux_state.rb +2 -2
  165. data/lib/chef/resource/selinux_user.rb +1 -1
  166. data/lib/chef/resource/smartos_package.rb +2 -2
  167. data/lib/chef/resource/snap_package.rb +24 -1
  168. data/lib/chef/resource/solaris_package.rb +1 -1
  169. data/lib/chef/resource/ssh_known_hosts_entry.rb +1 -1
  170. data/lib/chef/resource/sudo.rb +5 -5
  171. data/lib/chef/resource/support/client.erb +1 -1
  172. data/lib/chef/resource/swap_file.rb +6 -6
  173. data/lib/chef/resource/sysctl.rb +6 -5
  174. data/lib/chef/resource/systemd_unit.rb +1 -1
  175. data/lib/chef/resource/template.rb +1 -1
  176. data/lib/chef/resource/timezone.rb +5 -5
  177. data/lib/chef/resource/user/aix_user.rb +2 -2
  178. data/lib/chef/resource/user/linux_user.rb +2 -2
  179. data/lib/chef/resource/user/pw_user.rb +2 -2
  180. data/lib/chef/resource/user/solaris_user.rb +2 -2
  181. data/lib/chef/resource/user_ulimit.rb +1 -1
  182. data/lib/chef/resource/yum_repository.rb +1 -1
  183. data/lib/chef/resource/zypper_package.rb +2 -2
  184. data/lib/chef/resource/zypper_repository.rb +2 -2
  185. data/lib/chef/run_lock.rb +3 -0
  186. data/lib/chef/scan_access_control.rb +6 -6
  187. data/lib/chef/target_io/dir.rb +12 -0
  188. data/lib/chef/target_io/etc.rb +16 -0
  189. data/lib/chef/target_io/file.rb +12 -0
  190. data/lib/chef/target_io/fileutils.rb +12 -0
  191. data/lib/chef/target_io/http.rb +22 -0
  192. data/lib/chef/target_io/io.rb +12 -0
  193. data/lib/chef/target_io/shadow.rb +44 -0
  194. data/lib/chef/target_io/train/dir.rb +69 -0
  195. data/lib/chef/target_io/train/etc.rb +112 -0
  196. data/lib/chef/target_io/train/file.rb +219 -0
  197. data/lib/chef/target_io/train/fileutils.rb +220 -0
  198. data/lib/chef/target_io/train/http.rb +117 -0
  199. data/lib/chef/target_io/train/io.rb +13 -0
  200. data/lib/chef/target_io/train/shadow.rb +52 -0
  201. data/lib/chef/target_io/train_compat.rb +7 -0
  202. data/lib/chef/target_io.rb +9 -0
  203. data/lib/chef/util/backup.rb +1 -1
  204. data/lib/chef/util/diff.rb +14 -1
  205. data/lib/chef/util/file_edit.rb +4 -4
  206. data/lib/chef/version.rb +1 -1
  207. data/lib/chef.rb +2 -0
  208. data/spec/functional/resource/remote_file_spec.rb +1 -1
  209. data/spec/integration/client/fips_spec.rb +11 -2
  210. data/spec/integration/client/open_ssl_spec.rb +20 -0
  211. data/spec/spec_helper.rb +3 -1
  212. data/spec/support/platform_helpers.rb +20 -7
  213. data/spec/unit/client_spec.rb +0 -16
  214. data/spec/unit/file_cache_spec.rb +64 -0
  215. data/spec/unit/mixin/openssl_helper_spec.rb +6 -1
  216. data/spec/unit/provider/apt_repository_spec.rb +1 -1
  217. data/spec/unit/provider/package/chocolatey_spec.rb +17 -12
  218. data/spec/unit/provider/package/windows_spec.rb +5 -5
  219. data/spec/unit/provider/package/zypper_spec.rb +0 -10
  220. data/spec/unit/provider/route_spec.rb +6 -4
  221. data/spec/unit/resource/rhsm_repo_spec.rb +1 -0
  222. data/spec/unit/resource/rhsm_subscription_spec.rb +2 -0
  223. metadata +31 -10
@@ -18,7 +18,7 @@ class Chef
18
18
  class SelinuxPermissive < Chef::Resource
19
19
  unified_mode true
20
20
 
21
- provides :selinux_permissive
21
+ provides :selinux_permissive, target_mode: true
22
22
 
23
23
  description "Use the **selinux_permissive** resource to allow some domains to misbehave without stopping them. This is not as good as setting specific policies, but better than disabling SELinux entirely."
24
24
  introduced "18.0"
@@ -61,4 +61,4 @@ class Chef
61
61
  end
62
62
  end
63
63
  end
64
- end
64
+ end
@@ -19,7 +19,7 @@ class Chef
19
19
  class SelinuxPort < Chef::Resource
20
20
  unified_mode true
21
21
 
22
- provides :selinux_port
22
+ provides :selinux_port, target_mode: true
23
23
 
24
24
  description "Use the **selinux_port** resource to assign a network port to a specific SELinux context. For example, running a web server on a non-standard port."
25
25
  introduced "18.0"
@@ -115,4 +115,4 @@ class Chef
115
115
 
116
116
  end
117
117
  end
118
- end
118
+ end
@@ -19,7 +19,7 @@ class Chef
19
19
  class SelinuxState < Chef::Resource
20
20
  unified_mode true
21
21
 
22
- provides :selinux_state
22
+ provides :selinux_state, target_mode: true
23
23
 
24
24
  description "Use **selinux_state** resource to manages the SELinux state on the system. It does this by using the `setenforce` command and rendering the `/etc/selinux/config` file from a template."
25
25
  introduced "18.0"
@@ -163,4 +163,4 @@ class Chef
163
163
  end
164
164
  end
165
165
  end
166
- end
166
+ end
@@ -19,7 +19,7 @@ class Chef
19
19
  class SelinuxUser < Chef::Resource
20
20
  unified_mode true
21
21
 
22
- provides :selinux_user
22
+ provides :selinux_user, target_mode: true
23
23
 
24
24
  description "Use the **selinux_user** resource to add, update, or remove SELinux users."
25
25
  introduced "18.1"
@@ -22,8 +22,8 @@ class Chef
22
22
  class Resource
23
23
  class SmartosPackage < Chef::Resource::Package
24
24
 
25
- provides :smartos_package
26
- provides :package, platform_family: "smartos"
25
+ provides :smartos_package, target_mode: true
26
+ provides :package, platform_family: "smartos", target_mode: true
27
27
 
28
28
  description "Use the **smartos_package** resource to manage packages for the SmartOS platform."
29
29
 
@@ -22,10 +22,33 @@ class Chef
22
22
  class Resource
23
23
  class SnapPackage < Chef::Resource::Package
24
24
 
25
- provides :snap_package
25
+ provides :snap_package, target_mode: true
26
26
 
27
27
  description "Use the **snap_package** resource to manage snap packages on Debian and Ubuntu platforms."
28
28
  introduced "15.0"
29
+ examples <<~DOC
30
+ **Install a package**
31
+
32
+ ```ruby
33
+ snap_package 'hello'
34
+ ```
35
+
36
+ **Upgrade a package**
37
+
38
+ ```ruby
39
+ snap_package 'hello' do
40
+ action :upgrade
41
+ end
42
+ ```
43
+
44
+ **Install a package with classic confinement**
45
+
46
+ ```ruby
47
+ snap_package 'hello' do
48
+ options 'classic'
49
+ end
50
+ ```
51
+ DOC
29
52
 
30
53
  allowed_actions :install, :upgrade, :remove, :purge
31
54
 
@@ -23,7 +23,7 @@ class Chef
23
23
  class Resource
24
24
  class SolarisPackage < Chef::Resource::Package
25
25
 
26
- provides :solaris_package
26
+ provides :solaris_package, target_mode: true
27
27
 
28
28
  description "Use the **solaris_package** resource to manage packages on the Solaris platform."
29
29
 
@@ -24,7 +24,7 @@ class Chef
24
24
  class Resource
25
25
  class SshKnownHostsEntry < Chef::Resource
26
26
 
27
- provides :ssh_known_hosts_entry
27
+ provides :ssh_known_hosts_entry, target_mode: true
28
28
 
29
29
  description "Use the **ssh_known_hosts_entry** resource to add an entry for the specified host in /etc/ssh/ssh_known_hosts or a user's known hosts file if specified."
30
30
  introduced "14.3"
@@ -25,7 +25,7 @@ class Chef
25
25
  class Resource
26
26
  class Sudo < Chef::Resource
27
27
 
28
- provides(:sudo) { true }
28
+ provides(:sudo, target_mode: true) { true }
29
29
 
30
30
  description "Use the **sudo** resource to add or remove individual sudo entries using sudoers.d files."\
31
31
  " Sudo version 1.7.2 or newer is required to use the sudo resource, as it relies on the"\
@@ -216,11 +216,11 @@ class Chef
216
216
  target = "#{new_resource.config_prefix}/sudoers.d/"
217
217
  directory(target)
218
218
 
219
- Chef::Log.warn("#{new_resource.filename} will be rendered, but will not take effect because the #{new_resource.config_prefix}/sudoers config lacks the includedir directive that loads configs from #{new_resource.config_prefix}/sudoers.d/!") if ::File.readlines("#{new_resource.config_prefix}/sudoers").grep(/includedir/).empty?
219
+ Chef::Log.warn("#{new_resource.filename} will be rendered, but will not take effect because the #{new_resource.config_prefix}/sudoers config lacks the includedir directive that loads configs from #{new_resource.config_prefix}/sudoers.d/!") if ::TargetIO::File.readlines("#{new_resource.config_prefix}/sudoers").grep(/includedir/).empty?
220
220
  file_path = "#{target}#{new_resource.filename}"
221
221
 
222
222
  if new_resource.template
223
- logger.trace("Template property provided, all other properties ignored.")
223
+ Chef::Log.trace("Template property provided, all other properties ignored.")
224
224
 
225
225
  template file_path do
226
226
  source new_resource.template
@@ -279,13 +279,13 @@ class Chef
279
279
  end
280
280
 
281
281
  def visudo_present?
282
- return true if ::File.exist?(new_resource.visudo_binary)
282
+ return true if ::TargetIO::File.exist?(new_resource.visudo_binary)
283
283
 
284
284
  Chef::Log.warn("The visudo binary cannot be found at '#{new_resource.visudo_binary}'. Skipping sudoer file validation. If visudo is on this system you can specify the path using the 'visudo_binary' property.")
285
285
  end
286
286
 
287
287
  def visudo_content(path)
288
- if ::File.exist?(path)
288
+ if ::TargetIO::File.exist?(path)
289
289
  "cat #{new_resource.config_prefix}/sudoers | #{new_resource.visudo_binary} -cf - && #{new_resource.visudo_binary} -cf %{path}"
290
290
  else
291
291
  "cat #{new_resource.config_prefix}/sudoers %{path} | #{new_resource.visudo_binary} -cf -"
@@ -10,7 +10,6 @@
10
10
  @https_proxy
11
11
  @ftp_proxy
12
12
  @log_level
13
- @minimal_ohai
14
13
  @named_run_list
15
14
  @no_proxy
16
15
  @pid_file
@@ -22,6 +21,7 @@
22
21
  <% next if instance_variable_get(prop).nil? || instance_variable_get(prop).empty? -%>
23
22
  <%=prop.delete_prefix("@") %> <%= instance_variable_get(prop).inspect %>
24
23
  <% end -%>
24
+ minimal_ohai <%= @minimal_ohai.inspect %>
25
25
  <%# ohai_disabled_plugins and ohai_optional_plugins properties don't match the config value perfectly-%>
26
26
  <% %w(@ohai_disabled_plugins
27
27
  @ohai_optional_plugins).each do |prop| -%>
@@ -21,7 +21,7 @@ class Chef
21
21
  class Resource
22
22
  class SwapFile < Chef::Resource
23
23
 
24
- provides(:swap_file) { true }
24
+ provides(:swap_file, target_mode: true) { true }
25
25
 
26
26
  description "Use the **swap_file** resource to create or delete swap files on Linux systems, and optionally to manage the swappiness configuration for a host."
27
27
  introduced "14.0"
@@ -84,7 +84,7 @@ class Chef
84
84
 
85
85
  action :remove, description: "Remove a swapfile and disable swap." do
86
86
  swapoff if swap_enabled?
87
- remove_swapfile if ::File.exist?(new_resource.path)
87
+ remove_swapfile if ::TargetIO::File.exist?(new_resource.path)
88
88
  end
89
89
 
90
90
  action_class do
@@ -129,7 +129,7 @@ class Chef
129
129
 
130
130
  def remove_swapfile
131
131
  converge_by "remove swap file #{new_resource.path}" do
132
- ::FileUtils.rm(new_resource.path)
132
+ ::TargetIO::FileUtils.rm(new_resource.path)
133
133
  end
134
134
  end
135
135
 
@@ -186,7 +186,7 @@ class Chef
186
186
  def compatible_kernel
187
187
  fallocate_location = shell_out("which fallocate").stdout
188
188
  Chef::Log.debug("#{new_resource} fallocate location is '#{fallocate_location}'")
189
- ::File.exist?(fallocate_location.chomp)
189
+ ::TargetIO::File.exist?(fallocate_location.chomp)
190
190
  end
191
191
 
192
192
  def compatible_filesystem?
@@ -205,7 +205,7 @@ class Chef
205
205
 
206
206
  def persist
207
207
  fstab = "/etc/fstab"
208
- contents = ::File.readlines(fstab)
208
+ contents = ::TargetIO::File.readlines(fstab)
209
209
  addition = "#{new_resource.path} swap swap defaults 0 0"
210
210
 
211
211
  if contents.any? { |line| line.strip == addition }
@@ -214,7 +214,7 @@ class Chef
214
214
  Chef::Log.info("#{new_resource} adding entry to #{fstab} for #{new_resource.path}")
215
215
 
216
216
  contents << "#{addition}\n"
217
- ::File.open(fstab, "w") { |f| f.write(contents.join("")) }
217
+ ::TargetIO::File.open(fstab, "w") { |f| f.write(contents.join("")) }
218
218
  end
219
219
  end
220
220
  end
@@ -21,8 +21,8 @@ class Chef
21
21
  class Resource
22
22
  class Sysctl < Chef::Resource
23
23
 
24
- provides(:sysctl) { true }
25
- provides(:sysctl_param) { true }
24
+ provides(:sysctl, target_mode: true) { true }
25
+ provides(:sysctl_param, target_mode: true) { true }
26
26
 
27
27
  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`."
28
28
  examples <<~DOC
@@ -103,6 +103,7 @@ class Chef
103
103
  property :comment, [Array, String],
104
104
  description: "Comments, placed above the resource setting in the generated file. For multi-line comments, use an array of strings, one per line.",
105
105
  default: [],
106
+ desired_state: false,
106
107
  introduced: "15.8"
107
108
 
108
109
  property :conf_dir, String,
@@ -151,7 +152,7 @@ class Chef
151
152
 
152
153
  action :remove, description: "Remove the kernel parameter and update the `sysctl` settings." do
153
154
  # only converge the resource if the file actually exists to delete
154
- if ::File.exist?("#{new_resource.conf_dir}/99-chef-#{new_resource.key.tr("/", ".")}.conf")
155
+ if ::TargetIO::File.exist?("#{new_resource.conf_dir}/99-chef-#{new_resource.key.tr("/", ".")}.conf")
155
156
  converge_by "removing sysctl config at #{new_resource.conf_dir}/99-chef-#{new_resource.key.tr("/", ".")}.conf" do
156
157
  file "#{new_resource.conf_dir}/99-chef-#{new_resource.key.tr("/", ".")}.conf" do
157
158
  action :delete
@@ -215,9 +216,9 @@ class Chef
215
216
  # return the value. Raise in case this conf file needs to be created
216
217
  # or updated
217
218
  def get_sysctld_value(key)
218
- raise unless ::File.exist?("/etc/sysctl.d/99-chef-#{key.tr("/", ".")}.conf")
219
+ raise unless ::TargetIO::File.exist?("/etc/sysctl.d/99-chef-#{key.tr("/", ".")}.conf")
219
220
 
220
- k, v = ::File.read("/etc/sysctl.d/99-chef-#{key.tr("/", ".")}.conf").match(/(.*) = (.*)/).captures
221
+ k, v = ::Target_IO::File.read("/etc/sysctl.d/99-chef-#{key.tr("/", ".")}.conf").match(/(.*) = (.*)/).captures
221
222
  raise "Unknown sysctl key!" if k.nil?
222
223
  raise "Unknown sysctl value!" if v.nil?
223
224
 
@@ -24,7 +24,7 @@ class Chef
24
24
  class Resource
25
25
  class SystemdUnit < Chef::Resource
26
26
 
27
- provides(:systemd_unit) { true }
27
+ provides(:systemd_unit, target_mode: true) { true }
28
28
 
29
29
  description "Use the **systemd_unit** resource to create, manage, and run [systemd units](https://www.freedesktop.org/software/systemd/man/systemd.html#Concepts)."
30
30
  introduced "12.11"
@@ -35,7 +35,7 @@ class Chef
35
35
  # template resource follow the same file specificity rules as the remote_file and file resources.
36
36
  class Template < Chef::Resource::File
37
37
 
38
- provides :template
38
+ provides :template, target_mode: true
39
39
 
40
40
  include Chef::Mixin::Securable
41
41
 
@@ -23,7 +23,7 @@ class Chef
23
23
  class Resource
24
24
  class Timezone < Chef::Resource
25
25
 
26
- provides :timezone
26
+ provides :timezone, target_mode: true
27
27
 
28
28
  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."
29
29
  introduced "14.6"
@@ -96,10 +96,10 @@ class Chef
96
96
  # @since 16.5
97
97
  # @return [String] timezone id
98
98
  def current_rhel_tz
99
- return nil unless ::File.exist?("/etc/sysconfig/clock")
99
+ return nil unless ::TargetIO::File.exist?("/etc/sysconfig/clock")
100
100
 
101
101
  # https://rubular.com/r/aoj01L3bKBM7wh
102
- /ZONE="(.*)"/.match(::File.read("/etc/sysconfig/clock"))[1]
102
+ /ZONE="(.*)"/.match(::TargetIO::File.read("/etc/sysconfig/clock"))[1]
103
103
  end
104
104
 
105
105
  load_current_value do
@@ -155,13 +155,13 @@ class Chef
155
155
  execute "tzdata-update" do
156
156
  command "/usr/sbin/tzdata-update"
157
157
  action :nothing
158
- only_if { ::File.executable?("/usr/sbin/tzdata-update") }
158
+ only_if { ::TargetIO::File.executable?("/usr/sbin/tzdata-update") }
159
159
  subscribes :run, "file[/etc/sysconfig/clock]", :immediately
160
160
  end
161
161
 
162
162
  link "/etc/localtime" do
163
163
  to "/usr/share/zoneinfo/#{new_resource.timezone}"
164
- not_if { ::File.executable?("/usr/sbin/tzdata-update") }
164
+ not_if { ::TargetIO::File.executable?("/usr/sbin/tzdata-update") }
165
165
  end
166
166
  when "mac_os_x"
167
167
  shell_out!(["sudo", "systemsetup", "-settimezone", new_resource.timezone])
@@ -22,8 +22,8 @@ class Chef
22
22
  class User
23
23
  class AixUser < Chef::Resource::User
24
24
 
25
- provides :aix_user
26
- provides :user, os: "aix"
25
+ provides :aix_user, target_mode: true
26
+ provides :user, os: "aix", target_mode: true
27
27
  end
28
28
  end
29
29
  end
@@ -22,8 +22,8 @@ class Chef
22
22
  class User
23
23
  class LinuxUser < Chef::Resource::User
24
24
 
25
- provides :linux_user
26
- provides :user, os: "linux"
25
+ provides :linux_user, target_mode: true
26
+ provides :user, os: "linux", target_mode: true
27
27
 
28
28
  end
29
29
  end
@@ -22,8 +22,8 @@ class Chef
22
22
  class User
23
23
  class PwUser < Chef::Resource::User
24
24
 
25
- provides :pw_user
26
- provides :user, os: "freebsd"
25
+ provides :pw_user, target_mode: true
26
+ provides :user, os: "freebsd", target_mode: true
27
27
  end
28
28
  end
29
29
  end
@@ -22,8 +22,8 @@ class Chef
22
22
  class User
23
23
  class SolarisUser < Chef::Resource::User
24
24
 
25
- provides :solaris_user
26
- provides :user, os: %w{omnios solaris2}
25
+ provides :solaris_user, target_mode: true
26
+ provides :user, os: %w{omnios solaris2}, target_mode: true
27
27
  end
28
28
  end
29
29
  end
@@ -23,7 +23,7 @@ class Chef
23
23
  class Resource
24
24
  class UserUlimit < Chef::Resource
25
25
 
26
- provides :user_ulimit
26
+ provides :user_ulimit, target_mode: true
27
27
 
28
28
  description "Use the **user_ulimit** resource to create individual ulimit files that are installed into the `/etc/security/limits.d/` directory."
29
29
  introduced "16.0"
@@ -22,7 +22,7 @@ class Chef
22
22
  class Resource
23
23
  class YumRepository < Chef::Resource
24
24
 
25
- provides(:yum_repository) { true }
25
+ provides(:yum_repository, target_mode: true) { true }
26
26
 
27
27
  description "Use the **yum_repository** resource to manage a Yum repository configuration file located at `/etc/yum.repos.d/repositoryid.repo` on the local machine. This configuration file specifies which repositories to reference, how to handle cached data, etc."
28
28
  introduced "12.14"
@@ -22,8 +22,8 @@ class Chef
22
22
  class Resource
23
23
  class ZypperPackage < Chef::Resource::Package
24
24
 
25
- provides :zypper_package
26
- provides :package, platform_family: "suse"
25
+ provides :zypper_package, target_mode: true
26
+ provides :package, platform_family: "suse", target_mode: true
27
27
 
28
28
  description "Use the **zypper_package** resource to install, upgrade, and remove packages with Zypper for the SUSE Enterprise and openSUSE platforms."
29
29
  examples <<~DOC
@@ -22,8 +22,8 @@ class Chef
22
22
  class Resource
23
23
  class ZypperRepository < Chef::Resource
24
24
 
25
- provides(:zypper_repository) { true }
26
- provides(:zypper_repo) { true } # legacy cookbook compatibility
25
+ provides(:zypper_repository, target_mode: true) { true }
26
+ provides(:zypper_repo, target_mode: true) { true } # legacy cookbook compatibility
27
27
 
28
28
  description "Use the **zypper_repository** resource to create Zypper package repositories on SUSE Enterprise Linux and openSUSE systems. This resource maintains full compatibility with the **zypper_repository** resource in the existing **zypper** cookbook."
29
29
  introduced "13.3"
data/lib/chef/run_lock.rb CHANGED
@@ -151,6 +151,9 @@ class Chef
151
151
  # will return false
152
152
  if runlock.flock(File::LOCK_NB | File::LOCK_EX) == 0
153
153
  true
154
+ # Target mode does not have run locks, because concurrency is intended
155
+ elsif Chef::Config.target_mode?
156
+ true
154
157
  else
155
158
  false
156
159
  end
@@ -46,7 +46,7 @@ class Chef
46
46
 
47
47
  # Modifies @current_resource, setting the current access control state.
48
48
  def set_all!
49
- if ::File.exist?(new_resource.path)
49
+ if ::TargetIO::File.exist?(new_resource.path)
50
50
  set_owner
51
51
  set_group
52
52
  set_mode
@@ -76,7 +76,7 @@ class Chef
76
76
  end
77
77
 
78
78
  def lookup_uid
79
- unless (pwent = Etc.getpwuid(stat.uid)).nil?
79
+ unless (pwent = TargetIO::Etc.getpwuid(stat.uid)).nil?
80
80
  pwent.name
81
81
  else
82
82
  stat.uid
@@ -103,7 +103,7 @@ class Chef
103
103
  end
104
104
 
105
105
  def lookup_gid
106
- unless (pwent = Etc.getgrgid(stat.gid)).nil?
106
+ unless (pwent = TargetIO::Etc.getgrgid(stat.gid)).nil?
107
107
  pwent.name
108
108
  else
109
109
  stat.gid
@@ -128,10 +128,10 @@ class Chef
128
128
 
129
129
  def stat
130
130
  @stat ||= if @new_resource.instance_of?(Chef::Resource::Link)
131
- ::File.lstat(@new_resource.path)
131
+ ::TargetIO::File.lstat(@new_resource.path)
132
132
  else
133
- realpath = ::File.realpath(@new_resource.path)
134
- ::File.stat(realpath)
133
+ realpath = ::TargetIO::File.realpath(@new_resource.path)
134
+ ::TargetIO::File.stat(realpath)
135
135
  end
136
136
  end
137
137
  end
@@ -0,0 +1,12 @@
1
+ module TargetIO
2
+ class Dir
3
+ class << self
4
+ def method_missing(m, *args, **kwargs, &block)
5
+ Chef::Log.debug format("Dir::%s(%s)", m.to_s, args.join(", "))
6
+
7
+ backend = ChefConfig::Config.target_mode? ? TrainCompat::Dir : ::Dir
8
+ backend.send(m, *args, **kwargs, &block)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module TargetIO
2
+ class Etc
3
+ class << self
4
+ def method_missing(m, *args, **kwargs, &block)
5
+ Chef::Log.debug format("Etc::%s(%s)", m.to_s, args.join(", "))
6
+
7
+ if ChefConfig::Config.target_mode? && !Chef.run_context.transport_connection.os.unix?
8
+ raise "Etc support only on Unix, this is " + Chef.run_context.transport_connection.platform.title
9
+ end
10
+
11
+ backend = ChefConfig::Config.target_mode? ? TrainCompat::Etc : ::Etc
12
+ backend.send(m, *args, **kwargs, &block)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module TargetIO
2
+ class File
3
+ class << self
4
+ def method_missing(m, *args, **kwargs, &block)
5
+ Chef::Log.debug format("File::%s(%s)", m.to_s, args.join(", "))
6
+
7
+ backend = ChefConfig::Config.target_mode? ? TrainCompat::File : ::File
8
+ backend.send(m, *args, **kwargs, &block)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module TargetIO
2
+ class FileUtils
3
+ class << self
4
+ def method_missing(m, *args, **kwargs, &block)
5
+ Chef::Log.debug format("FileUtils::%s(%s)", m.to_s, args.join(", "))
6
+
7
+ backend = ChefConfig::Config.target_mode? ? TrainCompat::FileUtils : ::FileUtils
8
+ backend.send(m, *args, **kwargs, &block)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ require "forwardable" unless defined?(Forwardable)
2
+
3
+ require_relative "../http/simple"
4
+ require_relative "train/http"
5
+
6
+ module TargetIO
7
+ class HTTP
8
+ extend Forwardable
9
+ def_delegators :@http_class, :get, :head, :patch, :post, :put, :delete
10
+
11
+ # Only for Chef::Provider::RemoteFile::HTTP
12
+ def_delegators :@http_class, :streaming_request, :streaming_request_with_progress, :last_response
13
+
14
+ def initialize(url, http_client_opts = {})
15
+ if ::ChefConfig::Config.target_mode?
16
+ @http_class = TargetIO::TrainCompat::HTTP.new(url, http_client_opts)
17
+ else
18
+ @http_class = Chef::HTTP::Simple.new(url, http_client_opts)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ module TargetIO
2
+ class IO
3
+ class << self
4
+ def method_missing(m, *args, **kwargs, &block)
5
+ Chef::Log.debug format("IO::%s(%s)", m.to_s, args.join(", "))
6
+
7
+ backend = ChefConfig::Config.target_mode? ? TrainCompat::IO : ::IO
8
+ backend.send(m, *args, **kwargs, &block)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,44 @@
1
+ module TargetIO
2
+ module Shadow
3
+ # sp_namp - pointer to null-terminated user name.
4
+ # sp_pwdp - pointer to null-terminated password.
5
+ # sp_lstchg - days since Jan 1, 1970 password was last
6
+ # changed.
7
+ # sp_min - days before which password may not be changed.
8
+ # sp_max - days after which password must be changed.
9
+ # sp_warn - days before password is to expire that user is
10
+ # warned of pending password expiration.
11
+ # sp_inact - days after password expires that account is
12
+ # considered inactive and disabled.
13
+ # sp_expire - days since Jan 1, 1970 when account will be
14
+ # disabled
15
+ # sp_loginclass - pointer to null-terminated user login class.
16
+ Entry = Struct.new(
17
+ :sp_namp,
18
+ :sp_pwdp,
19
+ :sp_lstchg,
20
+ :sp_min,
21
+ :sp_max,
22
+ :sp_warn,
23
+ :sp_inact,
24
+ :sp_expire,
25
+ :sp_loginclass
26
+ )
27
+
28
+ class Passwd
29
+ class << self
30
+
31
+ def method_missing(m, *args, **kwargs, &block)
32
+ Chef::Log.debug format("Shadow::Passwd::%s(%s)", m.to_s, args.join(", "))
33
+
34
+ if ChefConfig::Config.target_mode? && !Chef.run_context.transport_connection.os.unix?
35
+ raise "Shadow support only on Unix, this is " + Chef.run_context.transport_connection.platform.title
36
+ end
37
+
38
+ backend = ChefConfig::Config.target_mode? ? TrainCompat::Shadow::Passwd : ::Shadow::Passwd
39
+ backend.send(m, *args, **kwargs, &block)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end