chef 13.6.4 → 13.7.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/acceptance/Gemfile +2 -2
  4. data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +1 -6
  5. data/distro/powershell/chef/chef.psm1 +1 -5
  6. data/lib/chef/api_client.rb +5 -5
  7. data/lib/chef/api_client_v1.rb +6 -6
  8. data/lib/chef/application.rb +3 -2
  9. data/lib/chef/application/knife.rb +4 -0
  10. data/lib/chef/chef_class.rb +2 -2
  11. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  12. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +2 -4
  13. data/lib/chef/client.rb +3 -3
  14. data/lib/chef/cookbook/chefignore.rb +4 -0
  15. data/lib/chef/cookbook/cookbook_collection.rb +2 -2
  16. data/lib/chef/cookbook/metadata.rb +2 -2
  17. data/lib/chef/data_bag.rb +1 -1
  18. data/lib/chef/deprecated.rb +10 -0
  19. data/lib/chef/event_dispatch/base.rb +2 -2
  20. data/lib/chef/http.rb +10 -10
  21. data/lib/chef/knife.rb +16 -15
  22. data/lib/chef/knife/configure.rb +12 -36
  23. data/lib/chef/knife/cookbook_upload.rb +4 -4
  24. data/lib/chef/knife/core/bootstrap_context.rb +1 -1
  25. data/lib/chef/knife/core/status_presenter.rb +6 -2
  26. data/lib/chef/knife/core/ui.rb +1 -1
  27. data/lib/chef/knife/data_bag_secret_options.rb +1 -1
  28. data/lib/chef/knife/data_bag_show.rb +1 -1
  29. data/lib/chef/knife/edit.rb +1 -1
  30. data/lib/chef/knife/ssh.rb +47 -35
  31. data/lib/chef/knife/user_create.rb +2 -0
  32. data/lib/chef/knife/user_delete.rb +2 -0
  33. data/lib/chef/knife/user_edit.rb +2 -0
  34. data/lib/chef/knife/user_reregister.rb +2 -0
  35. data/lib/chef/knife/user_show.rb +2 -0
  36. data/lib/chef/mixin/powershell_out.rb +1 -1
  37. data/lib/chef/node/attribute.rb +46 -70
  38. data/lib/chef/node/attribute_collections.rb +5 -5
  39. data/lib/chef/node/common_api.rb +1 -1
  40. data/lib/chef/node/immutable_collections.rb +180 -23
  41. data/lib/chef/node/mixin/state_tracking.rb +6 -6
  42. data/lib/chef/node_map.rb +63 -45
  43. data/lib/chef/property.rb +8 -8
  44. data/lib/chef/provider.rb +9 -3
  45. data/lib/chef/provider/apt_preference.rb +1 -1
  46. data/lib/chef/provider/apt_repository.rb +1 -1
  47. data/lib/chef/provider/apt_update.rb +1 -1
  48. data/lib/chef/provider/file.rb +1 -1
  49. data/lib/chef/provider/group/dscl.rb +6 -2
  50. data/lib/chef/provider/ifconfig.rb +96 -34
  51. data/lib/chef/provider/launchd.rb +0 -1
  52. data/lib/chef/provider/log.rb +3 -13
  53. data/lib/chef/provider/package/dnf.rb +1 -1
  54. data/lib/chef/provider/package/smartos.rb +2 -2
  55. data/lib/chef/provider/reboot.rb +12 -0
  56. data/lib/chef/provider/remote_directory.rb +1 -1
  57. data/lib/chef/provider/remote_file/http.rb +3 -2
  58. data/lib/chef/provider/service/solaris.rb +6 -2
  59. data/lib/chef/provider/systemd_unit.rb +34 -33
  60. data/lib/chef/provider/user/dscl.rb +1 -1
  61. data/lib/chef/provider/windows_path.rb +6 -7
  62. data/lib/chef/provider/windows_task.rb +89 -33
  63. data/lib/chef/provider/yum_repository.rb +24 -9
  64. data/lib/chef/resource/apt_package.rb +1 -0
  65. data/lib/chef/resource/apt_preference.rb +4 -0
  66. data/lib/chef/resource/apt_repository.rb +4 -0
  67. data/lib/chef/resource/apt_update.rb +3 -0
  68. data/lib/chef/resource/bash.rb +4 -0
  69. data/lib/chef/resource/batch.rb +5 -0
  70. data/lib/chef/resource/bff_package.rb +4 -0
  71. data/lib/chef/resource/breakpoint.rb +6 -0
  72. data/lib/chef/resource/cab_package.rb +6 -6
  73. data/lib/chef/resource/chef_gem.rb +13 -0
  74. data/lib/chef/resource/chocolatey_package.rb +4 -6
  75. data/lib/chef/resource/cookbook_file.rb +13 -15
  76. data/lib/chef/resource/cron.rb +2 -0
  77. data/lib/chef/resource/csh.rb +4 -0
  78. data/lib/chef/resource/directory.rb +8 -26
  79. data/lib/chef/resource/dnf_package.rb +5 -0
  80. data/lib/chef/resource/dpkg_package.rb +2 -0
  81. data/lib/chef/resource/dsc_resource.rb +5 -0
  82. data/lib/chef/resource/dsc_script.rb +6 -0
  83. data/lib/chef/resource/env.rb +3 -0
  84. data/lib/chef/resource/erl_call.rb +5 -0
  85. data/lib/chef/resource/execute.rb +5 -1
  86. data/lib/chef/resource/file.rb +2 -1
  87. data/lib/chef/resource/file/verification.rb +10 -0
  88. data/lib/chef/resource/freebsd_package.rb +10 -2
  89. data/lib/chef/resource/gem_package.rb +2 -0
  90. data/lib/chef/resource/git.rb +2 -0
  91. data/lib/chef/resource/group.rb +1 -0
  92. data/lib/chef/resource/homebrew_package.rb +3 -0
  93. data/lib/chef/resource/http_request.rb +2 -0
  94. data/lib/chef/resource/ifconfig.rb +23 -150
  95. data/lib/chef/resource/ips_package.rb +1 -0
  96. data/lib/chef/resource/ksh.rb +6 -0
  97. data/lib/chef/resource/launchd.rb +5 -4
  98. data/lib/chef/resource/link.rb +10 -0
  99. data/lib/chef/resource/log.rb +19 -46
  100. data/lib/chef/resource/macports_package.rb +1 -0
  101. data/lib/chef/resource/mdadm.rb +4 -0
  102. data/lib/chef/resource/mount.rb +1 -0
  103. data/lib/chef/resource/msu_package.rb +7 -8
  104. data/lib/chef/resource/ohai.rb +2 -0
  105. data/lib/chef/resource/openbsd_package.rb +3 -0
  106. data/lib/chef/resource/osx_profile.rb +10 -40
  107. data/lib/chef/resource/package.rb +6 -0
  108. data/lib/chef/resource/pacman_package.rb +1 -0
  109. data/lib/chef/resource/paludis_package.rb +3 -0
  110. data/lib/chef/resource/perl.rb +4 -0
  111. data/lib/chef/resource/portage_package.rb +1 -0
  112. data/lib/chef/resource/powershell_package.rb +5 -0
  113. data/lib/chef/resource/powershell_script.rb +8 -0
  114. data/lib/chef/resource/python.rb +4 -0
  115. data/lib/chef/resource/reboot.rb +14 -20
  116. data/lib/chef/resource/registry_key.rb +1 -0
  117. data/lib/chef/resource/remote_directory.rb +3 -0
  118. data/lib/chef/resource/remote_file.rb +2 -0
  119. data/lib/chef/resource/resource_notification.rb +17 -0
  120. data/lib/chef/resource/route.rb +1 -0
  121. data/lib/chef/resource/rpm_package.rb +1 -0
  122. data/lib/chef/resource/ruby.rb +4 -0
  123. data/lib/chef/resource/ruby_block.rb +3 -0
  124. data/lib/chef/resource/script.rb +4 -0
  125. data/lib/chef/resource/service.rb +1 -0
  126. data/lib/chef/resource/smartos_package.rb +1 -0
  127. data/lib/chef/resource/solaris_package.rb +1 -0
  128. data/lib/chef/resource/subversion.rb +1 -0
  129. data/lib/chef/resource/systemd_unit.rb +6 -0
  130. data/lib/chef/resource/template.rb +9 -0
  131. data/lib/chef/resource/user.rb +1 -0
  132. data/lib/chef/resource/windows_package.rb +2 -0
  133. data/lib/chef/resource/windows_path.rb +5 -10
  134. data/lib/chef/resource/windows_service.rb +3 -0
  135. data/lib/chef/resource/windows_task.rb +66 -87
  136. data/lib/chef/resource/yum_repository.rb +26 -22
  137. data/lib/chef/resource/zypper_package.rb +2 -0
  138. data/lib/chef/resource/zypper_repository.rb +6 -1
  139. data/lib/chef/run_context.rb +8 -2
  140. data/lib/chef/server_api.rb +1 -0
  141. data/lib/chef/util/selinux.rb +5 -4
  142. data/lib/chef/version.rb +1 -1
  143. data/lib/chef/version/platform.rb +18 -0
  144. data/lib/chef/version_constraint/platform.rb +2 -0
  145. data/spec/data/client.d_00/02-strings.rb +2 -0
  146. data/spec/functional/assets/chefinittest +6 -4
  147. data/spec/functional/knife/ssh_spec.rb +54 -7
  148. data/spec/functional/resource/bff_spec.rb +3 -3
  149. data/spec/functional/resource/ifconfig_spec.rb +1 -1
  150. data/spec/functional/resource/mount_spec.rb +7 -3
  151. data/spec/functional/resource/user/useradd_spec.rb +4 -4
  152. data/spec/functional/resource/windows_task_spec.rb +6 -6
  153. data/spec/functional/win32/security_spec.rb +7 -33
  154. data/spec/integration/knife/data_bag_show_spec.rb +1 -1
  155. data/spec/integration/recipes/noop_resource_spec.rb +1 -1
  156. data/spec/integration/recipes/recipe_dsl_spec.rb +30 -30
  157. data/spec/integration/recipes/resource_action_spec.rb +2 -2
  158. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +71 -15
  159. data/spec/spec_helper.rb +19 -0
  160. data/spec/support/shared/functional/execute_resource.rb +1 -1
  161. data/spec/support/shared/unit/application_dot_d.rb +2 -0
  162. data/spec/support/shared/unit/execute_resource.rb +8 -1
  163. data/spec/support/shared/unit/provider/file.rb +9 -1
  164. data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +10 -7
  165. data/spec/unit/chef_fs/file_system/repository/directory_spec.rb +2 -2
  166. data/spec/unit/client_spec.rb +1 -1
  167. data/spec/unit/deprecated_spec.rb +4 -4
  168. data/spec/unit/http_spec.rb +9 -0
  169. data/spec/unit/knife/bootstrap_spec.rb +5 -0
  170. data/spec/unit/knife/configure_spec.rb +10 -60
  171. data/spec/unit/knife/data_bag_create_spec.rb +40 -2
  172. data/spec/unit/knife/data_bag_show_spec.rb +16 -2
  173. data/spec/unit/knife/ssh_spec.rb +85 -39
  174. data/spec/unit/knife_spec.rb +2 -0
  175. data/spec/unit/lwrp_spec.rb +5 -3
  176. data/spec/unit/mixin/powershell_type_coercions_spec.rb +7 -6
  177. data/spec/unit/node/attribute_spec.rb +55 -24
  178. data/spec/unit/node/immutable_collections_spec.rb +28 -14
  179. data/spec/unit/node/vivid_mash_spec.rb +27 -10
  180. data/spec/unit/node_map_spec.rb +34 -0
  181. data/spec/unit/property_spec.rb +13 -13
  182. data/spec/unit/provider/group/dscl_spec.rb +14 -5
  183. data/spec/unit/provider/ifconfig_spec.rb +10 -3
  184. data/spec/unit/provider/remote_file/http_spec.rb +23 -19
  185. data/spec/unit/provider/service/solaris_smf_service_spec.rb +6 -5
  186. data/spec/unit/provider/user/dscl_spec.rb +26 -0
  187. data/spec/unit/provider/windows_task_spec.rb +148 -4
  188. data/spec/unit/provider_spec.rb +1 -1
  189. data/spec/unit/resource/apt_package_spec.rb +1 -1
  190. data/spec/unit/resource/bash_spec.rb +8 -10
  191. data/spec/unit/resource/batch_spec.rb +1 -1
  192. data/spec/unit/resource/cab_package_spec.rb +19 -1
  193. data/spec/unit/resource/chef_gem_spec.rb +3 -3
  194. data/spec/unit/resource/chocolatey_package_spec.rb +10 -10
  195. data/spec/unit/resource/conditional_spec.rb +2 -2
  196. data/spec/unit/resource/cookbook_file_spec.rb +24 -30
  197. data/spec/unit/resource/cron_spec.rb +79 -82
  198. data/spec/unit/resource/csh_spec.rb +8 -10
  199. data/spec/unit/resource/deploy_spec.rb +1 -1
  200. data/spec/unit/resource/directory_spec.rb +28 -31
  201. data/spec/unit/resource/dnf_package_spec.rb +9 -9
  202. data/spec/unit/resource/env_spec.rb +7 -7
  203. data/spec/unit/resource/erl_call_spec.rb +9 -9
  204. data/spec/unit/resource/execute_spec.rb +6 -6
  205. data/spec/unit/resource/file/verification_spec.rb +18 -4
  206. data/spec/unit/resource/file_spec.rb +53 -56
  207. data/spec/unit/resource/freebsd_package_spec.rb +7 -7
  208. data/spec/unit/resource/gem_package_spec.rb +1 -1
  209. data/spec/unit/resource/git_spec.rb +7 -9
  210. data/spec/unit/resource/group_spec.rb +60 -70
  211. data/spec/unit/resource/http_request_spec.rb +16 -19
  212. data/spec/unit/resource/ifconfig_spec.rb +3 -3
  213. data/spec/unit/resource/ips_package_spec.rb +3 -5
  214. data/spec/unit/resource/ksh_spec.rb +8 -10
  215. data/spec/unit/resource/launchd_spec.rb +17 -10
  216. data/spec/unit/resource/link_spec.rb +53 -53
  217. data/spec/unit/resource/log_spec.rb +24 -28
  218. data/spec/unit/resource/mdadm_spec.rb +42 -44
  219. data/spec/unit/resource/mount_spec.rb +97 -99
  220. data/spec/unit/resource/msu_package_spec.rb +14 -8
  221. data/spec/unit/resource/ohai_spec.rb +15 -17
  222. data/spec/unit/resource/openbsd_package_spec.rb +3 -3
  223. data/spec/unit/resource/osx_profile_spec.rb +7 -7
  224. data/spec/unit/resource/package_spec.rb +36 -40
  225. data/spec/unit/resource/perl_spec.rb +8 -11
  226. data/spec/unit/resource/portage_package_spec.rb +8 -10
  227. data/spec/unit/resource/powershell_package_spec.rb +9 -9
  228. data/spec/unit/resource/python_spec.rb +8 -11
  229. data/spec/unit/resource/reboot_spec.rb +50 -0
  230. data/spec/unit/resource/registry_key_spec.rb +84 -98
  231. data/spec/unit/resource/remote_directory_spec.rb +40 -42
  232. data/spec/unit/resource/remote_file_spec.rb +78 -80
  233. data/spec/unit/resource/route_spec.rb +42 -44
  234. data/spec/unit/resource/rpm_package_spec.rb +5 -7
  235. data/spec/unit/resource/ruby_block_spec.rb +14 -16
  236. data/spec/unit/resource/ruby_spec.rb +8 -12
  237. data/spec/unit/resource/scm_spec.rb +66 -69
  238. data/spec/unit/resource/script_spec.rb +1 -1
  239. data/spec/unit/resource/service_spec.rb +80 -83
  240. data/spec/unit/resource/smartos_package_spec.rb +5 -0
  241. data/spec/unit/resource/solaris_package_spec.rb +3 -5
  242. data/spec/unit/resource/subversion_spec.rb +18 -16
  243. data/spec/unit/resource/systemd_unit_spec.rb +50 -54
  244. data/spec/unit/resource/template_spec.rb +56 -61
  245. data/spec/unit/resource/user_spec.rb +47 -53
  246. data/spec/unit/resource/windows_package_spec.rb +1 -1
  247. data/spec/unit/resource/windows_path_spec.rb +11 -8
  248. data/spec/unit/resource/windows_task_spec.rb +129 -33
  249. data/spec/unit/resource/yum_package_spec.rb +1 -1
  250. data/spec/unit/resource/yum_repository_spec.rb +61 -8
  251. data/spec/unit/resource/zypper_repository_spec.rb +17 -18
  252. data/spec/unit/util/selinux_spec.rb +3 -6
  253. data/tasks/dependencies.rb +0 -5
  254. data/tasks/rspec.rb +1 -1
  255. metadata +6 -6
  256. data/acceptance/top-cookbooks/.kitchen.docker.yml +0 -13
  257. data/acceptance/top-cookbooks/.kitchen.git.yml +0 -11
@@ -99,7 +99,7 @@ class Chef
99
99
  if options.has_key?(:name_attribute)
100
100
  # If we have both name_attribute and name_property and they differ, raise an error
101
101
  if options.has_key?(:name_property)
102
- raise ArgumentError, "Cannot specify both name_property and name_attribute together on property #{self}."
102
+ raise ArgumentError, "name_attribute and name_property are functionally identical and both cannot be specified on a property at once. Use just one on property #{self}"
103
103
  end
104
104
  # replace name_property with name_attribute in place
105
105
  options = Hash[options.map { |k, v| k == :name_attribute ? [ :name_property, v ] : [ k, v ] }]
@@ -107,7 +107,7 @@ class Chef
107
107
  end
108
108
 
109
109
  if options.has_key?(:default) && options.has_key?(:name_property)
110
- raise ArgumentError, "Cannot specify both default and name_property/name_attribute together on property #{self}"
110
+ raise ArgumentError, "A property cannot be both a name_property/name_attribute and have a default value. Use one or the other on property #{self}"
111
111
  end
112
112
 
113
113
  # Recursively freeze the default if it isn't a lazy value.
@@ -361,7 +361,7 @@ class Chef
361
361
  end
362
362
 
363
363
  if value.nil? && required?
364
- raise Chef::Exceptions::ValidationFailed, "#{name} is required"
364
+ raise Chef::Exceptions::ValidationFailed, "#{name} is a required property"
365
365
  else
366
366
  value
367
367
  end
@@ -386,7 +386,7 @@ class Chef
386
386
  value = set_value(resource, input_to_stored_value(resource, value))
387
387
 
388
388
  if value.nil? && required?
389
- raise Chef::Exceptions::ValidationFailed, "#{name} is required"
389
+ raise Chef::Exceptions::ValidationFailed, "#{name} is a required property"
390
390
  else
391
391
  value
392
392
  end
@@ -457,7 +457,7 @@ class Chef
457
457
  # options.
458
458
  #
459
459
  # @param resource [Chef::Resource] The resource we're validating against
460
- # (to provide context for the validate).
460
+ # (to provide context for the validation).
461
461
  # @param value The value to validate.
462
462
  #
463
463
  # @raise Chef::Exceptions::ValidationFailed If the value is invalid for
@@ -514,18 +514,18 @@ class Chef
514
514
  # very confusing results.
515
515
  if property_redefines_method?
516
516
  resource_name = declared_in.respond_to?(:resource_name) ? declared_in.resource_name : declared_in
517
- raise ArgumentError, "Property `#{name}` of resource `#{resource_name}` overwrites an existing method."
517
+ raise ArgumentError, "Property `#{name}` of resource `#{resource_name}` overwrites an existing method. A different name should be used for this property."
518
518
  end
519
519
 
520
520
  # We prefer this form because the property name won't show up in the
521
521
  # stack trace if you use `define_method`.
522
522
  declared_in.class_eval <<-EOM, __FILE__, __LINE__ + 1
523
523
  def #{name}(value=NOT_PASSED)
524
- raise "Property `#{name}` of `\#{self}` was incorrectly passed a block. Possible property-resource collision. To call a resource named `#{name}` either rename the property or else use `declare_resource(:#{name}, ...)`" if block_given?
524
+ raise "Property `#{name}` of `\#{self}` was incorrectly passed a block. Possible property-resource collision. To call a resource named `#{name}` either rename the property or else use `declare_resource(:#{name}, ...)`" if block_given?
525
525
  self.class.properties[#{name.inspect}].call(self, value)
526
526
  end
527
527
  def #{name}=(value)
528
- raise "Property `#{name}` of `\#{self}` was incorrectly passed a block. Possible property-resource collision. To call a resource named `#{name}` either rename the property or else use `declare_resource(:#{name}, ...)`" if block_given?
528
+ raise "Property `#{name}` of `\#{self}` was incorrectly passed a block. Possible property-resource collision. To call a resource named `#{name}` either rename the property or else use `declare_resource(:#{name}, ...)`" if block_given?
529
529
  self.class.properties[#{name.inspect}].set(self, value)
530
530
  end
531
531
  EOM
@@ -250,7 +250,13 @@ class Chef
250
250
  properties_str = if new_resource.sensitive
251
251
  specified_properties.join(", ")
252
252
  else
253
- specified_properties.map { |p| "#{p}=#{new_resource.send(p).inspect}" }.join(", ")
253
+ specified_properties.map do |property|
254
+ "#{property}=" << if new_resource.class.properties[property].sensitive?
255
+ "(suppressed sensitive property)"
256
+ else
257
+ new_resource.send(property).inspect
258
+ end
259
+ end.join(", ")
254
260
  end
255
261
  Chef::Log.debug("Skipping update of #{new_resource}: has not changed any of the specified properties #{properties_str}.")
256
262
  return false
@@ -259,7 +265,7 @@ class Chef
259
265
  # Print the pretty green text and run the block
260
266
  property_size = modified.map { |p| p.size }.max
261
267
  modified.map! do |p|
262
- properties_str = if new_resource.sensitive
268
+ properties_str = if new_resource.sensitive || new_resource.class.properties[p].sensitive?
263
269
  "(suppressed sensitive property)"
264
270
  else
265
271
  "#{new_resource.send(p).inspect} (was #{current_resource.send(p).inspect})"
@@ -274,7 +280,7 @@ class Chef
274
280
  property_size = properties.map { |p| p.size }.max
275
281
  created = properties.map do |property|
276
282
  default = " (default value)" unless new_resource.property_is_set?(property)
277
- properties_str = if new_resource.sensitive
283
+ properties_str = if new_resource.sensitive || new_resource.class.properties[property].sensitive?
278
284
  "(suppressed sensitive property)"
279
285
  else
280
286
  new_resource.send(property).inspect
@@ -24,7 +24,7 @@ require "chef/log"
24
24
  class Chef
25
25
  class Provider
26
26
  class AptPreference < Chef::Provider
27
- provides :apt_preference, os: "linux", platform_family: "debian"
27
+ provides :apt_preference, platform_family: "debian"
28
28
 
29
29
  APT_PREFERENCE_DIR = "/etc/apt/preferences.d".freeze
30
30
 
@@ -27,7 +27,7 @@ class Chef
27
27
  class AptRepository < Chef::Provider
28
28
  include Chef::Mixin::ShellOut
29
29
 
30
- provides :apt_repository, os: "linux", platform_family: "debian"
30
+ provides :apt_repository, platform_family: "debian"
31
31
 
32
32
  LIST_APT_KEYS = "apt-key list".freeze
33
33
  LIST_APT_KEY_FINGERPRINTS = "apt-key adv --list-public-keys --with-fingerprint --with-colons".freeze
@@ -23,7 +23,7 @@ require "chef/dsl/declare_resource"
23
23
  class Chef
24
24
  class Provider
25
25
  class AptUpdate < Chef::Provider
26
- provides :apt_update, os: "linux", platform_family: "debian"
26
+ provides :apt_update, platform_family: "debian"
27
27
 
28
28
  APT_CONF_DIR = "/etc/apt/apt.conf.d"
29
29
  STAMP_DIR = "/var/lib/apt/periodic"
@@ -339,7 +339,7 @@ class Chef
339
339
  if tempfile
340
340
  new_resource.verify.each do |v|
341
341
  if ! v.verify(tempfile.path)
342
- raise Chef::Exceptions::ValidationFailed.new "Proposed content for #{new_resource.path} failed verification #{v}"
342
+ raise Chef::Exceptions::ValidationFailed.new "Proposed content for #{new_resource.path} failed verification #{new_resource.sensitive ? '[sensitive]' : v}"
343
343
  end
344
344
  end
345
345
  end
@@ -88,8 +88,12 @@ class Chef
88
88
 
89
89
  def gid_used?(gid)
90
90
  return false unless gid
91
- groups_gids = safe_dscl("list", "/Groups", "gid")
92
- !!( groups_gids =~ Regexp.new("#{Regexp.escape(gid.to_s)}\n") )
91
+ search_gids = safe_dscl("search", "/Groups", "PrimaryGroupID", gid.to_s)
92
+
93
+ # dscl -search should not return anything if the gid doesn't exist,
94
+ # but on the off-chance that it does, check whether the given gid is
95
+ # in the output.
96
+ !!(search_gids =~ /\b#{gid}\b/)
93
97
  end
94
98
 
95
99
  def set_gid
@@ -23,20 +23,14 @@ require "chef/resource/file"
23
23
  require "chef/exceptions"
24
24
  require "erb"
25
25
 
26
- # Recipe example:
27
- #
28
- # int = {Hash with your network settings...}
29
- #
30
- # ifconfig int['ip'] do
31
- # ignore_failure true
32
- # device int['dev']
33
- # mask int['mask']
34
- # gateway int['gateway']
35
- # mtu int['mtu']
36
- # end
37
-
38
26
  class Chef
39
27
  class Provider
28
+ # use the ifconfig resource to manage interfaces on *nix systems
29
+ #
30
+ # @example set a static ip on eth1
31
+ # ifconfig '33.33.33.80' do
32
+ # device 'eth1'
33
+ # end
40
34
  class Ifconfig < Chef::Provider
41
35
  provides :ifconfig
42
36
 
@@ -57,30 +51,98 @@ class Chef
57
51
  @ifconfig_success = true
58
52
  @interfaces = {}
59
53
 
60
- @status = shell_out("ifconfig")
61
- @status.stdout.each_line do |line|
62
- if !line[0..9].strip.empty?
63
- @int_name = line[0..9].strip
64
- @interfaces[@int_name] = { "hwaddr" => (line =~ /(HWaddr)/ ? ($') : "nil").strip.chomp }
65
- else
66
- @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /inet addr:/
67
- @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Bcast:/
68
- @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Mask:/
69
- @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /MTU:/
70
- @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Metric:/
54
+ @ifconfig_version = nil
55
+
56
+ @net_tools_version = shell_out("ifconfig --version")
57
+ @net_tools_version.stderr.each_line do |line|
58
+ if line =~ /^net-tools (\d+.\d+)/
59
+ @ifconfig_version = line.match(/^net-tools (\d+.\d+)/)[1]
71
60
  end
61
+ end
62
+
63
+ if @ifconfig_version.nil?
64
+ raise "net-tools not found - this is required for ifconfig"
65
+ elsif @ifconfig_version.to_f < 2.0
66
+ # Example output for 1.60 is as follows: (sanitized but format intact)
67
+ # eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
68
+ # inet addr:192.168.1.1 Bcast:192.168.0.1 Mask:255.255.248.0
69
+ # inet6 addr: 0000::00:0000:0000:0000/64 Scope:Link
70
+ # UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
71
+ # RX packets:65158911 errors:0 dropped:0 overruns:0 frame:0
72
+ # TX packets:41723949 errors:0 dropped:0 overruns:0 carrier:0
73
+ # collisions:0 txqueuelen:1000
74
+ # RX bytes:42664658792 (39.7 GiB) TX bytes:52722603938 (49.1 GiB)
75
+ # Interrupt:30
76
+ @status = shell_out("ifconfig")
77
+ @status.stdout.each_line do |line|
78
+ if !line[0..9].strip.empty?
79
+ @int_name = line[0..9].strip
80
+ @interfaces[@int_name] = { "hwaddr" => (line =~ /(HWaddr)/ ? ($') : "nil").strip.chomp }
81
+ else
82
+ @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /inet addr:/
83
+ @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Bcast:/
84
+ @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Mask:/
85
+ @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /MTU:/
86
+ @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Metric:/
87
+ end
72
88
 
73
- next unless @interfaces.key?(new_resource.device)
74
- @interface = @interfaces.fetch(new_resource.device)
75
-
76
- current_resource.target(new_resource.target)
77
- current_resource.device(new_resource.device)
78
- current_resource.inet_addr(@interface["inet_addr"])
79
- current_resource.hwaddr(@interface["hwaddr"])
80
- current_resource.bcast(@interface["bcast"])
81
- current_resource.mask(@interface["mask"])
82
- current_resource.mtu(@interface["mtu"])
83
- current_resource.metric(@interface["metric"])
89
+ next unless @interfaces.key?(new_resource.device)
90
+ @interface = @interfaces.fetch(new_resource.device)
91
+
92
+ current_resource.target(new_resource.target)
93
+ current_resource.device(new_resource.device)
94
+ current_resource.inet_addr(@interface["inet_addr"])
95
+ current_resource.hwaddr(@interface["hwaddr"])
96
+ current_resource.bcast(@interface["bcast"])
97
+ current_resource.mask(@interface["mask"])
98
+ current_resource.mtu(@interface["mtu"])
99
+ current_resource.metric(@interface["metric"])
100
+ end
101
+ elsif @ifconfig_version.to_f >= 2.0
102
+ # Example output for 2.10-alpha is as follows: (sanitized but format intact)
103
+ # eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
104
+ # inet 192.168.1.1 netmask 255.255.240.0 broadcast 192.168.0.1
105
+ # inet6 0000::0000:000:0000:0000 prefixlen 64 scopeid 0x20<link>
106
+ # ether 00:00:00:00:00:00 txqueuelen 1000 (Ethernet)
107
+ # RX packets 2383836 bytes 1642630840 (1.5 GiB)
108
+ # RX errors 0 dropped 0 overruns 0 frame 0
109
+ # TX packets 1244218 bytes 977339327 (932.0 MiB)
110
+ # TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
111
+ @status = shell_out("ifconfig")
112
+ @status.stdout.each_line do |line|
113
+ addr_regex = /^(\w+):?(\d*):?\ .+$/
114
+ if line =~ addr_regex
115
+ if line.match(addr_regex).nil?
116
+ @int_name = "nil"
117
+ elsif line.match(addr_regex)[2] == ""
118
+ @int_name = line.match(addr_regex)[1]
119
+ @interfaces[@int_name] = Hash.new
120
+ @interfaces[@int_name]["mtu"] = (line =~ /mtu (\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /mtu/ && @interfaces[@int_name]["mtu"].nil?
121
+ else
122
+ @int_name = "#{line.match(addr_regex)[1]}:#{line.match(addr_regex)[2]}"
123
+ @interfaces[@int_name] = Hash.new
124
+ @interfaces[@int_name]["mtu"] = (line =~ /mtu (\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /mtu/ && @interfaces[@int_name]["mtu"].nil?
125
+ end
126
+ else
127
+ @interfaces[@int_name]["inet_addr"] = (line =~ /inet (\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /inet/ && @interfaces[@int_name]["inet_addr"].nil?
128
+ @interfaces[@int_name]["bcast"] = (line =~ /broadcast (\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /broadcast/ && @interfaces[@int_name]["bcast"].nil?
129
+ @interfaces[@int_name]["mask"] = (line =~ /netmask (\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /netmask/ && @interfaces[@int_name]["mask"].nil?
130
+ @interfaces[@int_name]["hwaddr"] = (line =~ /ether (\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /ether/ && @interfaces[@int_name]["hwaddr"].nil?
131
+ @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Metric:/ && @interfaces[@int_name]["metric"].nil?
132
+ end
133
+
134
+ next unless @interfaces.key?(new_resource.device)
135
+ @interface = @interfaces.fetch(new_resource.device)
136
+
137
+ current_resource.target(new_resource.target)
138
+ current_resource.device(new_resource.device)
139
+ current_resource.inet_addr(@interface["inet_addr"])
140
+ current_resource.hwaddr(@interface["hwaddr"])
141
+ current_resource.bcast(@interface["bcast"])
142
+ current_resource.mask(@interface["mask"])
143
+ current_resource.mtu(@interface["mtu"])
144
+ current_resource.metric(@interface["metric"])
145
+ end
84
146
  end
85
147
  current_resource
86
148
  end
@@ -17,7 +17,6 @@
17
17
  #
18
18
 
19
19
  require "chef/provider"
20
- require "chef/resource/launchd"
21
20
  require "chef/resource/file"
22
21
  require "chef/resource/cookbook_file"
23
22
  require "chef/resource/macosx_service"
@@ -17,37 +17,27 @@
17
17
  #
18
18
 
19
19
  class Chef
20
-
21
20
  class Provider
22
-
23
21
  class Log
24
-
25
- # Chef log provider, allows logging to chef's logs from recipes
22
+ # Chef log provider, allows logging to chef's logs
26
23
  class ChefLog < Chef::Provider
27
-
28
24
  provides :log
29
25
 
30
26
  # No concept of a 'current' resource for logs, this is a no-op
31
27
  #
32
- # === Return
33
- # true:: Always return true
28
+ # @return [true] Always returns true
34
29
  def load_current_resource
35
30
  true
36
31
  end
37
32
 
38
33
  # Write the log to Chef's log
39
34
  #
40
- # === Return
41
- # true:: Always return true
35
+ # @return [true] Always returns true
42
36
  def action_write
43
37
  Chef::Log.send(new_resource.level, new_resource.message)
44
38
  new_resource.updated_by_last_action(true) if Chef::Config[:count_log_resource_updates]
45
39
  end
46
-
47
40
  end
48
-
49
41
  end
50
-
51
42
  end
52
-
53
43
  end
@@ -148,7 +148,7 @@ class Chef
148
148
  @available_version[index]
149
149
  end
150
150
 
151
- # @returns Array<Version>
151
+ # @return [Array<Version>]
152
152
  def installed_version(index)
153
153
  @installed_version ||= []
154
154
  @installed_version[index] ||= if new_resource.source
@@ -3,7 +3,7 @@
3
3
  # Bryan McLellan (btm@loftninjas.org)
4
4
  # Matthew Landauer (matthew@openaustralia.org)
5
5
  # Ben Rockwood (benr@joyent.com)
6
- # Copyright:: Copyright 2009-2016, Bryan McLellan, Matthew Landauer
6
+ # Copyright:: Copyright 2009-2018, Bryan McLellan, Matthew Landauer
7
7
  # License:: Apache License, Version 2.0
8
8
  #
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,7 +30,7 @@ class Chef
30
30
  attr_accessor :is_virtual_package
31
31
 
32
32
  provides :package, platform: "smartos"
33
- provides :smartos_package, os: "solaris2", platform_family: "smartos"
33
+ provides :smartos_package, platform_family: "smartos"
34
34
 
35
35
  def load_current_resource
36
36
  Chef::Log.debug("#{new_resource} loading current resource")
@@ -21,9 +21,19 @@ require "chef/provider"
21
21
 
22
22
  class Chef
23
23
  class Provider
24
+ # Use the reboot resource to reboot a node, a necessary step with some
25
+ # installations on certain platforms. This resource is supported for use on
26
+ # the Microsoft Windows, macOS, and Linux platforms.
27
+ #
28
+ # In using this resource via notifications, it's important to *only* use
29
+ # immediate notifications. Delayed notifications produce unintuitive and
30
+ # probably undesired results.
31
+ #
32
+ # @since 12.0.0
24
33
  class Reboot < Chef::Provider
25
34
  provides :reboot
26
35
 
36
+ # @return [void]
27
37
  def load_current_resource
28
38
  @current_resource ||= Chef::Resource::Reboot.new(new_resource.name)
29
39
  current_resource.reason(new_resource.reason)
@@ -31,6 +41,8 @@ class Chef
31
41
  current_resource
32
42
  end
33
43
 
44
+ # add a reboot to the node run_context
45
+ # @return [void]
34
46
  def request_reboot
35
47
  node.run_context.request_reboot(
36
48
  :delay_mins => new_resource.delay_mins,
@@ -153,7 +153,7 @@ class Chef
153
153
  #
154
154
  # FIXME: it should do breadth-first, see CHEF-5080 (please use a performant sort)
155
155
  #
156
- # @return Array<String> The list of files to transfer
156
+ # @return [Array<String>] The list of files to transfer
157
157
  # @api private
158
158
  #
159
159
  def files_to_transfer
@@ -61,12 +61,13 @@ class Chef
61
61
 
62
62
  def fetch
63
63
  http = Chef::HTTP::Simple.new(uri, http_client_opts)
64
+ tempfile = Chef::FileContentManagement::Tempfile.new(@new_resource).tempfile
64
65
  if want_progress?
65
- tempfile = http.streaming_request_with_progress(uri, headers) do |size, total|
66
+ tempfile = http.streaming_request_with_progress(uri, headers, tempfile) do |size, total|
66
67
  events.resource_update_progress(new_resource, size, total, progress_interval)
67
68
  end
68
69
  else
69
- tempfile = http.streaming_request(uri, headers)
70
+ tempfile = http.streaming_request(uri, headers, tempfile)
70
71
  end
71
72
  if tempfile
72
73
  update_cache_control_data(tempfile, http.last_response)
@@ -31,7 +31,7 @@ class Chef
31
31
  super
32
32
  @init_command = "/usr/sbin/svcadm"
33
33
  @status_command = "/bin/svcs"
34
- @maintenace = false
34
+ @maintenance = false
35
35
  end
36
36
 
37
37
  def load_current_resource
@@ -54,6 +54,8 @@ class Chef
54
54
  end
55
55
 
56
56
  def enable_service
57
+ # Running service status to update maintenance status to invoke svcadm clear
58
+ service_status
57
59
  shell_out!(default_init_command, "clear", @new_resource.service_name) if @maintenance
58
60
  enable_flags = [ "-s", @new_resource.options ].flatten.compact
59
61
  shell_out!(default_init_command, "enable", *enable_flags, @new_resource.service_name)
@@ -93,6 +95,9 @@ class Chef
93
95
  # dependency require_all/error svc:/milestone/multi-user:default (online)
94
96
  # $
95
97
 
98
+ # Set the default value for maintenance
99
+ @maintenance = false
100
+
96
101
  # load output into hash
97
102
  status = {}
98
103
  cmd.stdout.each_line do |line|
@@ -101,7 +106,6 @@ class Chef
101
106
  end
102
107
 
103
108
  # check service state
104
- @maintenance = false
105
109
  case status["state"]
106
110
  when "online"
107
111
  @current_resource.enabled(true)