chef 17.1.35 → 17.4.38

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -147,7 +147,7 @@ class Chef
147
147
  end
148
148
  end
149
149
 
150
- action :add, description: "Add a user privilege" do
150
+ action :add, description: "Add a user privilege." do
151
151
  ([*new_resource.privilege] - [*current_resource.privilege]).each do |user_right|
152
152
  converge_by("adding user '#{new_resource.principal}' privilege #{user_right}") do
153
153
  Chef::ReservedNames::Win32::Security.add_account_right(new_resource.principal, user_right)
@@ -155,7 +155,7 @@ class Chef
155
155
  end
156
156
  end
157
157
 
158
- action :set, description: "Set the privileges that are listed in the `privilege` property for only the users listed in the `users` property" do
158
+ action :set, description: "Set the privileges that are listed in the `privilege` property for only the users listed in the `users` property." do
159
159
  if new_resource.users.nil? || new_resource.users.empty?
160
160
  raise Chef::Exceptions::ValidationFailed, "Users are required property with set action."
161
161
  end
@@ -30,13 +30,13 @@ class Chef
30
30
  examples <<~DOC
31
31
  **Join a workgroup**:
32
32
 
33
- ``` ruby
33
+ ```ruby
34
34
  windows_workgroup 'myworkgroup'
35
35
  ```
36
36
 
37
37
  **Join a workgroup using a specific user**:
38
38
 
39
- ``` ruby
39
+ ```ruby
40
40
  windows_workgroup 'myworkgroup' do
41
41
  user 'Administrator'
42
42
  password 'passw0rd'
@@ -27,40 +27,36 @@ class Chef
27
27
  provides :yum_package
28
28
  provides :package, platform_family: "fedora_derived"
29
29
 
30
- description "Use the **yum_package** resource to install, upgrade, and remove packages with Yum"\
31
- " for the Red Hat and CentOS platforms. The yum_package resource is able to resolve"\
32
- " `provides` data for packages much like Yum can do when it is run from the command line."\
33
- " This allows a variety of options for installing packages, like minimum versions,"\
34
- " virtual provides, and library names."
30
+ description "Use the **yum_package** resource to install, upgrade, and remove packages with Yum for the Red Hat and CentOS platforms. The yum_package resource is able to resolve `provides` data for packages much like Yum can do when it is run from the command line. This allows a variety of options for installing packages, like minimum versions, virtual provides, and library names. Note: Support for using file names to install packages (as in `yum_package '/bin/sh'`) is not available because the volume of data required to parse for this is excessive."
35
31
  examples <<~DOC
36
32
  **Install an exact version**:
37
33
 
38
- ``` ruby
34
+ ```ruby
39
35
  yum_package 'netpbm = 10.35.58-8.el8'
40
36
  ```
41
37
 
42
38
  **Install a minimum version**:
43
39
 
44
- ``` ruby
40
+ ```ruby
45
41
  yum_package 'netpbm >= 10.35.58-8.el8'
46
42
  ```
47
43
 
48
44
  **Install a minimum version using the default action**:
49
45
 
50
- ``` ruby
46
+ ```ruby
51
47
  yum_package 'netpbm'
52
48
  ```
53
49
 
54
50
  **Install a version without worrying about the exact release**:
55
51
 
56
- ``` ruby
52
+ ```ruby
57
53
  yum_package 'netpbm-10.35*'
58
54
  ```
59
55
 
60
56
 
61
57
  **To install a package**:
62
58
 
63
- ``` ruby
59
+ ```ruby
64
60
  yum_package 'netpbm' do
65
61
  action :install
66
62
  end
@@ -68,13 +64,13 @@ class Chef
68
64
 
69
65
  **To install a partial minimum version**:
70
66
 
71
- ``` ruby
67
+ ```ruby
72
68
  yum_package 'netpbm >= 10'
73
69
  ```
74
70
 
75
71
  **To install a specific architecture**:
76
72
 
77
- ``` ruby
73
+ ```ruby
78
74
  yum_package 'netpbm' do
79
75
  arch 'i386'
80
76
  end
@@ -82,13 +78,13 @@ class Chef
82
78
 
83
79
  or:
84
80
 
85
- ``` ruby
81
+ ```ruby
86
82
  yum_package 'netpbm.x86_64'
87
83
  ```
88
84
 
89
85
  **To install a specific version-release**
90
86
 
91
- ``` ruby
87
+ ```ruby
92
88
  yum_package 'netpbm' do
93
89
  version '10.35.58-8.el8'
94
90
  end
@@ -101,7 +97,7 @@ class Chef
101
97
  to dump the in-memory Yum cache, and then use the repository immediately
102
98
  to ensure that the correct package is installed:
103
99
 
104
- ``` ruby
100
+ ```ruby
105
101
  cookbook_file '/etc/yum.repos.d/custom.repo' do
106
102
  source 'custom'
107
103
  mode '0755'
@@ -30,7 +30,7 @@ class Chef
30
30
  examples <<~DOC
31
31
  **Install a package using package manager:**
32
32
 
33
- ``` ruby
33
+ ```ruby
34
34
  zypper_package 'name of package' do
35
35
  action :install
36
36
  end
@@ -38,7 +38,7 @@ class Chef
38
38
 
39
39
  **Install a package using local file:**
40
40
 
41
- ``` ruby
41
+ ```ruby
42
42
  zypper_package 'jwhois' do
43
43
  action :install
44
44
  source '/path/to/jwhois.rpm'
@@ -47,10 +47,10 @@ class Chef
47
47
 
48
48
  **Install without using recommend packages as a dependency:**
49
49
 
50
- ``` ruby
50
+ ```ruby
51
51
  package 'apache2' do
52
52
  options '--no-recommends'
53
- end
53
+ end
54
54
  ```
55
55
  DOC
56
56
 
@@ -24,21 +24,37 @@ class Chef
24
24
  unified_mode true
25
25
 
26
26
  provides(:zypper_repository) { true }
27
- provides(:zypper_repo) { true }
27
+ provides(:zypper_repo) { true } # legacy cookbook compatibility
28
28
 
29
29
  description "Use the **zypper_repository** resource to create Zypper package repositories on SUSE Enterprise Linux and openSUSE systems. This resource maintains full compatibility with the **zypper_repository** resource in the existing **zypper** cookbook."
30
30
  introduced "13.3"
31
31
  examples <<~DOC
32
32
  **Add the Apache repo on openSUSE Leap 15**:
33
33
 
34
- ``` ruby
34
+ ```ruby
35
35
  zypper_repository 'apache' do
36
36
  baseurl 'http://download.opensuse.org/repositories/Apache'
37
- path '/openSUSE_Leap_15.0'
38
- type 'rpm-md'
37
+ path '/openSUSE_Leap_15.2'
38
+ type 'rpm-md'
39
39
  priority '100'
40
40
  end
41
41
  ```
42
+
43
+ **Remove the repo named 'apache'**:
44
+
45
+ ```ruby
46
+ zypper_repository 'apache' do
47
+ action :delete
48
+ end
49
+ ```
50
+
51
+ **Refresh the repo named 'apache'**:
52
+
53
+ ```ruby
54
+ zypper_repository 'apache' do
55
+ action :refresh
56
+ end
57
+ ```
42
58
  DOC
43
59
 
44
60
  property :repo_name, String,
@@ -66,8 +82,10 @@ class Chef
66
82
  description: "Determines whether or not to perform a GPG signature check on the repository.",
67
83
  default: true
68
84
 
69
- property :gpgkey, String,
70
- description: "The location of the repository key to be imported."
85
+ property :gpgkey, [String, Array],
86
+ description: "The location of the repository key(s) to be imported.",
87
+ coerce: proc { |v| Array(v) },
88
+ default: []
71
89
 
72
90
  property :baseurl, String,
73
91
  description: "The base URL for the Zypper repository, such as `http://download.opensuse.org`."
@@ -95,10 +113,12 @@ class Chef
95
113
  default: true
96
114
 
97
115
  property :source, String,
98
- description: "The name of the template for the repository file. Only necessary if you're not using the built in template."
116
+ description: "The name of the template for the repository file. Only necessary if you're using a custom template for the repository file."
99
117
 
100
118
  property :cookbook, String,
101
- description: "The cookbook to source the repository template file from. Only necessary if you're not using the built in template.",
119
+ description: "The cookbook to source the repository template file from. Only necessary if you're using a custom template for the repository file.",
120
+ default: lazy { cookbook_name },
121
+ default_description: "The cookbook containing the resource",
102
122
  desired_state: false
103
123
 
104
124
  property :gpgautoimportkeys, [TrueClass, FalseClass],
data/lib/chef/resource.rb CHANGED
@@ -1063,7 +1063,8 @@ class Chef
1063
1063
  # action for the resource.
1064
1064
  #
1065
1065
  # @param name [Symbol] The action name to define.
1066
- # @param description [String] optional description for the action
1066
+ # @param description [String] optional description for the action. Used for
1067
+ # documentation generation.
1067
1068
  # @param recipe_block The recipe to run when the action is taken. This block
1068
1069
  # takes no parameters, and will be evaluated in a new context containing:
1069
1070
  #
@@ -1076,11 +1077,8 @@ class Chef
1076
1077
  def self.action(action, description: nil, &recipe_block)
1077
1078
  action = action.to_sym
1078
1079
  declare_action_class
1079
- action_class.action(action, &recipe_block)
1080
+ action_class.action(action, description: description, &recipe_block)
1080
1081
  self.allowed_actions += [ action ]
1081
- # Accept any non-nil description, which will correctly override
1082
- # any specific inherited description.
1083
- action_descriptions[action] = description unless description.nil?
1084
1082
  default_action action if Array(default_action) == [:nothing]
1085
1083
  end
1086
1084
 
@@ -1090,18 +1088,15 @@ class Chef
1090
1088
  # @param action [Symbol,String] the action name
1091
1089
  # @return the description of the action provided, or nil if no description
1092
1090
  # was defined
1093
- def self.action_description(action)
1094
- action_descriptions[action.to_sym]
1095
- end
1096
-
1097
- # @api private
1098
- #
1099
- # @return existing action description hash, or newly-initialized
1100
- # hash containing action descriptions inherited from parent Resource,
1101
- # if any.
1102
- def self.action_descriptions
1103
- @action_descriptions ||=
1104
- superclass.respond_to?(:action_descriptions) ? superclass.action_descriptions.dup : { nothing: nil }
1091
+ def action_description(action)
1092
+ provider_for_action(action).class.action_description(action)
1093
+ rescue Chef::Exceptions::ProviderNotFound
1094
+ # If a provider can't be found, there can be no description defined on the provider.
1095
+ nil
1096
+ rescue NameError => e
1097
+ # This can happen when attempting to load a provider in a platform-specific
1098
+ # environment where we have not required the necessary files yet
1099
+ raise unless e.message =~ /uninitialized constant/
1105
1100
  end
1106
1101
 
1107
1102
  # Define a method to load up this resource's properties with the current
@@ -1191,6 +1186,7 @@ class Chef
1191
1186
  if superclass.custom_resource?
1192
1187
  superclass.action_class
1193
1188
  else
1189
+
1194
1190
  ActionClass
1195
1191
  end
1196
1192
 
@@ -23,6 +23,11 @@ require_relative "node"
23
23
  require_relative "resources"
24
24
  require_relative "json_compat"
25
25
 
26
+ # We need to require providers so that we can resolve
27
+ # action documentation that may have been defined on the providers
28
+ # instead of the resources.
29
+ require_relative "providers"
30
+
26
31
  class Chef
27
32
  module ResourceInspector
28
33
  def self.get_default(default)
@@ -39,11 +44,10 @@ class Chef
39
44
  def self.extract_resource(resource, complete = false)
40
45
  data = {}
41
46
  data[:description] = resource.description
42
- # data[:deprecated] = resource.deprecated || false
43
47
  data[:default_action] = resource.default_action
44
48
  data[:actions] = {}
45
49
  resource.allowed_actions.each do |action|
46
- data[:actions][action] = resource.action_description(action)
50
+ data[:actions][action] = resource.new(resource.to_s, nil).action_description(action)
47
51
  end
48
52
 
49
53
  data[:examples] = resource.examples
@@ -135,7 +135,6 @@ class Chef
135
135
 
136
136
  def action_collection_registration(action_collection)
137
137
  @action_collection = action_collection
138
- action_collection.register(self) if reporting_enabled?
139
138
  end
140
139
 
141
140
  def post_reporting_data
@@ -58,6 +58,14 @@ require_relative "resource/ips_package"
58
58
  require_relative "resource/gem_package"
59
59
  require_relative "resource/scm/git"
60
60
  require_relative "resource/group"
61
+ require_relative "resource/habitat/habitat_package"
62
+ require_relative "resource/habitat/habitat_sup"
63
+ require_relative "resource/habitat/habitat_sup_systemd"
64
+ require_relative "resource/habitat/habitat_sup_windows"
65
+ require_relative "resource/habitat_config"
66
+ require_relative "resource/habitat_install"
67
+ require_relative "resource/habitat_service"
68
+ require_relative "resource/habitat_user_toml"
61
69
  require_relative "resource/http_request"
62
70
  require_relative "resource/hostname"
63
71
  require_relative "resource/homebrew_cask"
@@ -148,6 +156,8 @@ require_relative "resource/windows_ad_join"
148
156
  require_relative "resource/windows_audit_policy"
149
157
  require_relative "resource/windows_auto_run"
150
158
  require_relative "resource/windows_certificate"
159
+ require_relative "resource/windows_defender"
160
+ require_relative "resource/windows_defender_exclusion"
151
161
  require_relative "resource/windows_dfs_folder"
152
162
  require_relative "resource/windows_dfs_namespace"
153
163
  require_relative "resource/windows_dfs_server"
@@ -167,7 +177,8 @@ require_relative "resource/windows_share"
167
177
  require_relative "resource/windows_shortcut"
168
178
  require_relative "resource/windows_task"
169
179
  require_relative "resource/windows_uac"
180
+ require_relative "resource/windows_update_settings"
170
181
  require_relative "resource/windows_workgroup"
171
182
  require_relative "resource/timezone"
172
183
  require_relative "resource/windows_user_privilege"
173
- require_relative "resource/windows_security_policy"
184
+ require_relative "resource/windows_security_policy"
@@ -0,0 +1,65 @@
1
+ #
2
+ # Author:: Marc Paradise (<marc@chef.io>)
3
+ # Copyright:: Copyright (c) Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require_relative "base"
20
+ require "aws-sdk-core"
21
+ require "aws-sdk-secretsmanager"
22
+
23
+ class Chef
24
+ # == Chef::SecretFetcher::AWSSecretsManager
25
+ # A fetcher that fetches a secret from AWS Secrets Manager
26
+ # In this initial iteration it defaults to authentication via instance profile.
27
+ # It is possible to pass options that configure it to use alternative credentials.
28
+ # This implementation supports fetching with version.
29
+ #
30
+ # @note ':region' is required configuration. If it is not explicitly provided,
31
+ # and it is not available via global AWS config, we will pull it from node ohai data by default.
32
+ # If this isn't correct, you will need to explicitly override it.
33
+ # If it is not available via ohai data either (such as if you have the AWS plugin disabled)
34
+ # then the converge will fail with an error.
35
+ #
36
+ # @note: This does not yet support automatic retries, which the AWS client does by default.
37
+ #
38
+ # For configuration options see https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/SecretsManager/Client.html#initialize-instance_method
39
+ #
40
+ #
41
+ # Usage Example:
42
+ #
43
+ # fetcher = SecretFetcher.for_service(:aws_secrets_manager)
44
+ # fetcher.fetch("secretkey1", "v1")
45
+ class SecretFetcher
46
+ class AWSSecretsManager < Base
47
+ def validate!
48
+ config[:region] = config[:region] || Aws.config[:region] || run_context.node.dig("ec2", "region")
49
+ if config[:region].nil?
50
+ raise Chef::Exceptions::Secret::ConfigurationInvalid.new("Missing required config for AWS secret fetcher: :region")
51
+ end
52
+ end
53
+
54
+ # @param identifier [String] the secret_id
55
+ # @param version [String] the secret version. Not usd at this time
56
+ # @return Aws::SecretsManager::Types::GetSecretValueResponse
57
+ def do_fetch(identifier, version)
58
+ client = Aws::SecretsManager::Client.new(config)
59
+ result = client.get_secret_value(secret_id: identifier, version_stage: version)
60
+ # These fields are mutually exclusive
61
+ result.secret_string || result.secret_binary
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,78 @@
1
+ require_relative "base"
2
+
3
+ class Chef
4
+ class SecretFetcher
5
+ # == Chef::SecretFetcher::AWSSecretsManager
6
+ # A fetcher that fetches a secret from Azure Key Vault. Supports fetching with version.
7
+ #
8
+ # In this initial iteration this authenticates via token obtained from the OAuth2 /token
9
+ # endpoint.
10
+ #
11
+ # Validation of required configuration (vault name) is not performed until
12
+ # `fetch` time, to allow for embedding the vault name in with the secret
13
+ # name, such as "my_vault/secretkey1".
14
+ #
15
+ # @example
16
+ #
17
+ # fetcher = SecretFetcher.for_service(:azure_key_vault, { vault: "my_vault" }, run_context )
18
+ # fetcher.fetch("secretkey1", "v1")
19
+ #
20
+ # @example
21
+ #
22
+ # fetcher = SecretFetcher.for_service(:azure_key_vault, {}, run_context )
23
+ # fetcher.fetch("my_vault/secretkey1", "v1")
24
+ class AzureKeyVault < Base
25
+
26
+ def do_fetch(name, version)
27
+ token = fetch_token
28
+ vault, name = resolve_vault_and_secret_name(name)
29
+ if vault.nil?
30
+ raise Chef::Exceptions::Secret::ConfigurationInvalid.new("You must provide a vault name to fetcher options as vault: 'vault_name' or in the secret name as 'vault_name/secret_name'")
31
+ end
32
+
33
+ # Note that `version` is optional after the final `/`. If nil/"", the latest secret version will be fetched.
34
+ secret_uri = URI.parse("https://#{vault}.vault.azure.net/secrets/#{name}/#{version}?api-version=7.2")
35
+ http = Net::HTTP.new(secret_uri.host, secret_uri.port)
36
+ http.use_ssl = true
37
+
38
+ response = http.get(secret_uri, { "Authorization" => "Bearer #{token}",
39
+ "Content-Type" => "application/json" })
40
+
41
+ # If an exception is not raised, we can be reasonably confident of the
42
+ # shape of the result.
43
+ result = JSON.parse(response.body)
44
+ if result.key? "value"
45
+ result["value"]
46
+ else
47
+ raise Chef::Exceptions::Secret::FetchFailed.new("#{result["error"]["code"]}: #{result["error"]["message"]}")
48
+ end
49
+ end
50
+
51
+ # Determine the vault name and secret name from the provided name.
52
+ # If it is not in the provided name in the form "vault_name/secret_name"
53
+ # it will determine the vault name from `config[:vault]`.
54
+ # @param name [String] the secret name or vault and secret name in the form "vault_name/secret_name"
55
+ # @return Array[String, String] vault and secret name respectively
56
+ def resolve_vault_and_secret_name(name)
57
+ # We support a simplified approach where the vault name is not passed i
58
+ # into configuration, but
59
+ if name.include?("/")
60
+ name.split("/", 2)
61
+ else
62
+ [config[:vault], name]
63
+ end
64
+ end
65
+
66
+ def fetch_token
67
+ token_uri = URI.parse("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net")
68
+ http = Net::HTTP.new(token_uri.host, token_uri.port)
69
+ response = http.get(token_uri, { "Metadata" => "true" })
70
+ body = JSON.parse(response.body)
71
+ body["access_token"]
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+
78
+