chef 18.4.12 → 18.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/chef.gemspec +6 -6
  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/policy_builder/policyfile.rb +8 -0
  23. data/lib/chef/provider/.gitkeep +0 -0
  24. data/lib/chef/provider/cookbook_file.rb +1 -1
  25. data/lib/chef/provider/cron.rb +1 -1
  26. data/lib/chef/provider/directory.rb +15 -15
  27. data/lib/chef/provider/file.rb +42 -29
  28. data/lib/chef/provider/git.rb +8 -8
  29. data/lib/chef/provider/group/aix.rb +1 -1
  30. data/lib/chef/provider/group/dscl.rb +1 -1
  31. data/lib/chef/provider/group/gpasswd.rb +2 -2
  32. data/lib/chef/provider/group/groupadd.rb +1 -1
  33. data/lib/chef/provider/group/groupmod.rb +2 -2
  34. data/lib/chef/provider/group/pw.rb +2 -2
  35. data/lib/chef/provider/group/solaris.rb +2 -2
  36. data/lib/chef/provider/group/usermod.rb +2 -2
  37. data/lib/chef/provider/group.rb +1 -1
  38. data/lib/chef/provider/http_request.rb +2 -3
  39. data/lib/chef/provider/ifconfig/aix.rb +1 -1
  40. data/lib/chef/provider/ifconfig/debian.rb +3 -3
  41. data/lib/chef/provider/ifconfig/redhat.rb +1 -1
  42. data/lib/chef/provider/ifconfig.rb +1 -1
  43. data/lib/chef/provider/link.rb +10 -10
  44. data/lib/chef/provider/mount/aix.rb +4 -4
  45. data/lib/chef/provider/mount/linux.rb +4 -4
  46. data/lib/chef/provider/mount/mount.rb +11 -11
  47. data/lib/chef/provider/package/apt.rb +2 -11
  48. data/lib/chef/provider/package/bff.rb +3 -3
  49. data/lib/chef/provider/package/chocolatey.rb +54 -24
  50. data/lib/chef/provider/package/dpkg.rb +3 -3
  51. data/lib/chef/provider/package/freebsd/base.rb +1 -1
  52. data/lib/chef/provider/package/habitat.rb +5 -3
  53. data/lib/chef/provider/package/ips.rb +2 -2
  54. data/lib/chef/provider/package/openbsd.rb +3 -2
  55. data/lib/chef/provider/package/pacman.rb +4 -4
  56. data/lib/chef/provider/package/paludis.rb +2 -2
  57. data/lib/chef/provider/package/portage.rb +1 -1
  58. data/lib/chef/provider/package/powershell.rb +1 -0
  59. data/lib/chef/provider/package/rpm.rb +2 -2
  60. data/lib/chef/provider/package/smartos.rb +2 -2
  61. data/lib/chef/provider/package/snap.rb +2 -1
  62. data/lib/chef/provider/package/snap_tm.rb +79 -0
  63. data/lib/chef/provider/package/solaris.rb +4 -4
  64. data/lib/chef/provider/package/zypper.rb +4 -5
  65. data/lib/chef/provider/package.rb +1 -1
  66. data/lib/chef/provider/remote_directory.rb +5 -5
  67. data/lib/chef/provider/remote_file/http.rb +2 -3
  68. data/lib/chef/provider/remote_file.rb +1 -1
  69. data/lib/chef/provider/route.rb +9 -9
  70. data/lib/chef/provider/service/aix.rb +1 -1
  71. data/lib/chef/provider/service/aixinit.rb +4 -4
  72. data/lib/chef/provider/service/arch.rb +6 -6
  73. data/lib/chef/provider/service/debian.rb +5 -5
  74. data/lib/chef/provider/service/freebsd.rb +7 -7
  75. data/lib/chef/provider/service/gentoo.rb +5 -5
  76. data/lib/chef/provider/service/init.rb +2 -2
  77. data/lib/chef/provider/service/insserv.rb +2 -2
  78. data/lib/chef/provider/service/invokercd.rb +1 -1
  79. data/lib/chef/provider/service/openbsd.rb +7 -7
  80. data/lib/chef/provider/service/redhat.rb +3 -3
  81. data/lib/chef/provider/service/solaris.rb +2 -2
  82. data/lib/chef/provider/service/systemd.rb +2 -2
  83. data/lib/chef/provider/service/upstart.rb +2 -2
  84. data/lib/chef/provider/service/windows.rb +0 -1
  85. data/lib/chef/provider/subversion.rb +8 -8
  86. data/lib/chef/provider/systemd_unit.rb +3 -3
  87. data/lib/chef/provider/template.rb +1 -1
  88. data/lib/chef/provider/user/aix.rb +3 -3
  89. data/lib/chef/provider/user/linux.rb +7 -2
  90. data/lib/chef/provider/user/pw.rb +3 -3
  91. data/lib/chef/provider/user/solaris.rb +7 -7
  92. data/lib/chef/provider/user.rb +7 -8
  93. data/lib/chef/provider/yum_repository.rb +1 -3
  94. data/lib/chef/provider/zypper_repository.rb +1 -1
  95. data/lib/chef/providers.rb +1 -0
  96. data/lib/chef/resource/.gitkeep +0 -0
  97. data/lib/chef/resource/alternatives.rb +2 -2
  98. data/lib/chef/resource/apt_preference.rb +1 -1
  99. data/lib/chef/resource/apt_repository.rb +7 -9
  100. data/lib/chef/resource/apt_update.rb +3 -3
  101. data/lib/chef/resource/bff_package.rb +1 -1
  102. data/lib/chef/resource/chef_client_config.rb +3 -2
  103. data/lib/chef/resource/chef_client_systemd_timer.rb +5 -0
  104. data/lib/chef/resource/chef_gem.rb +1 -1
  105. data/lib/chef/resource/chef_sleep.rb +1 -1
  106. data/lib/chef/resource/cookbook_file.rb +1 -1
  107. data/lib/chef/resource/cron/cron.rb +1 -1
  108. data/lib/chef/resource/cron/cron_d.rb +1 -1
  109. data/lib/chef/resource/cron_access.rb +1 -1
  110. data/lib/chef/resource/directory.rb +1 -1
  111. data/lib/chef/resource/dpkg_package.rb +1 -1
  112. data/lib/chef/resource/execute.rb +8 -6
  113. data/lib/chef/resource/file/verification/json.rb +1 -1
  114. data/lib/chef/resource/file/verification/systemd_unit.rb +1 -1
  115. data/lib/chef/resource/file/verification/yaml.rb +1 -1
  116. data/lib/chef/resource/file.rb +1 -1
  117. data/lib/chef/resource/freebsd_package.rb +2 -2
  118. data/lib/chef/resource/group.rb +1 -1
  119. data/lib/chef/resource/habitat/habitat_package.rb +1 -1
  120. data/lib/chef/resource/habitat/habitat_sup.rb +9 -9
  121. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +2 -2
  122. data/lib/chef/resource/habitat_install.rb +5 -4
  123. data/lib/chef/resource/hostname.rb +11 -10
  124. data/lib/chef/resource/http_request.rb +1 -1
  125. data/lib/chef/resource/ifconfig.rb +1 -1
  126. data/lib/chef/resource/inspec_input.rb +3 -1
  127. data/lib/chef/resource/inspec_waiver.rb +1 -1
  128. data/lib/chef/resource/inspec_waiver_file_entry.rb +1 -1
  129. data/lib/chef/resource/ips_package.rb +2 -2
  130. data/lib/chef/resource/kernel_module.rb +2 -2
  131. data/lib/chef/resource/link.rb +1 -1
  132. data/lib/chef/resource/locale.rb +2 -2
  133. data/lib/chef/resource/mount.rb +1 -1
  134. data/lib/chef/resource/notify_group.rb +1 -1
  135. data/lib/chef/resource/ohai.rb +1 -1
  136. data/lib/chef/resource/ohai_hint.rb +1 -1
  137. data/lib/chef/resource/openbsd_package.rb +2 -2
  138. data/lib/chef/resource/package.rb +1 -1
  139. data/lib/chef/resource/pacman_package.rb +1 -1
  140. data/lib/chef/resource/paludis_package.rb +1 -1
  141. data/lib/chef/resource/portage_package.rb +1 -1
  142. data/lib/chef/resource/powershell_package.rb +4 -0
  143. data/lib/chef/resource/reboot.rb +1 -1
  144. data/lib/chef/resource/remote_directory.rb +1 -1
  145. data/lib/chef/resource/remote_file.rb +1 -1
  146. data/lib/chef/resource/rhsm_errata.rb +1 -1
  147. data/lib/chef/resource/rhsm_errata_level.rb +1 -1
  148. data/lib/chef/resource/rhsm_register.rb +1 -1
  149. data/lib/chef/resource/rhsm_repo.rb +3 -4
  150. data/lib/chef/resource/rhsm_subscription.rb +8 -9
  151. data/lib/chef/resource/route.rb +1 -1
  152. data/lib/chef/resource/rpm_package.rb +1 -1
  153. data/lib/chef/resource/scm/git.rb +1 -1
  154. data/lib/chef/resource/scm/subversion.rb +1 -1
  155. data/lib/chef/resource/selinux/common_helpers.rb +1 -1
  156. data/lib/chef/resource/selinux_boolean.rb +1 -1
  157. data/lib/chef/resource/selinux_fcontext.rb +3 -3
  158. data/lib/chef/resource/selinux_install.rb +1 -1
  159. data/lib/chef/resource/selinux_login.rb +1 -1
  160. data/lib/chef/resource/selinux_module.rb +5 -5
  161. data/lib/chef/resource/selinux_permissive.rb +2 -2
  162. data/lib/chef/resource/selinux_port.rb +2 -2
  163. data/lib/chef/resource/selinux_state.rb +2 -2
  164. data/lib/chef/resource/selinux_user.rb +1 -1
  165. data/lib/chef/resource/smartos_package.rb +2 -2
  166. data/lib/chef/resource/snap_package.rb +24 -1
  167. data/lib/chef/resource/solaris_package.rb +1 -1
  168. data/lib/chef/resource/ssh_known_hosts_entry.rb +1 -1
  169. data/lib/chef/resource/sudo.rb +5 -5
  170. data/lib/chef/resource/support/client.erb +1 -1
  171. data/lib/chef/resource/swap_file.rb +6 -6
  172. data/lib/chef/resource/sysctl.rb +6 -5
  173. data/lib/chef/resource/systemd_unit.rb +1 -1
  174. data/lib/chef/resource/template.rb +1 -1
  175. data/lib/chef/resource/timezone.rb +5 -5
  176. data/lib/chef/resource/user/aix_user.rb +2 -2
  177. data/lib/chef/resource/user/linux_user.rb +2 -2
  178. data/lib/chef/resource/user/pw_user.rb +2 -2
  179. data/lib/chef/resource/user/solaris_user.rb +2 -2
  180. data/lib/chef/resource/user_ulimit.rb +1 -1
  181. data/lib/chef/resource/yum_repository.rb +1 -1
  182. data/lib/chef/resource/zypper_package.rb +2 -2
  183. data/lib/chef/resource/zypper_repository.rb +2 -2
  184. data/lib/chef/run_lock.rb +3 -0
  185. data/lib/chef/scan_access_control.rb +6 -6
  186. data/lib/chef/target_io/dir.rb +12 -0
  187. data/lib/chef/target_io/etc.rb +16 -0
  188. data/lib/chef/target_io/file.rb +12 -0
  189. data/lib/chef/target_io/fileutils.rb +12 -0
  190. data/lib/chef/target_io/http.rb +22 -0
  191. data/lib/chef/target_io/io.rb +12 -0
  192. data/lib/chef/target_io/shadow.rb +44 -0
  193. data/lib/chef/target_io/train/dir.rb +69 -0
  194. data/lib/chef/target_io/train/etc.rb +112 -0
  195. data/lib/chef/target_io/train/file.rb +219 -0
  196. data/lib/chef/target_io/train/fileutils.rb +220 -0
  197. data/lib/chef/target_io/train/http.rb +117 -0
  198. data/lib/chef/target_io/train/io.rb +13 -0
  199. data/lib/chef/target_io/train/shadow.rb +52 -0
  200. data/lib/chef/target_io/train_compat.rb +7 -0
  201. data/lib/chef/target_io.rb +9 -0
  202. data/lib/chef/util/backup.rb +1 -1
  203. data/lib/chef/util/diff.rb +14 -1
  204. data/lib/chef/util/file_edit.rb +4 -4
  205. data/lib/chef/version.rb +1 -1
  206. data/lib/chef.rb +2 -0
  207. data/spec/functional/resource/remote_file_spec.rb +1 -1
  208. data/spec/integration/client/fips_spec.rb +11 -2
  209. data/spec/integration/client/open_ssl_spec.rb +20 -0
  210. data/spec/spec_helper.rb +3 -1
  211. data/spec/support/platform_helpers.rb +20 -7
  212. data/spec/unit/client_spec.rb +0 -16
  213. data/spec/unit/file_cache_spec.rb +64 -0
  214. data/spec/unit/mixin/openssl_helper_spec.rb +6 -1
  215. data/spec/unit/provider/apt_repository_spec.rb +1 -1
  216. data/spec/unit/provider/package/chocolatey_spec.rb +17 -12
  217. data/spec/unit/provider/package/windows_spec.rb +5 -5
  218. data/spec/unit/provider/package/zypper_spec.rb +0 -10
  219. data/spec/unit/provider/route_spec.rb +6 -4
  220. data/spec/unit/resource/rhsm_repo_spec.rb +1 -0
  221. data/spec/unit/resource/rhsm_subscription_spec.rb +2 -0
  222. metadata +29 -8
@@ -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
@@ -0,0 +1,69 @@
1
+ require_relative "file"
2
+ require_relative "fileutils"
3
+
4
+ module TargetIO
5
+ module TrainCompat
6
+ class Dir
7
+ class << self
8
+ # TODO: chdir, mktmpdir, pwd, home (Used in Resources)
9
+
10
+ def [](*patterns, base: ".", sort: true)
11
+ Dir.glob(patterns, 0, base, sort)
12
+ end
13
+
14
+ def delete(dir_name)
15
+ ::TargetIO::FileUtils.rm_rf(dir_name)
16
+ end
17
+
18
+ def directory?(dir_name)
19
+ ::TargetIO::File.directory? dir_name
20
+ end
21
+
22
+ def entries(dirname)
23
+ cmd = "ls -1a #{dirname}"
24
+ output = __run_command(cmd).stdout
25
+ output.split("\n")
26
+ end
27
+
28
+ def glob(pattern, flags = 0, base: ".", sort: true)
29
+ raise "Dir.glob flags not supported except FNM_DOTMATCH" unless [0, ::File::FNM_DOTMATCH].include? flags
30
+
31
+ pattern = Array(pattern)
32
+ matchdot = flags || ::File::FNM_DOTMATCH ? "dotglob" : ""
33
+
34
+ # TODO: Check for bash remotely
35
+ cmd += <<-BASH4
36
+ shopt -s globstar #{matchdot}
37
+ cd #{base}
38
+ for f in #{pattern.join(" ")}; do
39
+ printf '%s\n' "$f";
40
+ done
41
+ BASH4
42
+
43
+ output = __run_command(cmd).stdout
44
+ files = output.split("\n")
45
+ files.sort! if sort
46
+
47
+ files
48
+ end
49
+
50
+ def mkdir(dir_name, mode = nil)
51
+ ::TargetIO::FileUtils.mkdir(dir_name)
52
+ ::TargetIO::FileUtils.chmod(dir_name, mode) if mode
53
+ end
54
+
55
+ def unlink(dir_name)
56
+ ::TargetIO::FileUtils.rmdir(dir_name)
57
+ end
58
+
59
+ def __run_command(cmd)
60
+ __transport_connection.run_command(cmd)
61
+ end
62
+
63
+ def __transport_connection
64
+ Chef.run_context&.transport_connection
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end