chef 17.1.35-universal-mingw32 → 17.4.38-universal-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -4
  3. data/chef.gemspec +1 -0
  4. data/lib/chef/action_collection.rb +6 -26
  5. data/lib/chef/application/base.rb +15 -0
  6. data/lib/chef/application.rb +4 -2
  7. data/lib/chef/client.rb +7 -1
  8. data/lib/chef/compliance/default_attributes.rb +5 -3
  9. data/lib/chef/compliance/reporter/automate.rb +1 -1
  10. data/lib/chef/compliance/runner.rb +16 -2
  11. data/lib/chef/cookbook_version.rb +26 -4
  12. data/lib/chef/data_collector/run_end_message.rb +1 -1
  13. data/lib/chef/data_collector.rb +0 -1
  14. data/lib/chef/deprecated.rb +14 -4
  15. data/lib/chef/dsl/render_helpers.rb +44 -0
  16. data/lib/chef/dsl/secret.rb +64 -0
  17. data/lib/chef/dsl/toml.rb +116 -0
  18. data/lib/chef/dsl/universal.rb +5 -0
  19. data/lib/chef/dsl.rb +1 -0
  20. data/lib/chef/event_dispatch/base.rb +2 -1
  21. data/lib/chef/exceptions.rb +23 -0
  22. data/lib/chef/formatters/doc.rb +14 -13
  23. data/lib/chef/formatters/error_mapper.rb +2 -2
  24. data/lib/chef/formatters/minimal.rb +6 -5
  25. data/lib/chef/handler/slow_report.rb +66 -0
  26. data/lib/chef/handler.rb +46 -8
  27. data/lib/chef/http.rb +5 -5
  28. data/lib/chef/json_compat.rb +1 -1
  29. data/lib/chef/node.rb +20 -19
  30. data/lib/chef/policy_builder/policyfile.rb +88 -45
  31. data/lib/chef/provider/execute.rb +1 -1
  32. data/lib/chef/provider/file.rb +2 -2
  33. data/lib/chef/provider/group/dscl.rb +1 -1
  34. data/lib/chef/provider/launchd.rb +6 -6
  35. data/lib/chef/provider/lwrp_base.rb +1 -1
  36. data/lib/chef/provider/package/habitat.rb +168 -0
  37. data/lib/chef/provider/package/powershell.rb +5 -0
  38. data/lib/chef/provider/subversion.rb +4 -4
  39. data/lib/chef/provider/support/yum_repo.erb +1 -1
  40. data/lib/chef/provider/support/zypper_repo.erb +4 -2
  41. data/lib/chef/provider/systemd_unit.rb +17 -16
  42. data/lib/chef/provider/user/mac.rb +3 -3
  43. data/lib/chef/provider/yum_repository.rb +27 -43
  44. data/lib/chef/provider/zypper_repository.rb +30 -34
  45. data/lib/chef/provider.rb +26 -1
  46. data/lib/chef/provider_resolver.rb +8 -2
  47. data/lib/chef/providers.rb +1 -0
  48. data/lib/chef/resource/alternatives.rb +5 -5
  49. data/lib/chef/resource/apt_preference.rb +2 -2
  50. data/lib/chef/resource/apt_repository.rb +2 -2
  51. data/lib/chef/resource/apt_update.rb +4 -4
  52. data/lib/chef/resource/build_essential.rb +1 -1
  53. data/lib/chef/resource/chef_client_config.rb +10 -5
  54. data/lib/chef/resource/chef_client_cron.rb +3 -3
  55. data/lib/chef/resource/chef_client_launchd.rb +3 -3
  56. data/lib/chef/resource/chef_client_scheduled_task.rb +15 -15
  57. data/lib/chef/resource/chef_client_systemd_timer.rb +3 -3
  58. data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
  59. data/lib/chef/resource/chef_handler.rb +2 -2
  60. data/lib/chef/resource/chef_sleep.rb +1 -1
  61. data/lib/chef/resource/chef_vault_secret.rb +2 -2
  62. data/lib/chef/resource/chocolatey_feature.rb +2 -2
  63. data/lib/chef/resource/chocolatey_source.rb +1 -1
  64. data/lib/chef/resource/cron/cron_d.rb +4 -6
  65. data/lib/chef/resource/cron_access.rb +1 -1
  66. data/lib/chef/resource/dmg_package.rb +1 -1
  67. data/lib/chef/resource/dsc_resource.rb +1 -1
  68. data/lib/chef/resource/execute.rb +5 -5
  69. data/lib/chef/resource/gem_package.rb +2 -1
  70. data/lib/chef/resource/group.rb +4 -4
  71. data/lib/chef/resource/habitat/_habitat_shared.rb +28 -0
  72. data/lib/chef/resource/habitat/habitat_package.rb +129 -0
  73. data/lib/chef/resource/habitat/habitat_sup.rb +329 -0
  74. data/lib/chef/resource/habitat/habitat_sup_systemd.rb +67 -0
  75. data/lib/chef/resource/habitat/habitat_sup_windows.rb +90 -0
  76. data/lib/chef/resource/habitat_config.rb +107 -0
  77. data/lib/chef/resource/habitat_install.rb +247 -0
  78. data/lib/chef/resource/habitat_service.rb +451 -0
  79. data/lib/chef/resource/habitat_user_toml.rb +92 -0
  80. data/lib/chef/resource/homebrew_cask.rb +18 -7
  81. data/lib/chef/resource/homebrew_package.rb +1 -1
  82. data/lib/chef/resource/homebrew_tap.rb +4 -3
  83. data/lib/chef/resource/homebrew_update.rb +2 -2
  84. data/lib/chef/resource/hostname.rb +49 -7
  85. data/lib/chef/resource/inspec_waiver_file_entry.rb +8 -7
  86. data/lib/chef/resource/kernel_module.rb +6 -6
  87. data/lib/chef/resource/launchd.rb +3 -3
  88. data/lib/chef/resource/locale.rb +1 -1
  89. data/lib/chef/resource/lwrp_base.rb +1 -1
  90. data/lib/chef/resource/macos_userdefaults.rb +2 -2
  91. data/lib/chef/resource/ohai_hint.rb +2 -6
  92. data/lib/chef/resource/openbsd_package.rb +17 -0
  93. data/lib/chef/resource/openssl_dhparam.rb +1 -2
  94. data/lib/chef/resource/openssl_ec_private_key.rb +1 -3
  95. data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
  96. data/lib/chef/resource/openssl_rsa_private_key.rb +1 -3
  97. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
  98. data/lib/chef/resource/openssl_x509_certificate.rb +1 -4
  99. data/lib/chef/resource/openssl_x509_crl.rb +1 -3
  100. data/lib/chef/resource/openssl_x509_request.rb +1 -3
  101. data/lib/chef/resource/osx_profile.rb +3 -3
  102. data/lib/chef/resource/plist.rb +1 -1
  103. data/lib/chef/resource/powershell_package_source.rb +2 -4
  104. data/lib/chef/resource/reboot.rb +38 -9
  105. data/lib/chef/resource/remote_directory.rb +2 -2
  106. data/lib/chef/resource/remote_file.rb +1 -1
  107. data/lib/chef/resource/rhsm_errata.rb +0 -2
  108. data/lib/chef/resource/rhsm_errata_level.rb +1 -5
  109. data/lib/chef/resource/rhsm_repo.rb +15 -0
  110. data/lib/chef/resource/rhsm_subscription.rb +5 -5
  111. data/lib/chef/resource/ruby_block.rb +100 -0
  112. data/lib/chef/resource/scm/subversion.rb +1 -1
  113. data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
  114. data/lib/chef/resource/sudo.rb +2 -6
  115. data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
  116. data/lib/chef/resource/support/client.erb +8 -1
  117. data/lib/chef/resource/support/sup.toml.erb +179 -0
  118. data/lib/chef/resource/swap_file.rb +2 -6
  119. data/lib/chef/resource/sysctl.rb +2 -2
  120. data/lib/chef/resource/systemd_unit.rb +3 -3
  121. data/lib/chef/resource/timezone.rb +1 -1
  122. data/lib/chef/resource/user_ulimit.rb +2 -2
  123. data/lib/chef/resource/windows_ad_join.rb +2 -2
  124. data/lib/chef/resource/windows_audit_policy.rb +2 -2
  125. data/lib/chef/resource/windows_auto_run.rb +2 -2
  126. data/lib/chef/resource/windows_certificate.rb +1 -1
  127. data/lib/chef/resource/windows_defender.rb +163 -0
  128. data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
  129. data/lib/chef/resource/windows_dfs_folder.rb +2 -2
  130. data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
  131. data/lib/chef/resource/windows_dns_record.rb +2 -2
  132. data/lib/chef/resource/windows_dns_zone.rb +2 -2
  133. data/lib/chef/resource/windows_feature.rb +3 -3
  134. data/lib/chef/resource/windows_feature_dism.rb +3 -5
  135. data/lib/chef/resource/windows_feature_powershell.rb +3 -3
  136. data/lib/chef/resource/windows_firewall_profile.rb +2 -2
  137. data/lib/chef/resource/windows_firewall_rule.rb +20 -6
  138. data/lib/chef/resource/windows_font.rb +1 -1
  139. data/lib/chef/resource/windows_pagefile.rb +103 -64
  140. data/lib/chef/resource/windows_path.rb +2 -2
  141. data/lib/chef/resource/windows_printer.rb +80 -61
  142. data/lib/chef/resource/windows_printer_port.rb +48 -65
  143. data/lib/chef/resource/windows_security_policy.rb +2 -2
  144. data/lib/chef/resource/windows_share.rb +2 -2
  145. data/lib/chef/resource/windows_shortcut.rb +1 -1
  146. data/lib/chef/resource/windows_task.rb +1 -1
  147. data/lib/chef/resource/windows_uac.rb +3 -5
  148. data/lib/chef/resource/windows_update_settings.rb +259 -0
  149. data/lib/chef/resource/windows_user_privilege.rb +2 -2
  150. data/lib/chef/resource/windows_workgroup.rb +2 -2
  151. data/lib/chef/resource/yum_package.rb +11 -15
  152. data/lib/chef/resource/zypper_package.rb +4 -4
  153. data/lib/chef/resource/zypper_repository.rb +28 -8
  154. data/lib/chef/resource.rb +13 -17
  155. data/lib/chef/resource_inspector.rb +6 -2
  156. data/lib/chef/resource_reporter.rb +0 -1
  157. data/lib/chef/resources.rb +12 -1
  158. data/lib/chef/secret_fetcher/aws_secrets_manager.rb +65 -0
  159. data/lib/chef/secret_fetcher/azure_key_vault.rb +78 -0
  160. data/lib/chef/secret_fetcher/base.rb +76 -0
  161. data/lib/chef/secret_fetcher/example.rb +46 -0
  162. data/lib/chef/secret_fetcher.rb +55 -0
  163. data/lib/chef/version.rb +1 -1
  164. data/spec/functional/mixin/from_file_spec.rb +1 -1
  165. data/spec/functional/resource/windows_hostname_spec.rb +91 -0
  166. data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
  167. data/spec/integration/compliance/compliance_spec.rb +1 -0
  168. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
  169. data/spec/integration/recipes/resource_action_spec.rb +6 -6
  170. data/spec/support/shared/unit/provider/file.rb +2 -8
  171. data/spec/unit/compliance/runner_spec.rb +46 -2
  172. data/spec/unit/cookbook_version_spec.rb +52 -0
  173. data/spec/unit/data_collector_spec.rb +47 -1
  174. data/spec/unit/dsl/render_helpers_spec.rb +102 -0
  175. data/spec/unit/dsl/secret_spec.rb +71 -0
  176. data/spec/unit/formatters/doc_spec.rb +1 -1
  177. data/spec/unit/handler_spec.rb +8 -2
  178. data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
  179. data/spec/unit/policy_builder/policyfile_spec.rb +144 -56
  180. data/spec/unit/provider/apt_update_spec.rb +3 -1
  181. data/spec/unit/provider/mount/aix_spec.rb +1 -1
  182. data/spec/unit/provider/package/powershell_spec.rb +74 -12
  183. data/spec/unit/provider/zypper_repository_spec.rb +3 -10
  184. data/spec/unit/provider_spec.rb +23 -0
  185. data/spec/unit/resource/homebrew_cask_spec.rb +29 -11
  186. data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
  187. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  188. data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
  189. data/spec/unit/resource/windows_defender_spec.rb +71 -0
  190. data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
  191. data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
  192. data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
  193. data/spec/unit/resource/zypper_repository_spec.rb +1 -1
  194. data/spec/unit/resource_spec.rb +19 -8
  195. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +70 -0
  196. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +70 -0
  197. data/spec/unit/secret_fetcher_spec.rb +82 -0
  198. metadata +55 -7
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <configuration>
3
+ <appSettings>
4
+ <add key="debug" value="false" />
5
+ <% if @auth_token %>
6
+ <add key="ENV_HAB_AUTH_TOKEN" value="<%= @auth_token %>" />
7
+ <% end %>
8
+ <% if @gateway_auth_token %>
9
+ <add key="ENV_HAB_SUP_GATEWAY_AUTH_TOKEN" value="<%= @gateway_auth_token %>" />
10
+ <% end %>
11
+ <% if @bldr_url %>
12
+ <add key="ENV_HAB_BLDR_URL" value="<%= @bldr_url %>" />
13
+ <% end %>
14
+ <%if @exec_start_options %>
15
+ <add key="launcherArgs" value="--no-color <%= @exec_start_options %>" />
16
+ <% end %>
17
+ <add key="launcherPath" value="C:\Hab\pkgs\<%= `hab pkg list core/hab-launcher`.split().last %>\bin\hab-launch.exe"/>
18
+ </appSettings>
19
+ </configuration>
@@ -18,10 +18,17 @@
18
18
  @pid_file
19
19
  @policy_group
20
20
  @policy_name
21
- @ssl_verify_mode).each do |prop| -%>
21
+ @ssl_verify_mode
22
+ @policy_persist_run_list).each do |prop| -%>
22
23
  <% next if instance_variable_get(prop).nil? || instance_variable_get(prop).empty? -%>
23
24
  <%=prop.delete_prefix("@") %> <%= instance_variable_get(prop).inspect %>
24
25
  <% end -%>
26
+ <%# ohai_disabled_plugins and ohai_optional_plugins properties don't match the config value perfectly-%>
27
+ <% %w(@ohai_disabled_plugins
28
+ @ohai_optional_plugins).each do |prop| -%>
29
+ <% next if instance_variable_get(prop).nil? || instance_variable_get(prop).empty? -%>
30
+ <%=prop.gsub("@ohai_", "ohai.") %> <%= instance_variable_get(prop).inspect %>
31
+ <% end -%>
25
32
  <%# log_location is special due to STDOUT/STDERR from String -> IO Object -%>
26
33
  <% unless @log_location.nil? %>
27
34
  <% if @log_location.is_a?(String) && %w(STDOUT STDERR).include?(@log_location) -%>
@@ -0,0 +1,179 @@
1
+ # sup.toml
2
+ # Used for passing configuration options to the Chef Habitat supervisor
3
+ # This file is controlled by the 'habitat' cookbook and should not be modified by hand -- local modifications may be overwritten.
4
+
5
+ ### The listen address for the Gossip Gateway
6
+ <% if @listen_gossip %>
7
+ listen_gossip = "<%= @listen_gossip %>"
8
+ <% end %>
9
+
10
+ ### Start the supervisor in local mode
11
+ # local_gossip_mode =
12
+
13
+ ### The listen address for the HTTP Gateway
14
+ <% if @listen_http %>
15
+ listen_http = "<%= @listen_http %>"
16
+ <% end %>
17
+ ### Disable the HTTP Gateway completely
18
+ # http_disable =
19
+
20
+ ### The listen address for the Control Gateway
21
+ <% if @listen_ctl %>
22
+ listen_ctl = "<%= @listen_ctl %>"
23
+ <% end %>
24
+ ### The organization the Supervisor and its services are part of
25
+ <% if @organization %>
26
+ organization = "<%= @organization %>"
27
+ <% end %>
28
+ ### The listen address of one or more initial peers (IP[:PORT])
29
+ <% if @peer %>
30
+ peer = <%= @peer %>
31
+ <% end %>
32
+ ### Make this Supervisor a permanent peer
33
+ <% if @permanent_peer %>
34
+ permanent_peer = <%= @permanent_peer %>
35
+ <% end %>
36
+ ### Watch this file for connecting to the ring
37
+ # peer_watch_file =
38
+
39
+ ### Cache for creating and searching for encryption keys
40
+ # cache_key_path =
41
+
42
+ ### The name of the ring used by the Supervisor when running with wire encryption
43
+ <% if @ring %>
44
+ ring = "<%= @ring %>"
45
+ <% end %>
46
+ ### Use the package config from this path rather than the package itself
47
+ # config_from =
48
+
49
+ ### Enable automatic updates for the Supervisor itself
50
+ <% if @auto_update %>
51
+ auto_update = <%= @auto_update %>
52
+ <% end %>
53
+ ### The period of time in seconds between Supervisor update checks
54
+ # auto_update_period =
55
+
56
+ ### The period of time in seconds between service update checks
57
+ # service_update_period =
58
+
59
+ ### The private key for HTTP Gateway TLS encryption
60
+ ###
61
+ ### Read the private key from KEY_FILE. This should be an RSA private key or PKCS8-encoded private key in PEM format.
62
+ # key_file =
63
+
64
+ ### The server certificates for HTTP Gateway TLS encryption
65
+ ###
66
+ ### Read server certificates from CERT_FILE. This should contain PEM-format certificates in the right order. The first certificate should certify KEY_FILE. The last should be a root CA.
67
+ # cert_file =
68
+
69
+ ### The CA certificate for HTTP Gateway TLS encryption
70
+ ###
71
+ ### Read the CA certificate from CA_CERT_FILE. This should contain PEM-format certificate that can be used to validate client requests
72
+ # ca_cert_file =
73
+
74
+ ### Load a Habitat package as part of the Supervisor startup
75
+ ###
76
+ ### The package can be specified by a package identifier (ex: core/redis) or filepath to a Habitat artifact (ex: /home/core-redis-3.0.7-21120102031201-x86_64-linux.hart).
77
+ # pkg_ident_or_artifact =
78
+
79
+ ### Verbose output showing file and line/column numbers
80
+ # verbose =
81
+
82
+ ### Turn ANSI color off
83
+ # no_color =
84
+
85
+ ### Use structured JSON logging for the Supervisor
86
+ ###
87
+ ### This option also sets NO_COLOR.
88
+ # json_logging =
89
+
90
+ ### The IPv4 address to use as the `sys.ip` template variable
91
+ ###
92
+ ### If this argument is not set, the supervisor tries to dynamically determine an IP address. If that fails, the supervisor defaults to using `127.0.0.1`.
93
+ # sys_ip_address =
94
+
95
+ ### The name of the application for event stream purposes
96
+ ###
97
+ ### This will be attached to all events generated by this Supervisor.
98
+ <% if @event_stream_application %>
99
+ event_stream_application = "<%= @event_stream_application %>"
100
+ <% end %>
101
+ ### The name of the environment for event stream purposes
102
+ ###
103
+ ### This will be attached to all events generated by this Supervisor.
104
+ <% if @event_stream_environment %>
105
+ event_stream_environment = "<%= @event_stream_environment %>"
106
+ <% end %>
107
+ ### Event stream connection timeout before exiting the Supervisor
108
+ ###
109
+ ### Set to '0' to immediately start the Supervisor and continue running regardless of the initial connection status.
110
+ # event_stream_connect_timeout =
111
+
112
+ ### The event stream connection url used to send events to Chef Automate
113
+ ###
114
+ ### This enables the event stream and requires EVENT_STREAM_APPLICATION, EVENT_STREAM_ENVIRONMENT, and EVENT_STREAM_TOKEN also be set.
115
+ <% if @event_stream_url %>
116
+ event_stream_url = "<%= @event_stream_url %>"
117
+ <% end %>
118
+ ### The name of the site where this Supervisor is running for event stream purposes
119
+ <% if @event_stream_site %>
120
+ event_stream_site = "<%= @event_stream_site %>"
121
+ <% end %>
122
+ ### The authentication token for connecting the event stream to Chef Automate
123
+ <% if @event_stream_token %>
124
+ event_stream_token = "<%= @event_stream_token %>"
125
+ <% end %>
126
+ ### An arbitrary key-value pair to add to each event generated by this Supervisor
127
+ # event_meta = []
128
+
129
+ ### The path to Chef Automate's event stream certificate used to establish a TLS connection
130
+ ###
131
+ ### The certificate should be in PEM format.
132
+ <% if @event_stream_server_certificate %>
133
+ event_stream_server_certificate = "<%= @event_stream_server_certificate %>"
134
+ <% end %>
135
+ ### Automatically cleanup old packages
136
+ ###
137
+ ### The Supervisor will automatically cleanup old packages only keeping the KEEP_LATEST_PACKAGES latest packages. If this argument is not specified, no automatic package cleanup is performed.
138
+ <% if @keep_latest_packages %>
139
+ keep_latest_packages = "<%= @keep_latest_packages %>"
140
+ <% end %>
141
+ ### Receive updates from the specified release channel
142
+ # channel =
143
+
144
+ ### Specify an alternate Builder endpoint. If not specified, the value will be taken from the HAB_BLDR_URL environment variable if defined. (default: https://bldr.habitat.sh)
145
+ <% if @bldr_url %>
146
+ bldr_url = "<%= @bldr_url %>"
147
+ <% end %>
148
+ ### The service group with shared config and topology
149
+ # group =
150
+
151
+ ### Service topology
152
+ # topology =
153
+
154
+ ### The update strategy
155
+ # strategy =
156
+
157
+ ### The condition dictating when this service should update
158
+ ###
159
+ ### latest: Runs the latest package that can be found in the configured channel and local packages.
160
+ ###
161
+ ### track-channel: Always run what is at the head of a given channel. This enables service rollback where demoting a package from a channel will cause the package to rollback to an older version of the package. A ramification of enabling this condition is packages newer than the package at the head of the channel will be automatically uninstalled during a service rollback.
162
+ <% if @update_condition %>
163
+ update_condition = "<%= @update_condition %>"
164
+ <% end %>
165
+ ### One or more service groups to bind to a configuration
166
+ # bind = []
167
+
168
+ ### Governs how the presence or absence of binds affects service startup
169
+ ###
170
+ ### strict: blocks startup until all binds are present.
171
+ # binding_mode =
172
+
173
+ ### The interval in seconds on which to run health checks
174
+ # health_check_interval =
175
+
176
+ ### The delay in seconds after sending the shutdown signal to wait before killing the service process
177
+ ###
178
+ ### The default value can be set in the packages plan file.
179
+ # shutdown_timeout =
@@ -63,9 +63,7 @@ class Chef
63
63
  property :swappiness, Integer,
64
64
  description: "The swappiness value to set on the system."
65
65
 
66
- action :create do
67
- description "Create a swapfile."
68
-
66
+ action :create, description: "Create a swapfile." do
69
67
  if swap_enabled?
70
68
  Chef::Log.debug("#{new_resource} already created - nothing to do")
71
69
  else
@@ -85,9 +83,7 @@ class Chef
85
83
  end
86
84
  end
87
85
 
88
- action :remove do
89
- description "Remove a swapfile and disable swap."
90
-
86
+ action :remove, description: "Remove a swapfile and disable swap." do
91
87
  swapoff if swap_enabled?
92
88
  remove_swapfile if ::File.exist?(new_resource.path)
93
89
  end
@@ -131,7 +131,7 @@ class Chef
131
131
 
132
132
  end
133
133
 
134
- action :apply, description: "Apply a sysctl value" do
134
+ action :apply, description: "Set the kernel parameter and update the `sysctl` settings." do
135
135
  converge_if_changed do
136
136
  # set it temporarily
137
137
  set_sysctl_param(new_resource.key, new_resource.value)
@@ -150,7 +150,7 @@ class Chef
150
150
  end
151
151
  end
152
152
 
153
- action :remove, description: "Remove a sysctl value" do
153
+ action :remove, description: "Remove the kernel parameter and update the `sysctl` settings." do
154
154
  # only converge the resource if the file actually exists to delete
155
155
  if ::File.exist?("#{new_resource.conf_dir}/99-chef-#{new_resource.key.tr("/", ".")}.conf")
156
156
  converge_by "removing sysctl config at #{new_resource.conf_dir}/99-chef-#{new_resource.key.tr("/", ".")}.conf" do
@@ -34,7 +34,7 @@ class Chef
34
34
 
35
35
  ```ruby
36
36
  systemd_unit 'etcd.service' do
37
- content(Unit: {
37
+ content({ Unit: {
38
38
  Description: 'Etcd',
39
39
  Documentation: ['https://coreos.com/etcd', 'man:etcd(1)'],
40
40
  After: 'network.target',
@@ -46,7 +46,7 @@ class Chef
46
46
  },
47
47
  Install: {
48
48
  WantedBy: 'multi-user.target',
49
- })
49
+ } })
50
50
  action [:create, :enable]
51
51
  end
52
52
  ```
@@ -113,7 +113,7 @@ class Chef
113
113
  when Hash
114
114
  IniParse.gen do |doc|
115
115
  content.each_pair do |sect, opts|
116
- doc.section(sect) do |section|
116
+ doc.section(sect, { option_sep: "=" }) do |section|
117
117
  opts.each_pair do |opt, val|
118
118
  [val].flatten.each do |v|
119
119
  section.option(opt, v)
@@ -119,7 +119,7 @@ class Chef
119
119
  end
120
120
  end
121
121
 
122
- action :set, description: "Set the system timezone" do
122
+ action :set, description: "Set the system timezone." do
123
123
  # we have to check windows first since the value isn't case sensitive here
124
124
  if windows?
125
125
  unless current_windows_tz.casecmp?(new_resource.timezone)
@@ -78,7 +78,7 @@ class Chef
78
78
  coerce: proc { |m| m.end_with?(".conf") ? m : m + ".conf" },
79
79
  default: lazy { |r| r.username == "*" ? "00_all_limits.conf" : "#{r.username}_limits.conf" }
80
80
 
81
- action :create, description: "Create a ulimit configuration file" do
81
+ action :create, description: "Create a ulimit configuration file." do
82
82
  template "/etc/security/limits.d/#{new_resource.filename}" do
83
83
  source ::File.expand_path("support/ulimit.erb", __dir__)
84
84
  local true
@@ -106,7 +106,7 @@ class Chef
106
106
  end
107
107
  end
108
108
 
109
- action :delete, description: "Delete an existing ulimit configuration file" do
109
+ action :delete, description: "Delete an existing ulimit configuration file." do
110
110
  file "/etc/security/limits.d/#{new_resource.filename}" do
111
111
  action :delete
112
112
  end
@@ -97,7 +97,7 @@ class Chef
97
97
  property :sensitive, [TrueClass, FalseClass],
98
98
  default: true, desired_state: false
99
99
 
100
- action :join, description: "Join the Active Directory domain" do
100
+ action :join, description: "Join the Active Directory domain." do
101
101
  unless on_desired_domain?
102
102
  cmd = "$pswd = ConvertTo-SecureString \'#{new_resource.domain_password}\' -AsPlainText -Force;"
103
103
  cmd << "$credential = New-Object System.Management.Automation.PSCredential (\"#{sanitize_usename}\",$pswd);"
@@ -127,7 +127,7 @@ class Chef
127
127
  end
128
128
  end
129
129
 
130
- action :leave, description: "Leave an Active Directory domain and re-join a workgroup" do
130
+ action :leave, description: "Leave an Active Directory domain and re-join a workgroup." do
131
131
  if joined_to_domain?
132
132
  cmd = ""
133
133
  cmd << "$pswd = ConvertTo-SecureString \'#{new_resource.domain_password}\' -AsPlainText -Force;"
@@ -106,7 +106,7 @@ class Chef
106
106
 
107
107
  ```ruby
108
108
  windows_audit_policy "Set Audit Policy for 'Credential Validation' actions to 'Success'" do
109
- subcategory 'Credential Validation'
109
+ subcategory 'Credential Validation'
110
110
  success true
111
111
  failure false
112
112
  action :set
@@ -152,7 +152,7 @@ class Chef
152
152
  property :audit_base_directories, [true, false],
153
153
  description: "Setting this audit policy option to true will force the system to assign a System Access Control List to named objects to enable auditing of container objects such as directories."
154
154
 
155
- action :set, description: "Configure an audit policy" do
155
+ action :set, description: "Configure an audit policy." do
156
156
  unless new_resource.subcategory.nil?
157
157
  new_resource.subcategory.each do |subcategory|
158
158
  next if subcategory_configured?(subcategory, new_resource.success, new_resource.failure)
@@ -57,7 +57,7 @@ class Chef
57
57
 
58
58
  alias_method :program, :path
59
59
 
60
- action :create, description: "Create an item to be run at login" do
60
+ action :create, description: "Create an item to be run at login." do
61
61
 
62
62
  data = "\"#{new_resource.path}\""
63
63
  data << " #{new_resource.args}" if new_resource.args
@@ -72,7 +72,7 @@ class Chef
72
72
  end
73
73
  end
74
74
 
75
- action :remove, description: "Remove an item that was previously configured to run at login" do
75
+ action :remove, description: "Remove an item that was previously configured to run at login." do
76
76
  registry_key registry_path do
77
77
  values [{
78
78
  name: new_resource.program_name,
@@ -160,7 +160,7 @@ class Chef
160
160
  end
161
161
  end
162
162
 
163
- action :verify, description: "Verifies a certificate and logs the result" do
163
+ action :verify, description: "Verifies a certificate and logs the result." do
164
164
  out = verify_cert
165
165
  if !!out == out
166
166
  out = out ? "Certificate is valid" : "Certificate not valid"
@@ -0,0 +1,163 @@
1
+ #
2
+ # Copyright:: Chef Software, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require_relative "../resource"
18
+
19
+ class Chef
20
+ class Resource
21
+ class WindowsDefender < Chef::Resource
22
+ unified_mode true
23
+ provides :windows_defender
24
+
25
+ description "Use the **windows_defender** resource to enable or disable the Microsoft Windows Defender service."
26
+ introduced "17.3"
27
+ examples <<~DOC
28
+ **Configure Windows Defender AV settings**:
29
+
30
+ ```ruby
31
+ windows_defender 'Configure Defender' do
32
+ realtime_protection true
33
+ intrusion_protection_system true
34
+ lock_ui true
35
+ scan_archives true
36
+ scan_scripts true
37
+ scan_email true
38
+ scan_removable_drives true
39
+ scan_network_files false
40
+ scan_mapped_drives false
41
+ action :enable
42
+ end
43
+ ```
44
+
45
+ **Disable Windows Defender AV**:
46
+
47
+ ```ruby
48
+ windows_defender 'Disable Defender' do
49
+ action :disable
50
+ end
51
+ ```
52
+ DOC
53
+
54
+ # DisableIOAVProtection
55
+ property :realtime_protection, [true, false],
56
+ default: true,
57
+ description: "Enable realtime scanning of downloaded files and attachments."
58
+
59
+ # DisableIntrusionPreventionSystem
60
+ property :intrusion_protection_system, [true, false],
61
+ default: true,
62
+ description: "Enable network protection against exploitation of known vulnerabilities."
63
+
64
+ # UILockdown
65
+ property :lock_ui, [true, false],
66
+ description: "Lock the UI to prevent users from changing Windows Defender settings.",
67
+ default: false
68
+
69
+ # DisableArchiveScanning
70
+ property :scan_archives, [true, false],
71
+ default: true,
72
+ description: "Scan file archives such as .zip or .gz archives."
73
+
74
+ # DisableScriptScanning
75
+ property :scan_scripts, [true, false],
76
+ default: false,
77
+ description: "Scan scripts in malware scans."
78
+
79
+ # DisableEmailScanning
80
+ property :scan_email, [true, false],
81
+ default: false,
82
+ description: "Scan e-mails for malware."
83
+
84
+ # DisableRemovableDriveScanning
85
+ property :scan_removable_drives, [true, false],
86
+ default: false,
87
+ description: "Scan content of removable drives."
88
+
89
+ # DisableScanningNetworkFiles
90
+ property :scan_network_files, [true, false],
91
+ default: false,
92
+ description: "Scan files on a network."
93
+
94
+ # DisableScanningMappedNetworkDrivesForFullScan
95
+ property :scan_mapped_drives, [true, false],
96
+ default: true,
97
+ description: "Scan files on mapped network drives."
98
+
99
+ load_current_value do
100
+ values = powershell_exec!("Get-MPpreference").result
101
+
102
+ lock_ui values["UILockdown"]
103
+ realtime_protection !values["DisableIOAVProtection"]
104
+ intrusion_protection_system !values["DisableIntrusionPreventionSystem"]
105
+ scan_archives !values["DisableArchiveScanning"]
106
+ scan_scripts !values["DisableScriptScanning"]
107
+ scan_email !values["DisableEmailScanning"]
108
+ scan_removable_drives !values["DisableRemovableDriveScanning"]
109
+ scan_network_files !values["DisableScanningNetworkFiles"]
110
+ scan_mapped_drives !values["DisableScanningMappedNetworkDrivesForFullScan"]
111
+ end
112
+
113
+ action :enable, description: "Enable and configure Windows Defender." do
114
+ windows_service "Windows Defender" do
115
+ service_name "WinDefend"
116
+ action %i{start enable}
117
+ startup_type :automatic
118
+ end
119
+
120
+ converge_if_changed do
121
+ powershell_exec!(set_mppreference_cmd)
122
+ end
123
+ end
124
+
125
+ action :disable, description: "Disable Windows Defender." do
126
+ windows_service "Windows Defender" do
127
+ service_name "WinDefend"
128
+ action %i{disable stop}
129
+ end
130
+ end
131
+
132
+ action_class do
133
+ require "chef/mixin/powershell_type_coercions"
134
+ include Chef::Mixin::PowershellTypeCoercions
135
+
136
+ PROPERTY_TO_PS_MAP = {
137
+ realtime_protection: "DisableIOAVProtection",
138
+ intrusion_protection_system: "DisableIntrusionPreventionSystem",
139
+ scan_archives: "DisableArchiveScanning",
140
+ scan_scripts: "DisableScriptScanning",
141
+ scan_email: "DisableEmailScanning",
142
+ scan_removable_drives: "DisableRemovableDriveScanning",
143
+ scan_network_files: "DisableScanningNetworkFiles",
144
+ scan_mapped_drives: "DisableScanningMappedNetworkDrivesForFullScan",
145
+ }.freeze
146
+
147
+ def set_mppreference_cmd
148
+ cmd = "Set-MpPreference -Force"
149
+ cmd << " -UILockdown #{type_coercion(new_resource.lock_ui)}"
150
+
151
+ # the values are the opposite in Set-MpPreference and our properties so we have to iterate
152
+ # over the list and negate the provided values so it makes sense with the cmdlet flag's expected value
153
+ PROPERTY_TO_PS_MAP.each do |prop, flag|
154
+ next if new_resource.send(prop).nil? || current_resource.send(prop) == new_resource.send(prop)
155
+
156
+ cmd << " -#{flag} #{type_coercion(!new_resource.send(prop))}"
157
+ end
158
+ cmd
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end