chef 17.2.29-universal-mingw32 → 17.5.22-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
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)