chef 17.1.35 → 17.2.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/lib/chef/action_collection.rb +6 -26
  4. data/lib/chef/application.rb +1 -1
  5. data/lib/chef/application/base.rb +15 -0
  6. data/lib/chef/client.rb +6 -0
  7. data/lib/chef/cookbook_version.rb +26 -4
  8. data/lib/chef/data_bag.rb +2 -1
  9. data/lib/chef/data_bag_item.rb +2 -1
  10. data/lib/chef/data_collector.rb +0 -1
  11. data/lib/chef/data_collector/run_end_message.rb +1 -1
  12. data/lib/chef/deprecated.rb +4 -0
  13. data/lib/chef/event_dispatch/base.rb +2 -1
  14. data/lib/chef/exceptions.rb +3 -0
  15. data/lib/chef/handler.rb +46 -8
  16. data/lib/chef/handler/slow_report.rb +66 -0
  17. data/lib/chef/node.rb +20 -19
  18. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  19. data/lib/chef/provider/zypper_repository.rb +27 -31
  20. data/lib/chef/resource/alternatives.rb +5 -5
  21. data/lib/chef/resource/apt_preference.rb +2 -2
  22. data/lib/chef/resource/apt_repository.rb +2 -2
  23. data/lib/chef/resource/apt_update.rb +4 -4
  24. data/lib/chef/resource/build_essential.rb +1 -1
  25. data/lib/chef/resource/chef_client_config.rb +3 -3
  26. data/lib/chef/resource/chef_client_cron.rb +2 -2
  27. data/lib/chef/resource/chef_client_launchd.rb +2 -2
  28. data/lib/chef/resource/chef_client_scheduled_task.rb +14 -14
  29. data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
  30. data/lib/chef/resource/chef_handler.rb +2 -2
  31. data/lib/chef/resource/chef_sleep.rb +1 -1
  32. data/lib/chef/resource/chocolatey_feature.rb +2 -2
  33. data/lib/chef/resource/chocolatey_source.rb +1 -1
  34. data/lib/chef/resource/cron/cron_d.rb +4 -6
  35. data/lib/chef/resource/cron_access.rb +1 -1
  36. data/lib/chef/resource/dmg_package.rb +1 -1
  37. data/lib/chef/resource/group.rb +4 -4
  38. data/lib/chef/resource/homebrew_cask.rb +17 -6
  39. data/lib/chef/resource/homebrew_package.rb +1 -1
  40. data/lib/chef/resource/homebrew_tap.rb +4 -3
  41. data/lib/chef/resource/homebrew_update.rb +2 -2
  42. data/lib/chef/resource/hostname.rb +49 -7
  43. data/lib/chef/resource/inspec_waiver_file_entry.rb +6 -5
  44. data/lib/chef/resource/kernel_module.rb +6 -6
  45. data/lib/chef/resource/locale.rb +1 -1
  46. data/lib/chef/resource/macos_userdefaults.rb +2 -2
  47. data/lib/chef/resource/ohai_hint.rb +2 -6
  48. data/lib/chef/resource/openbsd_package.rb +17 -0
  49. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  50. data/lib/chef/resource/openssl_ec_private_key.rb +1 -3
  51. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  52. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -3
  53. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  54. data/lib/chef/resource/openssl_x509_certificate.rb +1 -4
  55. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  56. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  57. data/lib/chef/resource/osx_profile.rb +3 -3
  58. data/lib/chef/resource/plist.rb +1 -1
  59. data/lib/chef/resource/powershell_package_source.rb +2 -4
  60. data/lib/chef/resource/reboot.rb +38 -9
  61. data/lib/chef/resource/remote_directory.rb +2 -2
  62. data/lib/chef/resource/rhsm_errata.rb +0 -2
  63. data/lib/chef/resource/rhsm_errata_level.rb +1 -5
  64. data/lib/chef/resource/rhsm_repo.rb +15 -0
  65. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  66. data/lib/chef/resource/sudo.rb +2 -6
  67. data/lib/chef/resource/swap_file.rb +2 -6
  68. data/lib/chef/resource/sysctl.rb +2 -2
  69. data/lib/chef/resource/timezone.rb +1 -1
  70. data/lib/chef/resource/user_ulimit.rb +2 -2
  71. data/lib/chef/resource/windows_ad_join.rb +2 -2
  72. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  73. data/lib/chef/resource/windows_auto_run.rb +2 -2
  74. data/lib/chef/resource/windows_certificate.rb +1 -1
  75. data/lib/chef/resource/windows_dfs_folder.rb +2 -2
  76. data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
  77. data/lib/chef/resource/windows_dns_record.rb +2 -2
  78. data/lib/chef/resource/windows_dns_zone.rb +2 -2
  79. data/lib/chef/resource/windows_feature.rb +3 -3
  80. data/lib/chef/resource/windows_feature_dism.rb +3 -5
  81. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  82. data/lib/chef/resource/windows_firewall_profile.rb +2 -2
  83. data/lib/chef/resource/windows_firewall_rule.rb +20 -6
  84. data/lib/chef/resource/windows_font.rb +1 -1
  85. data/lib/chef/resource/windows_pagefile.rb +103 -64
  86. data/lib/chef/resource/windows_path.rb +2 -2
  87. data/lib/chef/resource/windows_printer.rb +5 -20
  88. data/lib/chef/resource/windows_printer_port.rb +48 -65
  89. data/lib/chef/resource/windows_security_policy.rb +2 -2
  90. data/lib/chef/resource/windows_share.rb +2 -2
  91. data/lib/chef/resource/windows_shortcut.rb +1 -1
  92. data/lib/chef/resource/windows_task.rb +1 -1
  93. data/lib/chef/resource/windows_uac.rb +3 -5
  94. data/lib/chef/resource/windows_user_privilege.rb +2 -2
  95. data/lib/chef/resource/windows_workgroup.rb +2 -2
  96. data/lib/chef/resource/yum_package.rb +10 -10
  97. data/lib/chef/resource/zypper_package.rb +4 -4
  98. data/lib/chef/resource/zypper_repository.rb +28 -8
  99. data/lib/chef/resource_reporter.rb +0 -1
  100. data/lib/chef/version.rb +1 -1
  101. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  102. data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
  103. data/spec/unit/cookbook_version_spec.rb +52 -0
  104. data/spec/unit/data_bag_item_spec.rb +2 -2
  105. data/spec/unit/data_bag_spec.rb +1 -1
  106. data/spec/unit/data_collector_spec.rb +47 -1
  107. data/spec/unit/handler_spec.rb +8 -2
  108. data/spec/unit/provider/zypper_repository_spec.rb +3 -10
  109. data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
  110. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  111. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  112. metadata +9 -6
@@ -194,7 +194,7 @@ class Chef
194
194
 
195
195
  # This action needs to find an rb file that presumably contains the indicated class in it and the
196
196
  # load that file. It then instantiates that class by name and registers it as a handler.
197
- action :enable, description: "Enables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node" do
197
+ action :enable, description: "Enables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node." do
198
198
  class_name = new_resource.class_name
199
199
  new_resource.type.each do |type, enable|
200
200
  next unless enable
@@ -216,7 +216,7 @@ class Chef
216
216
  end
217
217
  end
218
218
 
219
- action :disable, description: "Disables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node" do
219
+ action :disable, description: "Disables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node." do
220
220
  new_resource.type.each_key do |type|
221
221
  unregister_handler(type, new_resource.class_name)
222
222
  end
@@ -62,7 +62,7 @@ class Chef
62
62
  coerce: proc { |s| Integer(s) },
63
63
  name_property: true
64
64
 
65
- action :sleep, description: "Pause the #{ChefUtils::Dist::Infra::PRODUCT} run for a specified number of seconds" do
65
+ action :sleep, description: "Pause the #{ChefUtils::Dist::Infra::PRODUCT} run for a specified number of seconds." do
66
66
  converge_by("sleep #{new_resource.seconds} seconds") do
67
67
  sleep(new_resource.seconds)
68
68
  end
@@ -65,7 +65,7 @@ class Chef
65
65
  data ? data.attribute("enabled").to_s : nil # REXML just returns nil if it can't find anything so avoid an undefined method error
66
66
  end
67
67
 
68
- action :enable, description: "Enables a named Chocolatey feature" do
68
+ action :enable, description: "Enables a named Chocolatey feature." do
69
69
  if current_resource.feature_state != true
70
70
  converge_by("enable Chocolatey feature '#{new_resource.feature_name}'") do
71
71
  shell_out!(choco_cmd("enable"))
@@ -73,7 +73,7 @@ class Chef
73
73
  end
74
74
  end
75
75
 
76
- action :disable, description: "Disables a named Chocolatey feature" do
76
+ action :disable, description: "Disables a named Chocolatey feature." do
77
77
  if current_resource.feature_state == true
78
78
  converge_by("disable Chocolatey feature '#{new_resource.feature_name}'") do
79
79
  shell_out!(choco_cmd("disable"))
@@ -98,7 +98,7 @@ class Chef
98
98
  end
99
99
  end
100
100
 
101
- action :remove, description: "Removes a Chocolatey source" do
101
+ action :remove, description: "Removes a Chocolatey source." do
102
102
 
103
103
  if current_resource
104
104
  converge_by("remove Chocolatey source '#{new_resource.source_name}'") do
@@ -29,7 +29,7 @@ class Chef
29
29
  provides :cron_d
30
30
 
31
31
  introduced "14.4"
32
- description "Use the **cron_d** resource to manage cron job files in the /etc/cron.d directory. This is similar to the 'cron' resource, but it does not use the monolithic /etc/crontab file."
32
+ description "Use the **cron_d** resource to manage cron job files in the `/etc/cron.d` directory. This is similar to the 'cron' resource, but it does not use the monolithic /etc/crontab file."
33
33
  examples <<~DOC
34
34
  **Run a program on the fifth hour of the day**
35
35
 
@@ -116,19 +116,17 @@ class Chef
116
116
  end
117
117
 
118
118
  action :create do
119
- description "Add a cron definition file to /etc/cron.d."
119
+ description "Add a cron definition file to `/etc/cron.d`."
120
120
 
121
121
  create_template(:create)
122
122
  end
123
123
 
124
- action :create_if_missing do
125
- description "Add a cron definition file to /etc/cron.d, but do not update an existing file."
124
+ action :create_if_missing, description: "Add a cron definition file to `/etc/cron.d`, but do not update an existing file." do
126
125
 
127
126
  create_template(:create_if_missing)
128
127
  end
129
128
 
130
- action :delete do
131
- description "Remove a cron definition file from /etc/cron.d if it exists."
129
+ action :delete, description: "Remove a cron definition file from `/etc/cron.d` if it exists." do
132
130
 
133
131
  # cleanup the legacy named job if it exists
134
132
  file "legacy named cron.d file" do
@@ -64,7 +64,7 @@ class Chef
64
64
  "default" => "/etc",
65
65
  }.freeze
66
66
 
67
- action :allow, description: "Add the user to the cron.allow file" do
67
+ action :allow, description: "Add the user to the cron.allow file." do
68
68
  allow_path = ::File.join(value_for_platform_family(CRON_PATHS), "cron.allow")
69
69
 
70
70
  with_run_context :root do
@@ -121,7 +121,7 @@ class Chef
121
121
  end
122
122
  end
123
123
 
124
- action :install, description: "Installs the application" do
124
+ action :install, description: "Installs the application." do
125
125
  if current_resource.nil?
126
126
  if new_resource.source
127
127
  remote_file dmg_file do
@@ -43,16 +43,16 @@ class Chef
43
43
 
44
44
  property :excluded_members, [String, Array], default: [],
45
45
  coerce: proc { |arg| arg.is_a?(String) ? arg.split(/\s*,\s*/) : arg },
46
- description: "Remove users from a group. May only be used when append is set to true."
46
+ description: "Remove users from a group. May only be used when `append` is set to `true`."
47
47
 
48
48
  property :append, [ TrueClass, FalseClass ], default: false,
49
- description: "How members should be appended and/or removed from a group. When true, members are appended and excluded_members are removed. When false, group members are reset to the value of the members property."
49
+ description: "How members should be appended and/or removed from a group. When true, `members` are appended and `excluded_members` are removed. When `false`, group members are reset to the value of the `members` property."
50
50
 
51
51
  property :system, [ TrueClass, FalseClass ], default: false,
52
- description: "Set if a group belongs to a system group. Set to true if the group belongs to a system group."
52
+ description: "Set to `true` if the group belongs to a system group."
53
53
 
54
54
  property :non_unique, [ TrueClass, FalseClass ], default: false,
55
- description: "Allow gid duplication. May only be used with the Groupadd provider."
55
+ description: "Allow gid duplication. May only be used with the `Groupadd` user resource provider."
56
56
 
57
57
  property :comment, String,
58
58
  introduced: "14.9",
@@ -51,10 +51,16 @@ class Chef
51
51
 
52
52
  property :owner, [String, Integer],
53
53
  description: "The owner of the Homebrew installation.",
54
- default: lazy { find_homebrew_username }
55
-
56
- action :install, description: "Install an application packaged as a Homebrew cask" do
57
- homebrew_tap "homebrew/cask" if new_resource.install_cask
54
+ default: lazy { find_homebrew_username },
55
+ default_description: "Calculated default username"\
56
+
57
+ action :install, description: "Install an application that is packaged as a Homebrew cask." do
58
+ if new_resource.install_cask
59
+ homebrew_tap "homebrew/cask" do
60
+ homebrew_path new_resource.homebrew_path
61
+ owner new_resource.owner
62
+ end
63
+ end
58
64
 
59
65
  unless casked?
60
66
  converge_by("install cask #{new_resource.cask_name} #{new_resource.options}") do
@@ -66,8 +72,13 @@ class Chef
66
72
  end
67
73
  end
68
74
 
69
- action :remove, description: "Remove an application packaged as a Homebrew cask" do
70
- homebrew_tap "homebrew/cask" if new_resource.install_cask
75
+ action :remove, description: "Remove an application that is packaged as a Homebrew cask." do
76
+ if new_resource.install_cask
77
+ homebrew_tap "homebrew/cask" do
78
+ homebrew_path new_resource.homebrew_path
79
+ owner new_resource.owner
80
+ end
81
+ end
71
82
 
72
83
  if casked?
73
84
  converge_by("uninstall cask #{new_resource.cask_name}") do
@@ -62,7 +62,7 @@ class Chef
62
62
  DOC
63
63
 
64
64
  property :homebrew_user, [ String, Integer ],
65
- description: "The name or uid of the Homebrew owner to be used by #{ChefUtils::Dist::Infra::PRODUCT} when executing a command."
65
+ description: "The name or uid of the Homebrew owner to be used by #{ChefUtils::Dist::Infra::PRODUCT} when executing a command.\n\n#{ChefUtils::Dist::Infra::PRODUCT}, by default, will attempt to execute a Homebrew command as the owner of the `/usr/local/bin/brew` executable. If that executable does not exist, #{ChefUtils::Dist::Infra::PRODUCT} will attempt to find the user by executing `which brew`. If that executable cannot be found, #{ChefUtils::Dist::Infra::PRODUCT} will print an error message: `Could not find the 'brew' executable in /usr/local/bin or anywhere on the path.`.\n\nSet this property to specify the Homebrew owner for situations where Chef Infra Client cannot automatically detect the correct owner.'"
66
66
 
67
67
  end
68
68
  end
@@ -51,9 +51,10 @@ class Chef
51
51
 
52
52
  property :owner, String,
53
53
  description: "The owner of the Homebrew installation.",
54
- default: lazy { find_homebrew_username }
54
+ default: lazy { find_homebrew_username },
55
+ default_description: "Calculated default username"
55
56
 
56
- action :tap, description: "Add a Homebrew tap" do
57
+ action :tap, description: "Add a Homebrew tap." do
57
58
  unless tapped?(new_resource.tap_name)
58
59
  converge_by("tap #{new_resource.tap_name}") do
59
60
  shell_out!("#{new_resource.homebrew_path} tap #{new_resource.full ? "--full" : ""} #{new_resource.tap_name} #{new_resource.url || ""}",
@@ -64,7 +65,7 @@ class Chef
64
65
  end
65
66
  end
66
67
 
67
- action :untap, description: "Remove a Homebrew tap" do
68
+ action :untap, description: "Remove a Homebrew tap." do
68
69
  if tapped?(new_resource.tap_name)
69
70
  converge_by("untap #{new_resource.tap_name}") do
70
71
  shell_out!("#{new_resource.homebrew_path} untap #{new_resource.tap_name}",
@@ -88,7 +88,7 @@ class Chef
88
88
  end
89
89
  end
90
90
 
91
- action :periodic do
91
+ action :periodic, description: "Run a periodic update based on the frequency property." do
92
92
  return unless macos?
93
93
 
94
94
  unless brew_up_to_date?
@@ -98,7 +98,7 @@ class Chef
98
98
  end
99
99
  end
100
100
 
101
- action :update do
101
+ action :update, description: "Run an immediate update." do
102
102
  return unless macos?
103
103
 
104
104
  converge_by "force update new lists of packages" do
@@ -44,6 +44,24 @@ class Chef
44
44
  ipaddress '198.51.100.2'
45
45
  end
46
46
  ```
47
+
48
+ **Change the hostname of a Windows, Non-Domain joined node**:
49
+
50
+ ```ruby
51
+ hostname 'renaming a workgroup computer' do
52
+ hostname 'Foo'
53
+ end
54
+ ```
55
+
56
+ **Change the hostname of a Windows, Domain-joined node (new in 17.2)**:
57
+
58
+ ```ruby
59
+ hostname 'renaming a domain-joined computer' do
60
+ hostname 'Foo'
61
+ domain_user "Domain\\Someone"
62
+ domain_password 'SomePassword'
63
+ end
64
+ ```
47
65
  DOC
48
66
 
49
67
  property :hostname, String,
@@ -71,6 +89,15 @@ class Chef
71
89
  description: "Determines whether or not Windows should be reboot after changing the hostname, as this is required for the change to take effect.",
72
90
  default: true
73
91
 
92
+ property :domain_user, String,
93
+ description: "A domain account specified in the form of DOMAIN\\user used when renaming a domain-joined device",
94
+ introduced: "17.2"
95
+
96
+ property :domain_password, String,
97
+ description: "The password to accompany the domain_user parameter",
98
+ sensitive: true,
99
+ introduced: "17.2"
100
+
74
101
  action_class do
75
102
  def append_replacing_matching_lines(path, regex, string)
76
103
  text = IO.read(path).split("\n")
@@ -103,7 +130,11 @@ class Chef
103
130
  end
104
131
  end
105
132
 
106
- action :set, description: "Sets the node's hostname" do
133
+ def is_domain_joined?
134
+ powershell_exec!("(Get-CIMInstance -Class Win32_ComputerSystem).PartofDomain").result
135
+ end
136
+
137
+ action :set, description: "Sets the node's hostname." do
107
138
  if !windows?
108
139
  ohai "reload hostname" do
109
140
  plugin "hostname"
@@ -243,13 +274,24 @@ class Chef
243
274
  end
244
275
 
245
276
  unless Socket.gethostbyname(Socket.gethostname).first == new_resource.hostname
246
- converge_by "set hostname to #{new_resource.hostname}" do
247
- powershell_exec! <<~EOH
248
- $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
249
- $sysInfo.Rename("#{new_resource.hostname}")
250
- EOH
277
+ if is_domain_joined?
278
+ if new_resource.domain_user.nil? || new_resource.domain_password.nil?
279
+ raise "The `domain_user` and `domain_password` properties are required to change the hostname of a domain-connected Windows system."
280
+ else
281
+ converge_by "set hostname to #{new_resource.hostname}" do
282
+ powershell_exec! <<~EOH
283
+ $user = #{new_resource.domain_user}
284
+ $secure_password = #{new_resource.domain_password} | Convertto-SecureString -AsPlainText -Force
285
+ $Credentials = New-Object System.Management.Automation.PSCredential -Argumentlist ($user, $secure_password)
286
+ Rename-Computer -NewName #{new_resource.hostname} -DomainCredential $Credentials
287
+ EOH
288
+ end
289
+ end
290
+ else
291
+ converge_by "set hostname to #{new_resource.hostname}" do
292
+ powershell_exec!("Rename-Computer -NewName #{new_resource.hostname}")
293
+ end
251
294
  end
252
-
253
295
  # reboot because $windows
254
296
  reboot "setting hostname" do
255
297
  reason "#{ChefUtils::Dist::Infra::PRODUCT} updated system hostname"
@@ -16,8 +16,9 @@
16
16
  #
17
17
 
18
18
  require_relative "../resource"
19
- require "yaml"
19
+ autoload :YAML, "yaml"
20
20
  require "date"
21
+ require "chef-utils/dist" unless defined?(ChefUtils::Dist)
21
22
 
22
23
  class Chef
23
24
  class Resource
@@ -35,7 +36,7 @@ class Chef
35
36
  file_path 'C:\\chef\\inspec_waiver_file.yml'
36
37
  control 'my_inspec_control_01'
37
38
  run_test false
38
- justification "The subject of this control is not managed by Chef on the systems in policy group \#{node['policy_group']}"
39
+ justification "The subject of this control is not managed by #{ChefUtils::Dist::Infra::PRODUCT} on the systems in policy group \#{node['policy_group']}"
39
40
  expiration '2022-01-01'
40
41
  action :add
41
42
  end
@@ -45,7 +46,7 @@ class Chef
45
46
 
46
47
  ```ruby
47
48
  inspec_waiver_file_entry 'my_inspec_control_01' do
48
- justification "The subject of this control is not managed by Chef on the systems in policy group \#{node['policy_group']}"
49
+ justification "The subject of this control is not managed by #{ChefUtils::Dist::Infra::PRODUCT} on the systems in policy group \#{node['policy_group']}"
49
50
  action :add
50
51
  end
51
52
  ```
@@ -110,7 +111,7 @@ class Chef
110
111
 
111
112
  file "Update Waiver File #{new_resource.file_path} to update waiver for control #{new_resource.control}" do
112
113
  path new_resource.file_path
113
- content waiver_hash.to_yaml
114
+ content ::YAML.dump(waiver_hash)
114
115
  backup new_resource.backup
115
116
  action :create
116
117
  end
@@ -125,7 +126,7 @@ class Chef
125
126
  waiver_hash = waiver_hash.sort.to_h
126
127
  file "Update Waiver File #{new_resource.file_path} to remove waiver for control #{new_resource.control}" do
127
128
  path new_resource.file_path
128
- content waiver_hash.to_yaml
129
+ content ::YAML.dump(waiver_hash)
129
130
  backup new_resource.backup
130
131
  action :create
131
132
  end
@@ -93,7 +93,7 @@ class Chef
93
93
  description: "The modprobe.d directory.",
94
94
  default: "/etc/modprobe.d"
95
95
 
96
- action :install, description: "Load kernel module, and ensure it loads on reboot" do
96
+ action :install, description: "Load kernel module, and ensure it loads on reboot." do
97
97
  with_run_context :root do
98
98
  find_resource(:execute, "update initramfs") do
99
99
  command initramfs_command
@@ -121,7 +121,7 @@ class Chef
121
121
  end
122
122
  end
123
123
 
124
- action :uninstall, description: "Unload a kernel module and remove module config, so it doesn't load on reboot" do
124
+ action :uninstall, description: "Unload a kernel module and remove module config, so it doesn't load on reboot." do
125
125
  with_run_context :root do
126
126
  find_resource(:execute, "update initramfs") do
127
127
  command initramfs_command
@@ -146,7 +146,7 @@ class Chef
146
146
  action_unload
147
147
  end
148
148
 
149
- action :blacklist, description: "Blacklist a kernel module" do
149
+ action :blacklist, description: "Blacklist a kernel module." do
150
150
  with_run_context :root do
151
151
  find_resource(:execute, "update initramfs") do
152
152
  command initramfs_command
@@ -162,7 +162,7 @@ class Chef
162
162
  action_unload
163
163
  end
164
164
 
165
- action :disable, description: "Disable a kernel module" do
165
+ action :disable, description: "Disable a kernel module. **New in Chef Infra Client 15.2.**" do
166
166
  with_run_context :root do
167
167
  find_resource(:execute, "update initramfs") do
168
168
  command initramfs_command
@@ -178,7 +178,7 @@ class Chef
178
178
  action_unload
179
179
  end
180
180
 
181
- action :load, description: "Load a kernel module" do
181
+ action :load, description: "Load a kernel module." do
182
182
  unless module_loaded?
183
183
  converge_by("load kernel module #{new_resource.modname}") do
184
184
  shell_out!("modprobe #{new_resource.modname}")
@@ -186,7 +186,7 @@ class Chef
186
186
  end
187
187
  end
188
188
 
189
- action :unload, description: "Unload kernel module" do
189
+ action :unload, description: "Unload kernel module." do
190
190
  if module_loaded?
191
191
  converge_by("unload kernel module #{new_resource.modname}") do
192
192
  shell_out!("modprobe -r #{new_resource.modname}")
@@ -97,7 +97,7 @@ class Chef
97
97
  powershell_exec("Get-WinSystemLocale").result["Name"]
98
98
  end
99
99
 
100
- action :update, description: "Update the system's locale" do
100
+ action :update, description: "Update the system's locale." do
101
101
  converge_if_changed do
102
102
  set_system_locale
103
103
  end
@@ -140,7 +140,7 @@ class Chef
140
140
  state_cmd
141
141
  end
142
142
 
143
- action :write, description: "Write the value to the specified domain/key" do
143
+ action :write, description: "Write the value to the specified domain/key." do
144
144
  converge_if_changed do
145
145
  cmd = defaults_modify_cmd
146
146
  Chef::Log.debug("Updating defaults value by shelling out: #{cmd.join(" ")}")
@@ -149,7 +149,7 @@ class Chef
149
149
  end
150
150
  end
151
151
 
152
- action :delete, description: "Delete a key from a domain" do
152
+ action :delete, description: "Delete a key from a domain." do
153
153
  # if it's not there there's nothing to remove
154
154
  return unless current_resource
155
155
 
@@ -72,9 +72,7 @@ class Chef
72
72
  description: "Determines whether or not the resource is executed during the compile time phase.",
73
73
  default: true, desired_state: false
74
74
 
75
- action :create do
76
- description "Create an Ohai hint file."
77
-
75
+ action :create, description: "Create an Ohai hint file." do
78
76
  directory ::Ohai::Config.ohai.hints_path.first do
79
77
  action :create
80
78
  recursive true
@@ -86,9 +84,7 @@ class Chef
86
84
  end
87
85
  end
88
86
 
89
- action :delete do
90
- description "Delete an Ohai hint file."
91
-
87
+ action :delete, description: "Delete an Ohai hint file." do
92
88
  file ohai_hint_file_path(new_resource.hint_name) do
93
89
  action :delete
94
90
  notifies :reload, ohai[reload ohai post hint removal]