chef 17.2.29-universal-mingw32 → 17.5.22-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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -5
  3. data/chef.gemspec +3 -0
  4. data/lib/chef/application/base.rb +11 -1
  5. data/lib/chef/application.rb +3 -1
  6. data/lib/chef/client.rb +2 -3
  7. data/lib/chef/compliance/default_attributes.rb +5 -3
  8. data/lib/chef/compliance/input.rb +115 -0
  9. data/lib/chef/compliance/input_collection.rb +139 -0
  10. data/lib/chef/compliance/profile.rb +122 -0
  11. data/lib/chef/compliance/profile_collection.rb +109 -0
  12. data/lib/chef/compliance/reporter/automate.rb +1 -1
  13. data/lib/chef/compliance/runner.rb +62 -6
  14. data/lib/chef/compliance/waiver.rb +115 -0
  15. data/lib/chef/compliance/waiver_collection.rb +143 -0
  16. data/lib/chef/data_bag.rb +1 -2
  17. data/lib/chef/data_bag_item.rb +1 -2
  18. data/lib/chef/deprecated.rb +10 -4
  19. data/lib/chef/dsl/compliance.rb +38 -0
  20. data/lib/chef/dsl/reader_helpers.rb +51 -0
  21. data/lib/chef/dsl/recipe.rb +4 -2
  22. data/lib/chef/dsl/render_helpers.rb +44 -0
  23. data/lib/chef/dsl/secret.rb +62 -0
  24. data/lib/chef/dsl/toml.rb +116 -0
  25. data/lib/chef/dsl/universal.rb +7 -0
  26. data/lib/chef/dsl.rb +1 -0
  27. data/lib/chef/event_dispatch/base.rb +44 -2
  28. data/lib/chef/exceptions.rb +20 -0
  29. data/lib/chef/formatters/doc.rb +60 -13
  30. data/lib/chef/formatters/error_mapper.rb +2 -2
  31. data/lib/chef/formatters/minimal.rb +6 -5
  32. data/lib/chef/handler/slow_report.rb +1 -1
  33. data/lib/chef/http/basic_client.rb +15 -7
  34. data/lib/chef/http.rb +12 -8
  35. data/lib/chef/json_compat.rb +1 -1
  36. data/lib/chef/policy_builder/policyfile.rb +88 -45
  37. data/lib/chef/provider/execute.rb +1 -1
  38. data/lib/chef/provider/file.rb +4 -2
  39. data/lib/chef/provider/group/dscl.rb +1 -1
  40. data/lib/chef/provider/launchd.rb +6 -6
  41. data/lib/chef/provider/link.rb +2 -2
  42. data/lib/chef/provider/lwrp_base.rb +1 -1
  43. data/lib/chef/provider/package/habitat.rb +168 -0
  44. data/lib/chef/provider/package/powershell.rb +5 -0
  45. data/lib/chef/provider/registry_key.rb +3 -2
  46. data/lib/chef/provider/remote_file/http.rb +1 -1
  47. data/lib/chef/provider/subversion.rb +4 -4
  48. data/lib/chef/provider/support/yum_repo.erb +1 -1
  49. data/lib/chef/provider/systemd_unit.rb +17 -16
  50. data/lib/chef/provider/template.rb +1 -1
  51. data/lib/chef/provider/user/mac.rb +3 -3
  52. data/lib/chef/provider/yum_repository.rb +27 -43
  53. data/lib/chef/provider/zypper_repository.rb +3 -3
  54. data/lib/chef/provider.rb +26 -1
  55. data/lib/chef/provider_resolver.rb +8 -2
  56. data/lib/chef/providers.rb +1 -0
  57. data/lib/chef/resource/archive_file.rb +17 -14
  58. data/lib/chef/resource/chef_client_config.rb +7 -2
  59. data/lib/chef/resource/chef_client_cron.rb +1 -1
  60. data/lib/chef/resource/chef_client_launchd.rb +1 -1
  61. data/lib/chef/resource/chef_client_scheduled_task.rb +46 -3
  62. data/lib/chef/resource/chef_client_systemd_timer.rb +1 -1
  63. data/lib/chef/resource/chef_client_trusted_certificate.rb +2 -2
  64. data/lib/chef/resource/chef_vault_secret.rb +2 -2
  65. data/lib/chef/resource/chocolatey_config.rb +13 -13
  66. data/lib/chef/resource/dsc_resource.rb +1 -1
  67. data/lib/chef/resource/execute.rb +5 -5
  68. data/lib/chef/resource/file/verification/json.rb +50 -0
  69. data/lib/chef/resource/file/verification/yaml.rb +52 -0
  70. data/lib/chef/resource/gem_package.rb +2 -1
  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 +1 -1
  81. data/lib/chef/resource/inspec_input.rb +128 -0
  82. data/lib/chef/resource/inspec_waiver.rb +185 -0
  83. data/lib/chef/resource/inspec_waiver_file_entry.rb +2 -2
  84. data/lib/chef/resource/launchd.rb +3 -3
  85. data/lib/chef/resource/lwrp_base.rb +1 -1
  86. data/lib/chef/resource/mount.rb +1 -1
  87. data/lib/chef/resource/registry_key.rb +36 -48
  88. data/lib/chef/resource/remote_file.rb +99 -3
  89. data/lib/chef/resource/rhsm_subscription.rb +5 -5
  90. data/lib/chef/resource/ruby_block.rb +100 -0
  91. data/lib/chef/resource/scm/subversion.rb +1 -1
  92. data/lib/chef/resource/support/HabService.dll.config.erb +19 -0
  93. data/lib/chef/resource/support/client.erb +8 -1
  94. data/lib/chef/resource/support/sup.toml.erb +179 -0
  95. data/lib/chef/resource/sysctl.rb +2 -2
  96. data/lib/chef/resource/systemd_unit.rb +3 -3
  97. data/lib/chef/resource/timezone.rb +2 -2
  98. data/lib/chef/resource/user_ulimit.rb +1 -0
  99. data/lib/chef/resource/windows_defender.rb +163 -0
  100. data/lib/chef/resource/windows_defender_exclusion.rb +125 -0
  101. data/lib/chef/resource/windows_printer.rb +78 -44
  102. data/lib/chef/resource/windows_printer_port.rb +1 -1
  103. data/lib/chef/resource/windows_uac.rb +3 -1
  104. data/lib/chef/resource/windows_update_settings.rb +259 -0
  105. data/lib/chef/resource/windows_user_privilege.rb +1 -1
  106. data/lib/chef/resource/yum_package.rb +1 -5
  107. data/lib/chef/resource.rb +13 -17
  108. data/lib/chef/resource_inspector.rb +6 -2
  109. data/lib/chef/resources.rb +14 -1
  110. data/lib/chef/run_context/cookbook_compiler.rb +112 -28
  111. data/lib/chef/run_context.rb +31 -1
  112. data/lib/chef/secret_fetcher/akeyless_vault.rb +57 -0
  113. data/lib/chef/secret_fetcher/aws_secrets_manager.rb +65 -0
  114. data/lib/chef/secret_fetcher/azure_key_vault.rb +78 -0
  115. data/lib/chef/secret_fetcher/base.rb +76 -0
  116. data/lib/chef/secret_fetcher/example.rb +46 -0
  117. data/lib/chef/secret_fetcher/hashi_vault.rb +100 -0
  118. data/lib/chef/secret_fetcher.rb +61 -0
  119. data/lib/chef/version.rb +1 -1
  120. data/spec/data/archive_file/test_archive.tar.gz +0 -0
  121. data/spec/functional/mixin/from_file_spec.rb +1 -1
  122. data/spec/functional/resource/archive_file_spec.rb +87 -0
  123. data/spec/functional/resource/group_spec.rb +5 -1
  124. data/spec/functional/resource/link_spec.rb +8 -0
  125. data/spec/integration/compliance/compliance_spec.rb +61 -0
  126. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -1
  127. data/spec/integration/recipes/resource_action_spec.rb +6 -6
  128. data/spec/spec_helper.rb +3 -0
  129. data/spec/support/platform_helpers.rb +4 -0
  130. data/spec/support/ruby_installer.rb +51 -0
  131. data/spec/support/shared/unit/provider/file.rb +2 -8
  132. data/spec/unit/compliance/input_spec.rb +104 -0
  133. data/spec/unit/compliance/profile_spec.rb +120 -0
  134. data/spec/unit/compliance/runner_spec.rb +46 -2
  135. data/spec/unit/compliance/waiver_spec.rb +104 -0
  136. data/spec/unit/data_bag_item_spec.rb +2 -2
  137. data/spec/unit/data_bag_spec.rb +1 -1
  138. data/spec/unit/dsl/render_helpers_spec.rb +102 -0
  139. data/spec/unit/dsl/secret_spec.rb +71 -0
  140. data/spec/unit/formatters/doc_spec.rb +1 -1
  141. data/spec/unit/http/basic_client_spec.rb +30 -0
  142. data/spec/unit/http_spec.rb +8 -2
  143. data/spec/unit/policy_builder/dynamic_spec.rb +0 -5
  144. data/spec/unit/policy_builder/policyfile_spec.rb +144 -56
  145. data/spec/unit/provider/apt_update_spec.rb +3 -1
  146. data/spec/unit/provider/link_spec.rb +13 -7
  147. data/spec/unit/provider/mount/aix_spec.rb +1 -1
  148. data/spec/unit/provider/package/powershell_spec.rb +74 -12
  149. data/spec/unit/provider/remote_file/http_spec.rb +10 -0
  150. data/spec/unit/provider/template_spec.rb +2 -2
  151. data/spec/unit/provider_spec.rb +23 -0
  152. data/spec/unit/resource/archive_file_spec.rb +414 -3
  153. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +69 -0
  154. data/spec/unit/resource/file/verification/json_spec.rb +72 -0
  155. data/spec/unit/resource/file/verification/yaml_spec.rb +67 -0
  156. data/spec/unit/resource/homebrew_cask_spec.rb +29 -11
  157. data/spec/unit/resource/inspec_input_spec.rb +300 -0
  158. data/spec/unit/resource/inspec_waiver_spec.rb +312 -0
  159. data/spec/unit/resource/mount_spec.rb +10 -0
  160. data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
  161. data/spec/unit/resource/systemd_unit_spec.rb +1 -1
  162. data/spec/unit/resource/user_ulimit_spec.rb +14 -1
  163. data/spec/unit/resource/windows_defender_exclusion_spec.rb +62 -0
  164. data/spec/unit/resource/windows_defender_spec.rb +71 -0
  165. data/spec/unit/resource/windows_update_settings_spec.rb +64 -0
  166. data/spec/unit/resource_spec.rb +19 -8
  167. data/spec/unit/secret_fetcher/akeyless_vault_spec.rb +37 -0
  168. data/spec/unit/secret_fetcher/aws_secrets_manager_spec.rb +70 -0
  169. data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +70 -0
  170. data/spec/unit/secret_fetcher/hashi_vault_spec.rb +80 -0
  171. data/spec/unit/secret_fetcher_spec.rb +82 -0
  172. data/tasks/rspec.rb +2 -1
  173. metadata +106 -7
@@ -0,0 +1,116 @@
1
+ require "date"
2
+
3
+ # imported from https://github.com/chef-cookbooks/habitat
4
+ class Chef
5
+ module DSL
6
+ module Toml
7
+ class Dumper
8
+ attr_reader :toml_str
9
+
10
+ def initialize(hash)
11
+ @toml_str = ""
12
+
13
+ visit(hash, [])
14
+ end
15
+
16
+ private
17
+
18
+ def visit(hash, prefix, extra_brackets = false)
19
+ simple_pairs, nested_pairs, table_array_pairs = sort_pairs hash
20
+
21
+ if prefix.any? && (simple_pairs.any? || hash.empty?)
22
+ print_prefix prefix, extra_brackets
23
+ end
24
+
25
+ dump_pairs simple_pairs, nested_pairs, table_array_pairs, prefix
26
+ end
27
+
28
+ def sort_pairs(hash)
29
+ nested_pairs = []
30
+ simple_pairs = []
31
+ table_array_pairs = []
32
+
33
+ hash.keys.sort.each do |key|
34
+ val = hash[key]
35
+ element = [key, val]
36
+
37
+ if val.is_a? Hash
38
+ nested_pairs << element
39
+ elsif val.is_a?(Array) && val.first.is_a?(Hash)
40
+ table_array_pairs << element
41
+ else
42
+ simple_pairs << element
43
+ end
44
+ end
45
+
46
+ [simple_pairs, nested_pairs, table_array_pairs]
47
+ end
48
+
49
+ def dump_pairs(simple, nested, table_array, prefix = [])
50
+ # First add simple pairs, under the prefix
51
+ dump_simple_pairs simple
52
+ dump_nested_pairs nested, prefix
53
+ dump_table_array_pairs table_array, prefix
54
+ end
55
+
56
+ def dump_simple_pairs(simple_pairs)
57
+ simple_pairs.each do |key, val|
58
+ key = quote_key(key) unless bare_key? key
59
+ @toml_str << "#{key} = #{to_toml(val)}\n"
60
+ end
61
+ end
62
+
63
+ def dump_nested_pairs(nested_pairs, prefix)
64
+ nested_pairs.each do |key, val|
65
+ key = quote_key(key) unless bare_key? key
66
+
67
+ visit val, prefix + [key], false
68
+ end
69
+ end
70
+
71
+ def dump_table_array_pairs(table_array_pairs, prefix)
72
+ table_array_pairs.each do |key, val|
73
+ key = quote_key(key) unless bare_key? key
74
+ aux_prefix = prefix + [key]
75
+
76
+ val.each do |child|
77
+ print_prefix aux_prefix, true
78
+ args = sort_pairs(child) << aux_prefix
79
+
80
+ dump_pairs(*args)
81
+ end
82
+ end
83
+ end
84
+
85
+ def print_prefix(prefix, array = false)
86
+ new_prefix = prefix.join(".")
87
+ new_prefix = "[#{new_prefix}]" if array
88
+
89
+ @toml_str += "[#{new_prefix}]\n"
90
+ end
91
+
92
+ def to_toml(obj)
93
+ if obj.is_a?(Time) || obj.is_a?(DateTime)
94
+ obj.strftime("%Y-%m-%dT%H:%M:%SZ")
95
+ elsif obj.is_a?(Date)
96
+ obj.strftime("%Y-%m-%d")
97
+ elsif obj.is_a? Regexp
98
+ obj.inspect.inspect
99
+ elsif obj.is_a? String
100
+ obj.inspect.gsub(/\\(#[$@{])/, '\1')
101
+ else
102
+ obj.inspect
103
+ end
104
+ end
105
+
106
+ def bare_key?(key)
107
+ !!key.to_s.match(/^[a-zA-Z0-9_-]*$/)
108
+ end
109
+
110
+ def quote_key(key)
111
+ '"' + key.gsub('"', '\\"') + '"'
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -22,6 +22,10 @@ require_relative "data_query"
22
22
  require_relative "chef_vault"
23
23
  require_relative "registry_helper"
24
24
  require_relative "powershell"
25
+ require_relative "secret"
26
+ require_relative "reader_helpers"
27
+ require_relative "render_helpers"
28
+ require_relative "toml"
25
29
  require_relative "../mixin/powershell_exec"
26
30
  require_relative "../mixin/powershell_out"
27
31
  require_relative "../mixin/shell_out"
@@ -47,6 +51,9 @@ class Chef
47
51
  include Chef::DSL::ChefVault
48
52
  include Chef::DSL::RegistryHelper
49
53
  include Chef::DSL::Powershell
54
+ include Chef::DSL::ReaderHelpers
55
+ include Chef::DSL::RenderHelpers
56
+ include Chef::DSL::Secret
50
57
  include Chef::Mixin::PowershellExec
51
58
  include Chef::Mixin::PowershellOut
52
59
  include Chef::Mixin::ShellOut
data/lib/chef/dsl.rb CHANGED
@@ -4,3 +4,4 @@ require_relative "dsl/data_query"
4
4
  require_relative "dsl/include_recipe"
5
5
  require_relative "dsl/include_attribute"
6
6
  require_relative "dsl/registry_helper"
7
+ require_relative "dsl/secret"
@@ -164,7 +164,7 @@ class Chef
164
164
  # Called when LWRPs are finished loading
165
165
  def lwrp_load_complete; end
166
166
 
167
- # Called when an ohai plugin file loading starts
167
+ # Called when ohai plugin file loading starts
168
168
  def ohai_plugin_load_start(file_count); end
169
169
 
170
170
  # Called when an ohai plugin file has been loaded
@@ -173,9 +173,51 @@ class Chef
173
173
  # Called when an ohai plugin file has an error on load.
174
174
  def ohai_plugin_file_load_failed(path, exception); end
175
175
 
176
- # Called when an ohai plugin file loading has finished
176
+ # Called when ohai plugin file loading has finished
177
177
  def ohai_plugin_load_complete; end
178
178
 
179
+ # Called when compliance file loading starts
180
+ def compliance_load_start; end
181
+
182
+ # Called when compliance file loading ends
183
+ def compliance_load_complete; end
184
+
185
+ # Called when compliance profile loading starts
186
+ def profiles_load_start; end
187
+
188
+ # Called when compliance profile loading end
189
+ def profiles_load_complete; end
190
+
191
+ # Called when compliance input loading starts
192
+ def inputs_load_start; end
193
+
194
+ # Called when compliance input loading end
195
+ def inputs_load_complete; end
196
+
197
+ # Called when compliance waiver loading starts
198
+ def waivers_load_start; end
199
+
200
+ # Called when compliance waiver loading end
201
+ def waivers_load_complete; end
202
+
203
+ # Called when a compliance profile is found in a cookbook by the cookbook_compiler
204
+ def compliance_profile_loaded(profile); end
205
+
206
+ # Called when a compliance waiver is found in a cookbook by the cookbook_compiler
207
+ def compliance_waiver_loaded(waiver); end
208
+
209
+ # Called when a compliance waiver is found in a cookbook by the cookbook_compiler
210
+ def compliance_input_loaded(input); end
211
+
212
+ # Called when a compliance profile is enabled (by include_profile)
213
+ def compliance_profile_enabled(profile); end
214
+
215
+ # Called when a compliance waiver is enabled (by include_waiver)
216
+ def compliance_waiver_enabled(waiver); end
217
+
218
+ # Called when a compliance input is enabled (by include_input)
219
+ def compliance_input_enabled(input); end
220
+
179
221
  # Called before attribute files are loaded
180
222
  def attribute_load_start(attribute_file_count); end
181
223
 
@@ -290,6 +290,26 @@ class Chef
290
290
 
291
291
  end
292
292
 
293
+ class Secret
294
+ class RetrievalError < RuntimeError; end
295
+ class ConfigurationInvalid < RuntimeError; end
296
+ class FetchFailed < RuntimeError; end
297
+ class MissingSecretName < RuntimeError; end
298
+ class InvalidSecretName < RuntimeError; end
299
+
300
+ class InvalidFetcherService < RuntimeError
301
+ def initialize(given, fetcher_service_names)
302
+ super("#{given} is not a supported secrets service. Supported services are: :#{fetcher_service_names.join(" :")}")
303
+ end
304
+ end
305
+
306
+ class MissingFetcher < RuntimeError
307
+ def initialize(fetcher_service_names)
308
+ super("No secret service provided. Supported services are: :#{fetcher_service_names.join(" :")}")
309
+ end
310
+ end
311
+ end
312
+
293
313
  # Exception class for collecting multiple failures. Used when running
294
314
  # delayed notifications so that chef can process each delayed
295
315
  # notification even if chef client or other notifications fail.
@@ -41,10 +41,11 @@ class Chef
41
41
  end
42
42
 
43
43
  def run_start(version, run_status)
44
- puts_line "Starting #{ChefUtils::Dist::Infra::PRODUCT}, version #{version}"
44
+ puts_line "#{ChefUtils::Dist::Infra::PRODUCT}, version #{version}"
45
45
  puts_line "Patents: #{ChefUtils::Dist::Org::PATENTS}"
46
- puts_line "Targeting node: #{Chef::Config.target_mode.host}" if Chef::Config.target_mode?
47
46
  puts_line "OpenSSL FIPS 140 mode enabled" if Chef::Config[:fips]
47
+ puts_line "Infra Phase starting"
48
+ puts_line "Targeting node: #{Chef::Config.target_mode.host}" if Chef::Config.target_mode?
48
49
  end
49
50
 
50
51
  def total_resources
@@ -79,18 +80,18 @@ class Chef
79
80
  puts_line ""
80
81
  end
81
82
  if Chef::Config[:why_run]
82
- puts_line "#{ChefUtils::Dist::Infra::PRODUCT} finished, #{@updated_resources}/#{total_resources} resources would have been updated"
83
+ puts_line "Infra Phase complete, #{@updated_resources}/#{total_resources} resources would have been updated"
83
84
  else
84
- puts_line "#{ChefUtils::Dist::Infra::PRODUCT} finished, #{@updated_resources}/#{total_resources} resources updated in #{pretty_elapsed_time}"
85
+ puts_line "Infra Phase complete, #{@updated_resources}/#{total_resources} resources updated in #{pretty_elapsed_time}"
85
86
  end
86
87
  end
87
88
 
88
89
  def run_failed(exception)
89
90
  @end_time = Time.now
90
91
  if Chef::Config[:why_run]
91
- puts_line "#{ChefUtils::Dist::Infra::PRODUCT} failed. #{@updated_resources} resources would have been updated"
92
+ puts_line "Infra Phase failed. #{@updated_resources} resources would have been updated"
92
93
  else
93
- puts_line "#{ChefUtils::Dist::Infra::PRODUCT} failed. #{@updated_resources} resources updated in #{pretty_elapsed_time}"
94
+ puts_line "Infra Phase failed. #{@updated_resources} resources updated in #{pretty_elapsed_time}"
94
95
  end
95
96
  end
96
97
 
@@ -119,12 +120,12 @@ class Chef
119
120
  def node_load_completed(node, expanded_run_list, config); end
120
121
 
121
122
  def policyfile_loaded(policy)
122
- puts_line "Using policy '#{policy["name"]}' at revision '#{policy["revision_id"]}'"
123
+ puts_line "Using Policyfile '#{policy["name"]}' at revision '#{policy["revision_id"]}'"
123
124
  end
124
125
 
125
126
  # Called before the cookbook collection is fetched from the server.
126
127
  def cookbook_resolution_start(expanded_run_list)
127
- puts_line "resolving cookbooks for run list: #{expanded_run_list.inspect}"
128
+ puts_line "Resolving cookbooks for run list: #{expanded_run_list.inspect}"
128
129
  end
129
130
 
130
131
  # Called when there is an error getting the cookbook collection from the
@@ -149,7 +150,7 @@ class Chef
149
150
 
150
151
  # Called before cookbook sync starts
151
152
  def cookbook_sync_start(cookbook_count)
152
- puts_line "Synchronizing Cookbooks:"
153
+ puts_line "Synchronizing cookbooks:"
153
154
  indent
154
155
  end
155
156
 
@@ -168,7 +169,7 @@ class Chef
168
169
 
169
170
  # Called when starting to collect gems from the cookbooks
170
171
  def cookbook_gem_start(gems)
171
- puts_line "Installing Cookbook Gems:"
172
+ puts_line "Installing cookbook gem dependencies:"
172
173
  indent
173
174
  end
174
175
 
@@ -194,7 +195,7 @@ class Chef
194
195
 
195
196
  # Called when cookbook loading starts.
196
197
  def library_load_start(file_count)
197
- puts_line "Compiling Cookbooks..."
198
+ puts_line "Compiling cookbooks..."
198
199
  end
199
200
 
200
201
  # Called after a file in a cookbook is loaded.
@@ -280,7 +281,7 @@ class Chef
280
281
  end
281
282
 
282
283
  def resource_bypassed(resource, action, provider)
283
- puts " (Skipped: whyrun not supported by provider #{provider.class.name})", stream: resource
284
+ puts " (Skipped: Why-Run not supported by provider #{provider.class.name})", stream: resource
284
285
  unindent
285
286
  end
286
287
 
@@ -317,7 +318,7 @@ class Chef
317
318
  # Called when resource current state load is skipped due to the provider
318
319
  # not supporting whyrun mode.
319
320
  def resource_current_state_load_bypassed(resource, action, current_resource)
320
- puts_line("* Whyrun not supported for #{resource}, bypassing load.", :yellow)
321
+ puts_line("* Why-Run not supported for #{resource}, bypassing load.", :yellow)
321
322
  end
322
323
 
323
324
  def stream_output(stream, output, options = {})
@@ -362,6 +363,52 @@ class Chef
362
363
  end
363
364
  end
364
365
 
366
+ # Called when compliance profile loading starts
367
+ def profiles_load_start
368
+ puts_line("Loading #{Inspec::Dist::PRODUCT_NAME} profile files:")
369
+ end
370
+
371
+ # Called when compliance input loading starts
372
+ def inputs_load_start
373
+ puts_line("Loading #{Inspec::Dist::PRODUCT_NAME} input files:")
374
+ end
375
+
376
+ # Called when compliance waiver loading starts
377
+ def waivers_load_start
378
+ puts_line("Loading #{Inspec::Dist::PRODUCT_NAME} waiver files:")
379
+ end
380
+
381
+ # Called when a compliance profile is found in a cookbook by the cookbook_compiler
382
+ def compliance_profile_loaded(profile)
383
+ start_line(" - #{profile.cookbook_name}::#{profile.pathname}", :cyan)
384
+ puts " (#{profile.version})", :cyan if profile.version
385
+ end
386
+
387
+ # Called when a compliance waiver is found in a cookbook by the cookbook_compiler
388
+ def compliance_input_loaded(input)
389
+ puts_line(" - #{input.cookbook_name}::#{input.pathname}", :cyan)
390
+ end
391
+
392
+ # Called when a compliance waiver is found in a cookbook by the cookbook_compiler
393
+ def compliance_waiver_loaded(waiver)
394
+ puts_line(" - #{waiver.cookbook_name}::#{waiver.pathname}", :cyan)
395
+ end
396
+
397
+ # Called when a compliance profile is enabled (by include_profile)
398
+ def compliance_profile_enabled(profile)
399
+ # puts_line(" * FIXME", :cyan)
400
+ end
401
+
402
+ # Called when a compliance waiver is enabled (by include_waiver)
403
+ def compliance_waiver_enabled(waiver)
404
+ # puts_line(" * FIXME", :cyan)
405
+ end
406
+
407
+ # Called when a compliance input is enabled (by include_input)
408
+ def compliance_input_enabled(input)
409
+ # puts_line(" * FIXME", :cyan)
410
+ end
411
+
365
412
  # (see Base#deprecation)
366
413
  def deprecation(deprecation, _location = nil)
367
414
  if Chef::Config[:treat_deprecation_warnings_as_errors]
@@ -27,7 +27,7 @@ class Chef
27
27
  # Failed to register this client with the server.
28
28
  def self.registration_failed(node_name, exception, config)
29
29
  error_inspector = ErrorInspectors::RegistrationErrorInspector.new(node_name, exception, config)
30
- headline = "Chef encountered an error attempting to create the client \"#{node_name}\""
30
+ headline = "Chef Infra Client encountered an error attempting to create the client \"#{node_name}\""
31
31
  description = ErrorDescription.new(headline)
32
32
  error_inspector.add_explanation(description)
33
33
  description
@@ -35,7 +35,7 @@ class Chef
35
35
 
36
36
  def self.node_load_failed(node_name, exception, config)
37
37
  error_inspector = ErrorInspectors::NodeLoadErrorInspector.new(node_name, exception, config)
38
- headline = "Chef encountered an error attempting to load the node data for \"#{node_name}\""
38
+ headline = "Chef Infra Client encountered an error attempting to load the node data for \"#{node_name}\""
39
39
  description = ErrorDescription.new(headline)
40
40
  error_inspector.add_explanation(description)
41
41
  description
@@ -28,20 +28,21 @@ class Chef
28
28
 
29
29
  # Called at the very start of a Chef Run
30
30
  def run_start(version, run_status)
31
- puts_line "Starting #{ChefUtils::Dist::Infra::PRODUCT}, version #{version}"
31
+ puts_line "#{ChefUtils::Dist::Infra::PRODUCT}, version #{version}"
32
32
  puts_line "Patents: #{ChefUtils::Dist::Org::PATENTS}"
33
- puts_line "Targeting node: #{Chef::Config.target_mode.host}" if Chef::Config.target_mode?
34
33
  puts_line "OpenSSL FIPS 140 mode enabled" if Chef::Config[:fips]
34
+ puts_line "Infra Phase starting"
35
+ puts_line "Targeting node: #{Chef::Config.target_mode.host}" if Chef::Config.target_mode?
35
36
  end
36
37
 
37
38
  # Called at the end of the Chef run.
38
39
  def run_completed(node)
39
- puts "#{ChefUtils::Dist::Infra::PRODUCT} finished, #{@updated_resources.size} resources updated"
40
+ puts "Infra phase complete, #{@updated_resources.size} resources updated"
40
41
  end
41
42
 
42
43
  # called at the end of a failed run
43
44
  def run_failed(exception)
44
- puts "#{ChefUtils::Dist::Infra::PRODUCT} failed. #{@updated_resources.size} resources updated"
45
+ puts "Infra phase failed. #{@updated_resources.size} resources updated"
45
46
  end
46
47
 
47
48
  # Called right after ohai runs.
@@ -71,7 +72,7 @@ class Chef
71
72
 
72
73
  # Called before the cookbook collection is fetched from the server.
73
74
  def cookbook_resolution_start(expanded_run_list)
74
- puts "resolving cookbooks for run list: #{expanded_run_list.inspect}"
75
+ puts "Resolving cookbooks for run list: #{expanded_run_list.inspect}"
75
76
  end
76
77
 
77
78
  # Called when there is an error getting the cookbook collection from the
@@ -59,7 +59,7 @@ class Chef
59
59
 
60
60
  def stripped_source_line(resource)
61
61
  # strip the leading path off of the source line
62
- resource.source_line.gsub(%r{.*/cookbooks/}, "").gsub(%r{.*/chef-[0-9\.]+/}, "")
62
+ resource.source_line&.gsub(%r{.*/cookbooks/}, "")&.gsub(%r{.*/chef-[0-9\.]+/}, "")
63
63
  end
64
64
  end
65
65
  end
@@ -36,16 +36,18 @@ class Chef
36
36
  attr_reader :url
37
37
  attr_reader :ssl_policy
38
38
  attr_reader :keepalives
39
+ attr_reader :nethttp_opts
39
40
 
40
41
  # Instantiate a BasicClient.
41
42
  # === Arguments:
42
43
  # url:: An URI for the remote server.
43
44
  # === Options:
44
45
  # ssl_policy:: The SSL Policy to use, defaults to DefaultSSLPolicy
45
- def initialize(url, opts = {})
46
+ def initialize(url, ssl_policy: DefaultSSLPolicy, keepalives: false, nethttp_opts: {})
46
47
  @url = url
47
- @ssl_policy = opts[:ssl_policy] || DefaultSSLPolicy
48
- @keepalives = opts[:keepalives] || false
48
+ @ssl_policy = ssl_policy
49
+ @keepalives = keepalives
50
+ @nethttp_opts = ChefUtils::Mash.new(nethttp_opts)
49
51
  end
50
52
 
51
53
  def http_client
@@ -118,8 +120,14 @@ class Chef
118
120
  configure_ssl(http_client)
119
121
  end
120
122
 
121
- http_client.read_timeout = config[:rest_timeout]
122
- http_client.open_timeout = config[:rest_timeout]
123
+ opts = nethttp_opts.dup
124
+ opts["read_timeout"] ||= config[:rest_timeout]
125
+ opts["open_timeout"] ||= config[:rest_timeout]
126
+
127
+ opts.each do |key, value|
128
+ http_client.send(:"#{key}=", value)
129
+ end
130
+
123
131
  if keepalives
124
132
  http_client.start
125
133
  else
@@ -142,11 +150,11 @@ class Chef
142
150
  end
143
151
 
144
152
  def http_proxy_user(proxy_uri)
145
- proxy_uri.user || Chef::Config["#{proxy_uri.scheme}_proxy_user"]
153
+ proxy_uri.user || config["#{proxy_uri.scheme}_proxy_user"]
146
154
  end
147
155
 
148
156
  def http_proxy_pass(proxy_uri)
149
- proxy_uri.password || Chef::Config["#{proxy_uri.scheme}_proxy_pass"]
157
+ proxy_uri.password || config["#{proxy_uri.scheme}_proxy_pass"]
150
158
  end
151
159
 
152
160
  def configure_ssl(http_client)
data/lib/chef/http.rb CHANGED
@@ -82,6 +82,9 @@ class Chef
82
82
  # [Boolean] if we're doing keepalives or not
83
83
  attr_reader :keepalives
84
84
 
85
+ # @returns [Hash] options for Net::HTTP to be sent to setters on the object
86
+ attr_reader :nethttp_opts
87
+
85
88
  # Create a HTTP client object. The supplied +url+ is used as the base for
86
89
  # all subsequent requests. For example, when initialized with a base url
87
90
  # http://localhost:4000, a call to +get+ with 'nodes' will make an
@@ -94,6 +97,7 @@ class Chef
94
97
  @redirect_limit = 10
95
98
  @keepalives = options[:keepalives] || false
96
99
  @options = options
100
+ @nethttp_opts = options[:nethttp] || {}
97
101
 
98
102
  @middlewares = []
99
103
  self.class.middlewares.each do |middleware_class|
@@ -311,7 +315,7 @@ class Chef
311
315
 
312
316
  SocketlessChefZeroClient.new(base_url)
313
317
  else
314
- BasicClient.new(base_url, ssl_policy: ssl_policy, keepalives: keepalives)
318
+ BasicClient.new(base_url, ssl_policy: ssl_policy, keepalives: keepalives, nethttp_opts: nethttp_opts)
315
319
  end
316
320
  end
317
321
 
@@ -423,7 +427,7 @@ class Chef
423
427
  if response.is_a?(Net::HTTPServerError) && !Chef::Config.local_mode
424
428
  if http_retry_count - http_attempts >= 0
425
429
  sleep_time = 1 + (2**http_attempts) + rand(2**http_attempts)
426
- Chef::Log.error("Server returned error #{response.code} for #{url}, retrying #{http_attempts}/#{http_retry_count} in #{sleep_time}s")
430
+ Chef::Log.warn("Server returned error #{response.code} for #{url}, retrying #{http_attempts}/#{http_retry_count} in #{sleep_time}s") # Updated from error to warn
427
431
  sleep(sleep_time)
428
432
  redo
429
433
  end
@@ -432,7 +436,7 @@ class Chef
432
436
  end
433
437
  rescue SocketError, Errno::ETIMEDOUT, Errno::ECONNRESET => e
434
438
  if http_retry_count - http_attempts >= 0
435
- Chef::Log.error("Error connecting to #{url}, retry #{http_attempts}/#{http_retry_count}")
439
+ Chef::Log.warn("Error connecting to #{url}, retry #{http_attempts}/#{http_retry_count}") # Updated from error to warn
436
440
  sleep(http_retry_delay)
437
441
  retry
438
442
  end
@@ -440,21 +444,21 @@ class Chef
440
444
  raise e
441
445
  rescue Errno::ECONNREFUSED
442
446
  if http_retry_count - http_attempts >= 0
443
- Chef::Log.error("Connection refused connecting to #{url}, retry #{http_attempts}/#{http_retry_count}")
447
+ Chef::Log.warn("Connection refused connecting to #{url}, retry #{http_attempts}/#{http_retry_count}") # Updated from error to warn
444
448
  sleep(http_retry_delay)
445
449
  retry
446
450
  end
447
451
  raise Errno::ECONNREFUSED, "Connection refused connecting to #{url}, giving up"
448
452
  rescue Timeout::Error
449
453
  if http_retry_count - http_attempts >= 0
450
- Chef::Log.error("Timeout connecting to #{url}, retry #{http_attempts}/#{http_retry_count}")
454
+ Chef::Log.warn("Timeout connecting to #{url}, retry #{http_attempts}/#{http_retry_count}") # Updated from error to warn
451
455
  sleep(http_retry_delay)
452
456
  retry
453
457
  end
454
458
  raise Timeout::Error, "Timeout connecting to #{url}, giving up"
455
459
  rescue OpenSSL::SSL::SSLError => e
456
460
  if (http_retry_count - http_attempts >= 0) && !e.message.include?("certificate verify failed")
457
- Chef::Log.error("SSL Error connecting to #{url}, retry #{http_attempts}/#{http_retry_count}")
461
+ Chef::Log.warn("SSL Error connecting to #{url}, retry #{http_attempts}/#{http_retry_count}") # Updated from error to warn
458
462
  sleep(http_retry_delay)
459
463
  retry
460
464
  end
@@ -468,12 +472,12 @@ class Chef
468
472
 
469
473
  # @api private
470
474
  def http_retry_delay
471
- config[:http_retry_delay]
475
+ options[:http_retry_delay] || config[:http_retry_delay]
472
476
  end
473
477
 
474
478
  # @api private
475
479
  def http_retry_count
476
- config[:http_retry_count]
480
+ options[:http_retry_count] || config[:http_retry_count]
477
481
  end
478
482
 
479
483
  # @api private
@@ -25,7 +25,7 @@ require "json" unless defined?(JSON)
25
25
  class Chef
26
26
  class JSONCompat
27
27
 
28
- class <<self
28
+ class << self
29
29
 
30
30
  def parse(source, opts = {})
31
31
  FFI_Yajl::Parser.parse(source, opts)