chef 14.0.190 → 14.0.202

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/acceptance/.DS_Store +0 -0
  4. data/acceptance/.bundle/config +1 -0
  5. data/bin/chef-resource-inspector +26 -0
  6. data/chef.gemspec +2 -2
  7. data/lib/.DS_Store +0 -0
  8. data/lib/chef/.DS_Store +0 -0
  9. data/lib/chef/chef_fs/chef_fs_data_store.rb +27 -19
  10. data/lib/chef/dsl/declare_resource.rb +23 -1
  11. data/lib/chef/knife.rb +5 -3
  12. data/lib/chef/knife/.DS_Store +0 -0
  13. data/lib/chef/knife/core/bootstrap_context.rb +5 -1
  14. data/lib/chef/knife/ssh.rb +1 -1
  15. data/lib/chef/mixin/.DS_Store +0 -0
  16. data/lib/chef/provider.rb +5 -0
  17. data/lib/chef/provider/.DS_Store +0 -0
  18. data/lib/chef/provider/package/.DS_Store +0 -0
  19. data/lib/chef/provider/package/yum/python_helper.rb +4 -4
  20. data/lib/chef/provider/package/yum/yum_helper.py +21 -14
  21. data/lib/chef/provider/route.rb +3 -1
  22. data/lib/chef/recipe.rb +1 -7
  23. data/lib/chef/resource.rb +2 -20
  24. data/lib/chef/resource/.DS_Store +0 -0
  25. data/lib/chef/resource/apt_preference.rb +1 -1
  26. data/lib/chef/resource/apt_repository.rb +1 -1
  27. data/lib/chef/resource/apt_update.rb +1 -1
  28. data/lib/chef/resource/build_essential.rb +1 -1
  29. data/lib/chef/resource/chef_handler.rb +1 -1
  30. data/lib/chef/resource/dmg_package.rb +1 -0
  31. data/lib/chef/resource/file/.DS_Store +0 -0
  32. data/lib/chef/resource/homebrew_cask.rb +1 -0
  33. data/lib/chef/resource/homebrew_tap.rb +1 -0
  34. data/lib/chef/resource/macos_userdefaults.rb +4 -4
  35. data/lib/chef/resource/ohai_hint.rb +1 -1
  36. data/lib/chef/resource/openssl_dhparam.rb +1 -0
  37. data/lib/chef/resource/openssl_rsa_private_key.rb +2 -2
  38. data/lib/chef/resource/openssl_rsa_public_key.rb +1 -0
  39. data/lib/chef/resource/registry_key.rb +1 -1
  40. data/lib/chef/resource/rhsm_errata.rb +1 -0
  41. data/lib/chef/resource/rhsm_errata_level.rb +1 -0
  42. data/lib/chef/resource/rhsm_register.rb +9 -6
  43. data/lib/chef/resource/rhsm_repo.rb +1 -0
  44. data/lib/chef/resource/rhsm_subscription.rb +1 -0
  45. data/lib/chef/resource/route.rb +1 -1
  46. data/lib/chef/resource/sudo.rb +2 -2
  47. data/lib/chef/resource/swap_file.rb +1 -1
  48. data/lib/chef/resource/sysctl.rb +2 -2
  49. data/lib/chef/resource/systemd_unit.rb +1 -1
  50. data/lib/chef/resource/windows_auto_run.rb +1 -1
  51. data/lib/chef/resource/windows_feature.rb +1 -1
  52. data/lib/chef/resource/windows_feature_dism.rb +1 -1
  53. data/lib/chef/resource/windows_feature_powershell.rb +1 -1
  54. data/lib/chef/resource/windows_font.rb +1 -1
  55. data/lib/chef/resource/windows_package.rb +1 -1
  56. data/lib/chef/resource/windows_pagefile.rb +1 -1
  57. data/lib/chef/resource/windows_path.rb +1 -1
  58. data/lib/chef/resource/windows_printer.rb +1 -1
  59. data/lib/chef/resource/windows_printer_port.rb +1 -1
  60. data/lib/chef/resource/windows_service.rb +1 -1
  61. data/lib/chef/resource/windows_shortcut.rb +1 -1
  62. data/lib/chef/resource/windows_task.rb +1 -1
  63. data/lib/chef/resource/yum_repository.rb +1 -1
  64. data/lib/chef/resource/zypper_repository.rb +2 -1
  65. data/lib/chef/version.rb +1 -1
  66. data/spec/.DS_Store +0 -0
  67. data/spec/data/.DS_Store +0 -0
  68. data/spec/data/cookbooks/.DS_Store +0 -0
  69. data/spec/data/cookbooks/java/.DS_Store +0 -0
  70. data/spec/data/cookbooks/java/files/.DS_Store +0 -0
  71. data/spec/data/run_context/.DS_Store +0 -0
  72. data/spec/data/run_context/cookbooks/.DS_Store +0 -0
  73. data/spec/functional/.DS_Store +0 -0
  74. data/spec/functional/resource/.DS_Store +0 -0
  75. data/spec/functional/resource/yum_package_spec.rb +8 -0
  76. data/spec/functional/util/.DS_Store +0 -0
  77. data/spec/integration/.DS_Store +0 -0
  78. data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
  79. data/spec/support/.DS_Store +0 -0
  80. data/spec/unit/.DS_Store +0 -0
  81. data/spec/unit/dsl/declare_resource_spec.rb +10 -1
  82. data/spec/unit/provider/.DS_Store +0 -0
  83. data/spec/unit/resource/.DS_Store +0 -0
  84. data/spec/unit/resource/macos_user_defaults_spec.rb +0 -14
  85. data/tasks/.DS_Store +0 -0
  86. metadata +35 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 84cefde8e0fd9743c6d069687878edc47c6be506a9f6cca2b11ba6dba76bfa6c
4
- data.tar.gz: 1e603e9eac2c65158a60c24251bdc3b250167c48d5d7fa88e594aa27e708747a
3
+ metadata.gz: f96a2522ddbe56499bea09ea7cdf72cd70c79680e8571338c43a525a7876cc21
4
+ data.tar.gz: '04293c6cff5d6482d9a0cf5273da9cc7139b550a94f6e2043a38797e2c68c54a'
5
5
  SHA512:
6
- metadata.gz: bef95125c12dbd408587b8fe0dd80b3534cecf312326f8b26c23afd9ae8416257e56119a305bbe37a34b2e0d863660adf96ce9144b6cddda5989759f07818b84
7
- data.tar.gz: 6e792998e90c1a6df25f94f882c8de03167d5d4a7658f504307dd2bef5eb713cec16049026f89255d138490d724d760fb2f881035decad53c705fdb3139ebb56
6
+ metadata.gz: b78b8cfff242ca896ad7c3ae96d81c7ed9d4221c345a589e53564565ddef77a916e719be557c984afe99e6f0c1fd194e53b5d2468a782b35ee45411221a2261c
7
+ data.tar.gz: e1857d836b14d29bb7a3b2972a21b4fc4636f4cdb9d944c2ee67e1d78c14fee692657fc295e7c23342aef8e38f70eff19f92399911f34444352ac59a763ee152
data/VERSION CHANGED
@@ -1 +1 @@
1
- 14.0.190
1
+ 14.0.202
Binary file
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # ./chef-resource-inspector - Find information about a resource
4
+ #
5
+ # Copyright:: Copyright (c) 2018, Chef Software, Inc
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ Encoding.default_external = Encoding::UTF_8
21
+
22
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
23
+
24
+ require "chef/resource_inspector"
25
+
26
+ ResourceInspector.start
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_dependency "mixlib-cli", "~> 1.7"
21
21
  s.add_dependency "mixlib-log", "~> 2.0", ">= 2.0.3"
22
- s.add_dependency "mixlib-authentication", "~> 1.4"
22
+ s.add_dependency "mixlib-authentication", "~> 2.0"
23
23
  s.add_dependency "mixlib-shellout", "~> 2.0"
24
24
  s.add_dependency "mixlib-archive", "~> 0.4"
25
25
  s.add_dependency "ohai", "~> 14.0"
@@ -55,7 +55,7 @@ Gem::Specification.new do |s|
55
55
  s.add_dependency "bundler", ">= 1.10"
56
56
 
57
57
  s.bindir = "bin"
58
- s.executables = %w{ chef-client chef-solo knife chef-shell chef-apply }
58
+ s.executables = %w{ chef-client chef-solo knife chef-shell chef-apply chef-resource-inspector }
59
59
 
60
60
  s.require_paths = %w{ lib }
61
61
  s.files = %w{Gemfile Rakefile LICENSE README.md CONTRIBUTING.md VERSION} + Dir.glob("{distro,lib,lib-backcompat,tasks,acceptance,spec}/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) } + Dir.glob("*.gemspec")
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: John Keiser (<jkeiser@chef.io>)
3
- # Copyright:: Copyright 2012-2016, Chef Software Inc.
3
+ # Copyright:: Copyright 2012-2018, Chef Software Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -307,25 +307,14 @@ class Chef
307
307
 
308
308
  # GET /cookbooks/NAME/VERSION or /cookbook_artifacts/NAME/IDENTIFIER
309
309
  elsif %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length == 3
310
- with_entry([path[0]]) do |entry|
310
+ with_cookbook_manifest(path) do |manifest, entry|
311
311
  cookbook_type = path[0]
312
- cookbook_entry = entry.children.select do |child|
313
- child.chef_object.full_name == "#{path[1]}-#{path[2]}" ||
314
- (child.chef_object.name.to_s == path[1] && child.chef_object.identifier == path[2])
315
- end[0]
316
- raise ChefZero::DataStore::DataNotFoundError.new(path) if cookbook_entry.nil?
317
- result = nil
318
- begin
319
- result = Chef::CookbookManifest.new(cookbook_entry.chef_object, policy_mode: cookbook_type == "cookbook_artifacts").to_hash
320
- rescue Chef::ChefFS::FileSystem::NotFoundError => e
321
- raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
322
- end
323
312
 
324
- result.each_pair do |key, value|
313
+ manifest.each_pair do |key, value|
325
314
  if value.is_a?(Array)
326
315
  value.each do |file|
327
316
  if file.is_a?(Hash) && file.has_key?("checksum")
328
- relative = ["file_store", "repo", cookbook_type, cookbook_entry.name ]
317
+ relative = ["file_store", "repo", cookbook_type, entry.name ]
329
318
  relative += file[:path].split("/")
330
319
  file["url"] = ChefZero::RestBase.build_uri(request.base_uri, relative)
331
320
  end
@@ -334,8 +323,8 @@ class Chef
334
323
  end
335
324
 
336
325
  if cookbook_type == "cookbook_artifacts"
337
- result["metadata"] = result["metadata"].to_hash
338
- result["metadata"].delete_if do |key, value|
326
+ manifest["metadata"] = manifest["metadata"].to_hash
327
+ manifest["metadata"].delete_if do |key, value|
339
328
  value == [] ||
340
329
  (value == {} && !%w{dependencies attributes recipes}.include?(key)) ||
341
330
  (value == "" && %w{source_url issues_url}.include?(key)) ||
@@ -343,9 +332,8 @@ class Chef
343
332
  end
344
333
  end
345
334
 
346
- Chef::JSONCompat.to_json_pretty(result)
335
+ Chef::JSONCompat.to_json_pretty(manifest)
347
336
  end
348
-
349
337
  else
350
338
  with_entry(path) do |entry|
351
339
  begin
@@ -768,6 +756,26 @@ class Chef
768
756
  path.length == 1 && BASE_DIRNAMES.include?(path[0])
769
757
  end
770
758
 
759
+ def with_cookbook_manifest(path)
760
+ cookbook_type = path[0]
761
+ begin
762
+ # this is fast and equivalent to with_entry() that also returns the cb manifest
763
+ entry = Chef::ChefFS::FileSystem.resolve_path(chef_fs, to_chef_fs_path(path))
764
+ yield Chef::CookbookManifest.new(entry.chef_object, policy_mode: cookbook_type == "cookbook_artifacts").to_hash, entry
765
+ rescue Chef::ChefFS::FileSystem::NotFoundError, ChefZero::DataStore::DataNotFoundError => e
766
+ # this is very slow and we walk through all the cookbook versions to find ones that have the correct name in the metadata
767
+ dir = Chef::ChefFS::FileSystem.resolve_path(chef_fs, to_chef_fs_path([path[0]]))
768
+ entry = dir.children.select do |child|
769
+ child.chef_object.full_name == "#{path[1]}-#{path[2]}" ||
770
+ (child.chef_object.name.to_s == path[1] && child.chef_object.identifier == path[2])
771
+ end[0]
772
+ raise ChefZero::DataStore::DataNotFoundError.new(path) if entry.nil?
773
+ yield Chef::CookbookManifest.new(entry.chef_object, policy_mode: cookbook_type == "cookbook_artifacts").to_hash, entry
774
+ end
775
+ rescue Chef::ChefFS::FileSystem::NotFoundError => e
776
+ raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
777
+ end
778
+
771
779
  def with_entry(path)
772
780
  yield Chef::ChefFS::FileSystem.resolve_path(chef_fs, to_chef_fs_path(path))
773
781
  rescue Chef::ChefFS::FileSystem::NotFoundError => e
@@ -1,7 +1,7 @@
1
1
  #--
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Christopher Walters
4
- # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
+ # Copyright:: Copyright 2008-2018, Chef Software Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -166,6 +166,27 @@ class Chef
166
166
  resource
167
167
  end
168
168
 
169
+ # Find existing resources by searching the list of existing resources. Possible
170
+ # forms are:
171
+ #
172
+ # find(:file => "foobar")
173
+ # find(:file => [ "foobar", "baz" ])
174
+ # find("file[foobar]", "file[baz]")
175
+ # find("file[foobar,baz]")
176
+ #
177
+ # Calls `run_context.resource_collection.find(*args)`
178
+ #
179
+ # The is backcompat API, the use of find_resource, below, is encouraged.
180
+ #
181
+ # @return the matching resource, or an Array of matching resources.
182
+ #
183
+ # @raise ArgumentError if you feed it bad lookup information
184
+ # @raise RuntimeError if it can't find the resources you are looking for.
185
+ #
186
+ def resources(*args)
187
+ run_context.resource_collection.find(*args)
188
+ end
189
+
169
190
  # Lookup a resource in the resource collection by name. If the resource is not
170
191
  # found this will raise Chef::Exceptions::ResourceNotFound. This API is identical to the
171
192
  # resources() call and while it is a synonym it is not intended to deprecate that call.
@@ -292,6 +313,7 @@ class Chef
292
313
  enclosing_provider: is_a?(Chef::Provider) ? self : nil
293
314
  ).build(&resource_attrs_block)
294
315
  end
316
+
295
317
  end
296
318
  end
297
319
  end
@@ -370,11 +370,13 @@ class Chef
370
370
  Chef::Config[:log_level] = :warn
371
371
  when 1
372
372
  Chef::Config[:log_level] = :info
373
- else
373
+ when 2
374
374
  Chef::Config[:log_level] = :debug
375
+ else
376
+ Chef::Config[:log_level] = :trace
375
377
  end
376
378
 
377
- Chef::Config[:log_level] = :debug if ENV["KNIFE_DEBUG"]
379
+ Chef::Config[:log_level] = :trace if ENV["KNIFE_DEBUG"]
378
380
 
379
381
  Chef::Config[:node_name] = config[:node_name] if config[:node_name]
380
382
  Chef::Config[:client_key] = config[:client_key] if config[:client_key]
@@ -467,7 +469,7 @@ class Chef
467
469
  when NameError, NoMethodError
468
470
  ui.error "knife encountered an unexpected error"
469
471
  ui.info "This may be a bug in the '#{self.class.common_name}' knife command or plugin"
470
- ui.info "Please collect the output of this command with the `-VV` option before filing a bug report."
472
+ ui.info "Please collect the output of this command with the `-VVV` option before filing a bug report."
471
473
  ui.info "Exception: #{e.class.name}: #{e.message}"
472
474
  when Chef::Exceptions::PrivateKeyMissing
473
475
  ui.error "Your private key could not be loaded from #{api_key}"
Binary file
@@ -178,7 +178,11 @@ validation_client_name "#{@chef_config[:validation_client_name]}"
178
178
  # If the user doesn't have a client path configure, let bash use the PATH for what it was designed for
179
179
  client_path = @chef_config[:chef_client_path] || "chef-client"
180
180
  s = "#{client_path} -j /etc/chef/first-boot.json"
181
- s << " -l debug" if @config[:verbosity] && @config[:verbosity] >= 2
181
+ if @config[:verbosity] && @config[:verbosity] >= 3
182
+ s << " -l trace"
183
+ elsif @config[:verbosity] && @config[:verbosity] >= 2
184
+ s << " -l debug"
185
+ end
182
186
  s << " -E #{bootstrap_environment}" unless bootstrap_environment.nil?
183
187
  s << " --no-color" unless @config[:color]
184
188
  s
@@ -288,7 +288,7 @@ class Chef
288
288
  opts[:forward_agent] = forward_agent unless forward_agent.nil?
289
289
  port ||= ssh_config[:port]
290
290
  opts[:port] = port unless port.nil?
291
- opts[:logger] = Chef::Log.logger if Chef::Log.level == :debug
291
+ opts[:logger] = Chef::Log.with_child(subsystem: "net/ssh") if Chef::Log.level == :trace
292
292
  if !config[:host_key_verify]
293
293
  opts[:verify_host_key] = false
294
294
  opts[:user_known_hosts_file] = "/dev/null"
Binary file
@@ -42,6 +42,7 @@ class Chef
42
42
 
43
43
  include Chef::Mixin::WhyRun
44
44
  extend Chef::Mixin::Provides
45
+ extend Forwardable
45
46
 
46
47
  # includes the "core" DSL and not the "recipe" DSL by design
47
48
  include Chef::DSL::Core
@@ -77,6 +78,10 @@ class Chef
77
78
  # Chef.deprecated(:use_inline_resources, "The use_inline_resources mode is no longer optional and the line enabling it can be removed")
78
79
  end
79
80
 
81
+ # delegate to the resource
82
+ #
83
+ def_delegators :@new_resource, :property_is_set?
84
+
80
85
  #--
81
86
  # TODO: this should be a reader, and the action should be passed in the
82
87
  # constructor; however, many/most subclasses override the constructor so
@@ -93,14 +93,14 @@ class Chef
93
93
  options.each_with_object({}) do |opt, h|
94
94
  if opt =~ /--enablerepo=(.+)/
95
95
  $1.split(",").each do |repo|
96
- h["enablerepos"] ||= []
97
- h["enablerepos"].push(repo)
96
+ h["repos"] ||= []
97
+ h["repos"].push( { "enable" => repo } )
98
98
  end
99
99
  end
100
100
  if opt =~ /--disablerepo=(.+)/
101
101
  $1.split(",").each do |repo|
102
- h["disablerepos"] ||= []
103
- h["disablerepos"].push(repo)
102
+ h["repos"] ||= []
103
+ h["repos"].push( { "disable" => repo } )
104
104
  end
105
105
  end
106
106
  end
@@ -83,11 +83,13 @@ def query(command):
83
83
  enabled_repos = base.repos.listEnabled()
84
84
 
85
85
  # Handle any repocontrols passed in with our options
86
- if 'enablerepos' in command:
87
- base.repos.enableRepo(*command['enablerepos'])
88
86
 
89
- if 'disablerepos' in command:
90
- base.repos.disableRepo(*command['disablerepos'])
87
+ if 'repos' in command:
88
+ for repo in command['repos']:
89
+ if 'enable' in repo:
90
+ base.repos.enableRepo(repo['enable'])
91
+ if 'disable' in repo:
92
+ base.repos.disableRepo(repo['disable'])
91
93
 
92
94
  args = { 'name': command['provides'] }
93
95
  do_nevra = False
@@ -148,15 +150,14 @@ def query(command):
148
150
  outpipe.flush()
149
151
 
150
152
  # Reset any repos we were passed in enablerepo/disablerepo to the original state in enabled_repos
151
- if 'enablerepos' in command:
152
- for repo in command['enablerepos']:
153
- if base.repos.getRepo(repo) not in enabled_repos:
154
- base.repos.disableRepo(repo)
155
-
156
- if 'disablerepos' in command:
157
- for repo in command['disablerepos']:
158
- if base.repos.getRepo(repo) in enabled_repos:
159
- base.repos.enableRepo(repo)
153
+ if 'repos' in command:
154
+ for repo in command['repos']:
155
+ if 'enable' in repo:
156
+ if base.repos.getRepo(repo['enable']) not in enabled_repos:
157
+ base.repos.disableRepo(repo['enable'])
158
+ if 'disable' in repo:
159
+ if base.repos.getRepo(repo['disable']) in enabled_repos:
160
+ base.repos.enableRepo(repo['disable'])
160
161
 
161
162
  # the design of this helper is that it should try to be 'brittle' and fail hard and exit in order
162
163
  # to keep process tables clean. additional error handling should probably be added to the retry loop
@@ -185,7 +186,13 @@ while 1:
185
186
  sys.exit(0)
186
187
  setup_exit_handler()
187
188
  line = inpipe.readline()
188
- command = json.loads(line)
189
+
190
+ try:
191
+ command = json.loads(line)
192
+ except ValueError, e:
193
+ base.closeRpmDB()
194
+ sys.exit(0)
195
+
189
196
  if command['action'] == "whatinstalled":
190
197
  query(command)
191
198
  elif command['action'] == "whatavailable":
@@ -174,7 +174,7 @@ class Chef
174
174
  conf[dev] = "" if conf[dev].nil?
175
175
  case @action
176
176
  when :add
177
- conf[dev] << config_file_contents(:add, comment: resource.comment, target: resource.target, netmask: resource.netmask, gateway: resource.gateway) if resource.action == [:add]
177
+ conf[dev] << config_file_contents(:add, comment: resource.comment, target: resource.target, metric: resource.metric, netmask: resource.netmask, gateway: resource.gateway) if resource.action == [:add]
178
178
  when :delete
179
179
  # need to do this for the case when the last route on an int
180
180
  # is removed
@@ -219,6 +219,7 @@ class Chef
219
219
  command = [ "ip", "route", "replace", target ]
220
220
  command += [ "via", new_resource.gateway ] if new_resource.gateway
221
221
  command += [ "dev", new_resource.device ] if new_resource.device
222
+ command += [ "metric", new_resource.metric ] if new_resource.metric
222
223
  when :delete
223
224
  command = [ "ip", "route", "delete", target ]
224
225
  command += [ "via", new_resource.gateway ] if new_resource.gateway
@@ -235,6 +236,7 @@ class Chef
235
236
  content << (options[:target]).to_s
236
237
  content << "/#{MASK[options[:netmask].to_s]}" if options[:netmask]
237
238
  content << " via #{options[:gateway]}" if options[:gateway]
239
+ content << " metric #{options[:metric]}" if options[:metric]
238
240
  content << "\n"
239
241
  end
240
242
 
@@ -1,7 +1,7 @@
1
1
  #--
2
2
  # Author:: Adam Jacob (<adam@chef.io>)
3
3
  # Author:: Christopher Walters (<cw@chef.io>)
4
- # Copyright:: Copyright 2008-2017, Chef Software Inc.
4
+ # Copyright:: Copyright 2008-2018, Chef Software Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -66,12 +66,6 @@ class Chef
66
66
  run_context.node
67
67
  end
68
68
 
69
- # Used by the DSL to look up resources when executing in the context of a
70
- # recipe.
71
- def resources(*args)
72
- run_context.resource_collection.find(*args)
73
- end
74
-
75
69
  # This was moved to Chef::Node#tag, redirecting here for compatibility
76
70
  def tag(*tags)
77
71
  run_context.node.tag(*tags)
@@ -23,6 +23,7 @@ require "chef/dsl/data_query"
23
23
  require "chef/dsl/registry_helper"
24
24
  require "chef/dsl/reboot_pending"
25
25
  require "chef/dsl/resources"
26
+ require "chef/dsl/declare_resource"
26
27
  require "chef/json_compat"
27
28
  require "chef/mixin/convert_to_class_name"
28
29
  require "chef/guard_interpreter/resource_guard_interpreter"
@@ -51,6 +52,7 @@ class Chef
51
52
  # Generic User DSL (not resource-specific)
52
53
  #
53
54
 
55
+ include Chef::DSL::DeclareResource
54
56
  include Chef::DSL::DataQuery
55
57
  include Chef::DSL::RegistryHelper
56
58
  include Chef::DSL::RebootPending
@@ -97,26 +99,6 @@ class Chef
97
99
  run_context && run_context.node
98
100
  end
99
101
 
100
- #
101
- # Find existing resources by searching the list of existing resources. Possible
102
- # forms are:
103
- #
104
- # find(:file => "foobar")
105
- # find(:file => [ "foobar", "baz" ])
106
- # find("file[foobar]", "file[baz]")
107
- # find("file[foobar,baz]")
108
- #
109
- # Calls `run_context.resource_collection.find(*args)`
110
- #
111
- # @return the matching resource, or an Array of matching resources.
112
- #
113
- # @raise ArgumentError if you feed it bad lookup information
114
- # @raise RuntimeError if it can't find the resources you are looking for.
115
- #
116
- def resources(*args)
117
- run_context.resource_collection.find(*args)
118
- end
119
-
120
102
  #
121
103
  # Resource User Interface (for users)
122
104
  #
@@ -23,7 +23,7 @@ class Chef
23
23
  # @since 13.3
24
24
  class AptPreference < Chef::Resource
25
25
  resource_name :apt_preference
26
- provides :apt_preference
26
+ provides(:apt_preference) { true }
27
27
 
28
28
  description "The apt_preference resource allows for the creation of APT preference"\
29
29
  " files. Preference files are used to control which package versions and"\