berkshelf 7.0.6 → 7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -7
- data/Rakefile +2 -2
- data/berkshelf.gemspec +9 -10
- data/bin/berks +5 -0
- data/lib/berkshelf.rb +2 -2
- data/lib/berkshelf/api_client/chef_server_connection.rb +3 -2
- data/lib/berkshelf/api_client/connection.rb +1 -1
- data/lib/berkshelf/berksfile.rb +47 -41
- data/lib/berkshelf/cached_cookbook.rb +6 -4
- data/lib/berkshelf/chef_config_compat.rb +1 -0
- data/lib/berkshelf/chef_repo_universe.rb +6 -4
- data/lib/berkshelf/cli.rb +12 -7
- data/lib/berkshelf/commands/shelf.rb +1 -1
- data/lib/berkshelf/community_rest.rb +4 -4
- data/lib/berkshelf/config.rb +1 -1
- data/lib/berkshelf/core_ext.rb +1 -1
- data/lib/berkshelf/core_ext/file_utils.rb +2 -2
- data/lib/berkshelf/dependency.rb +1 -1
- data/lib/berkshelf/downloader.rb +10 -3
- data/lib/berkshelf/errors.rb +2 -2
- data/lib/berkshelf/formatters/human.rb +1 -1
- data/lib/berkshelf/formatters/json.rb +4 -4
- data/lib/berkshelf/installer.rb +1 -1
- data/lib/berkshelf/location.rb +3 -3
- data/lib/berkshelf/lockfile.rb +14 -14
- data/lib/berkshelf/logger.rb +4 -2
- data/lib/berkshelf/mixin/git.rb +1 -1
- data/lib/berkshelf/packager.rb +2 -2
- data/lib/berkshelf/resolver.rb +1 -1
- data/lib/berkshelf/ridley_compat.rb +1 -1
- data/lib/berkshelf/shell.rb +1 -0
- data/lib/berkshelf/source.rb +6 -5
- data/lib/berkshelf/ssl_policies.rb +1 -3
- data/lib/berkshelf/thor.rb +1 -1
- data/lib/berkshelf/thor_ext.rb +1 -1
- data/lib/berkshelf/uploader.rb +11 -9
- data/lib/berkshelf/version.rb +1 -1
- data/lib/berkshelf/visualizer.rb +1 -1
- data/spec/config/knife.rb +1 -1
- data/spec/support/chef_server.rb +2 -2
- data/spec/support/git.rb +18 -18
- data/spec/support/path_helpers.rb +4 -4
- data/spec/tmp/berkshelf/cookbooks/dep-1.0.0/attributes/default.rb +0 -0
- data/spec/tmp/berkshelf/cookbooks/dep-1.0.0/files/default/file.h +0 -0
- data/spec/tmp/berkshelf/cookbooks/dep-1.0.0/metadata.rb +2 -0
- data/spec/tmp/berkshelf/cookbooks/dep-1.0.0/recipes/default.rb +0 -0
- data/spec/tmp/berkshelf/cookbooks/dep-1.0.0/templates/default/template.erb +0 -0
- data/spec/tmp/berkshelf/cookbooks/ekaf-1.0.0/attributes/default.rb +0 -0
- data/spec/tmp/berkshelf/cookbooks/ekaf-1.0.0/files/default/file.h +0 -0
- data/spec/tmp/berkshelf/cookbooks/ekaf-1.0.0/metadata.rb +3 -0
- data/spec/tmp/berkshelf/cookbooks/ekaf-1.0.0/recipes/default.rb +0 -0
- data/spec/tmp/berkshelf/cookbooks/ekaf-1.0.0/templates/default/template.erb +0 -0
- data/spec/tmp/berkshelf/cookbooks/fake-1.0.0/attributes/default.rb +0 -0
- data/spec/tmp/berkshelf/cookbooks/fake-1.0.0/files/default/file.h +0 -0
- data/spec/tmp/berkshelf/cookbooks/fake-1.0.0/metadata.rb +3 -0
- data/spec/tmp/berkshelf/cookbooks/fake-1.0.0/recipes/default.rb +0 -0
- data/spec/tmp/berkshelf/cookbooks/fake-1.0.0/templates/default/template.erb +0 -0
- data/spec/unit/berkshelf/berksfile_spec.rb +7 -7
- data/spec/unit/berkshelf/cli_spec.rb +1 -2
- data/spec/unit/berkshelf/community_rest_spec.rb +1 -1
- data/spec/unit/berkshelf/core_ext/file_utils_spec.rb +2 -2
- data/spec/unit/berkshelf/dependency_spec.rb +5 -5
- data/spec/unit/berkshelf/downloader_spec.rb +29 -8
- data/spec/unit/berkshelf/locations/base_spec.rb +1 -2
- data/spec/unit/berkshelf/locations/path_spec.rb +1 -2
- data/spec/unit/berkshelf/lockfile_spec.rb +9 -18
- data/spec/unit/berkshelf/ridley_compat_spec.rb +1 -1
- data/spec/unit/berkshelf/source_spec.rb +8 -7
- data/spec/unit/berkshelf/ssl_policies_spec.rb +3 -5
- data/spec/unit/berkshelf/uploader_spec.rb +6 -10
- metadata +49 -188
- data/.github/lock.yml +0 -1
- data/.gitignore +0 -30
- data/.rubocop.yml +0 -12
- data/.travis.yml +0 -73
- data/CHANGELOG.legacy.md +0 -307
- data/CHANGELOG.md +0 -1582
- data/CONTRIBUTING.md +0 -68
- data/Gemfile.lock +0 -301
- data/PLUGINS.md +0 -25
- data/README.md +0 -72
- data/Thorfile +0 -61
- data/appveyor.yml +0 -31
- data/docs/berkshelf_for_newcomers.md +0 -64
- data/features/artifactory.feature +0 -70
- data/features/berksfile.feature +0 -46
- data/features/commands/apply.feature +0 -41
- data/features/commands/contingent.feature +0 -47
- data/features/commands/info.feature +0 -141
- data/features/commands/install.feature +0 -646
- data/features/commands/list.feature +0 -78
- data/features/commands/outdated.feature +0 -127
- data/features/commands/package.feature +0 -17
- data/features/commands/search.feature +0 -17
- data/features/commands/shelf/list.feature +0 -32
- data/features/commands/shelf/show.feature +0 -113
- data/features/commands/shelf/uninstall.feature +0 -96
- data/features/commands/show.feature +0 -83
- data/features/commands/update.feature +0 -142
- data/features/commands/upload.feature +0 -499
- data/features/commands/vendor.feature +0 -154
- data/features/commands/verify.feature +0 -29
- data/features/commands/viz.feature +0 -66
- data/features/community_site.feature +0 -37
- data/features/help.feature +0 -11
- data/features/json_formatter.feature +0 -158
- data/features/lifecycle.feature +0 -378
- data/features/lockfile.feature +0 -378
- data/features/step_definitions/berksfile_steps.rb +0 -54
- data/features/step_definitions/chef/config_steps.rb +0 -12
- data/features/step_definitions/chef_server_steps.rb +0 -60
- data/features/step_definitions/cli_steps.rb +0 -18
- data/features/step_definitions/config_steps.rb +0 -46
- data/features/step_definitions/environment_steps.rb +0 -11
- data/features/step_definitions/filesystem_steps.rb +0 -286
- data/features/step_definitions/gem_steps.rb +0 -13
- data/features/step_definitions/json_steps.rb +0 -29
- data/features/step_definitions/utility_steps.rb +0 -11
- data/features/support/aruba.rb +0 -12
- data/features/support/env.rb +0 -77
- data/spec/fixtures/cookbooks/example_cookbook/.gitignore +0 -2
- data/spec/fixtures/cookbooks/example_cookbook/.kitchen.yml +0 -26
@@ -69,13 +69,13 @@ module Berkshelf
|
|
69
69
|
# how often we should pause between retries
|
70
70
|
def initialize(uri = V1_API, options = {})
|
71
71
|
options = options.dup
|
72
|
-
options
|
73
|
-
@api_uri
|
72
|
+
options = { retries: 5, retry_interval: 0.5, ssl: Berkshelf::Config.instance.ssl }.merge(options)
|
73
|
+
@api_uri = uri
|
74
74
|
options[:server_url] = uri
|
75
|
-
@retries
|
75
|
+
@retries = options.delete(:retries)
|
76
76
|
@retry_interval = options.delete(:retry_interval)
|
77
77
|
|
78
|
-
@connection = Berkshelf::RidleyCompatJSON.new(options)
|
78
|
+
@connection = Berkshelf::RidleyCompatJSON.new(**options)
|
79
79
|
end
|
80
80
|
|
81
81
|
# Download and extract target cookbook archive to the local file system,
|
data/lib/berkshelf/config.rb
CHANGED
data/lib/berkshelf/core_ext.rb
CHANGED
@@ -14,10 +14,10 @@ module FileUtils
|
|
14
14
|
# symlink on Linux
|
15
15
|
# @see {FileUtils::mv}
|
16
16
|
def mv(src, dest, options = {})
|
17
|
-
old_mv(src, dest, options)
|
17
|
+
old_mv(src, dest, **options)
|
18
18
|
rescue Errno::EACCES, Errno::ENOENT
|
19
19
|
options.delete(:force) if options.key?(:force)
|
20
|
-
FileUtils.cp_r(src, dest, options)
|
20
|
+
FileUtils.cp_r(src, dest, **options)
|
21
21
|
FileUtils.rm_rf(src)
|
22
22
|
end
|
23
23
|
end
|
data/lib/berkshelf/dependency.rb
CHANGED
data/lib/berkshelf/downloader.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "net/http"
|
2
2
|
require "mixlib/archive"
|
3
|
-
|
3
|
+
require_relative "ssl_policies"
|
4
|
+
require "faraday"
|
4
5
|
|
5
6
|
module Berkshelf
|
6
7
|
class Downloader
|
@@ -68,7 +69,11 @@ module Berkshelf
|
|
68
69
|
if source.type == :artifactory
|
69
70
|
options[:headers] = { "X-Jfrog-Art-Api" => source.options[:api_key] }
|
70
71
|
end
|
71
|
-
|
72
|
+
|
73
|
+
# Allow Berkshelf install to function if a relative url exists in location_path
|
74
|
+
path = URI.parse(remote_cookbook.location_path).absolute? ? remote_cookbook.location_path : "#{source.uri_string}#{remote_cookbook.location_path}"
|
75
|
+
|
76
|
+
CommunityREST.new(path, options).download(name, version)
|
72
77
|
when :chef_server
|
73
78
|
tmp_dir = Dir.mktmpdir
|
74
79
|
unpack_dir = Pathname.new(tmp_dir) + "#{name}-#{version}"
|
@@ -116,7 +121,7 @@ module Berkshelf
|
|
116
121
|
)
|
117
122
|
|
118
123
|
begin
|
119
|
-
url = URI(github_client.archive_link(cookbook_uri.path.gsub(
|
124
|
+
url = URI(github_client.archive_link(cookbook_uri.path.gsub(%r{^/}, ""), ref: "v#{version}"))
|
120
125
|
rescue Octokit::Unauthorized
|
121
126
|
return nil
|
122
127
|
end
|
@@ -127,6 +132,7 @@ module Berkshelf
|
|
127
132
|
http.verify_mode = (options["ssl_verify"].nil? || options["ssl_verify"]) ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
|
128
133
|
resp = http.get(url.request_uri)
|
129
134
|
return nil unless resp.is_a?(Net::HTTPSuccess)
|
135
|
+
|
130
136
|
open(archive_path, "wb") { |file| file.write(resp.body) }
|
131
137
|
|
132
138
|
Mixlib::Archive.new(archive_path).extract(unpack_dir)
|
@@ -179,6 +185,7 @@ module Berkshelf
|
|
179
185
|
|
180
186
|
resp = connection.get(cookbook_uri.request_uri + "&private_token=" + options["private_token"])
|
181
187
|
return nil unless resp.status == 200
|
188
|
+
|
182
189
|
open(archive_path, "wb") { |file| file.write(resp.body) }
|
183
190
|
|
184
191
|
Mixlib::Archive.new(archive_path).extract(unpack_dir)
|
data/lib/berkshelf/errors.rb
CHANGED
@@ -83,7 +83,7 @@ module Berkshelf
|
|
83
83
|
|
84
84
|
def to_s
|
85
85
|
@original_exception.to_s +
|
86
|
-
"Unable to find a solution for demands: #{demands.join(
|
86
|
+
"Unable to find a solution for demands: #{demands.join(", ")}"
|
87
87
|
end
|
88
88
|
|
89
89
|
alias_method :message, :to_s
|
@@ -372,7 +372,7 @@ module Berkshelf
|
|
372
372
|
|
373
373
|
def to_s
|
374
374
|
"Unknown license: '#{license}'\n" +
|
375
|
-
"Available licenses: #{CookbookGenerator::LICENSES.join(
|
375
|
+
"Available licenses: #{CookbookGenerator::LICENSES.join(", ")}"
|
376
376
|
end
|
377
377
|
|
378
378
|
alias_method :message, :to_s
|
@@ -68,7 +68,7 @@ module Berkshelf
|
|
68
68
|
|
69
69
|
hash.each do |name, info|
|
70
70
|
info["remote"].each do |remote_source, remote_version|
|
71
|
-
out = " * #{name} (#{info[
|
71
|
+
out = " * #{name} (#{info["local"]} => #{remote_version})"
|
72
72
|
|
73
73
|
unless remote_source.default?
|
74
74
|
out << " [#{remote_source.uri}]"
|
@@ -8,11 +8,11 @@ module Berkshelf
|
|
8
8
|
def initialize
|
9
9
|
@output = {
|
10
10
|
cookbooks: [],
|
11
|
-
errors:
|
12
|
-
messages:
|
13
|
-
warnings:
|
11
|
+
errors: [],
|
12
|
+
messages: [],
|
13
|
+
warnings: [],
|
14
14
|
}
|
15
|
-
@cookbooks =
|
15
|
+
@cookbooks = {}
|
16
16
|
|
17
17
|
Berkshelf.ui.mute { super }
|
18
18
|
end
|
data/lib/berkshelf/installer.rb
CHANGED
data/lib/berkshelf/location.rb
CHANGED
@@ -28,9 +28,9 @@ module Berkshelf
|
|
28
28
|
|
29
29
|
private
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
# Load the correct location from the given options.
|
32
|
+
#
|
33
|
+
# @return [Class, nil]
|
34
34
|
def klass_from_options(options)
|
35
35
|
options.each do |key, _|
|
36
36
|
id = key.to_s.capitalize
|
data/lib/berkshelf/lockfile.rb
CHANGED
@@ -228,7 +228,7 @@ module Berkshelf
|
|
228
228
|
|
229
229
|
# @return [Array<CachedCookbook>]
|
230
230
|
def cached
|
231
|
-
graph.locks.values.collect
|
231
|
+
graph.locks.values.collect(&:cached_cookbook)
|
232
232
|
end
|
233
233
|
|
234
234
|
# The list of dependencies constrained in this lockfile.
|
@@ -511,13 +511,13 @@ module Berkshelf
|
|
511
511
|
"#<Berkshelf::Lockfile #{Pathname.new(filepath).basename}, dependencies: #{dependencies.inspect}>"
|
512
512
|
end
|
513
513
|
|
514
|
-
|
515
|
-
|
514
|
+
# The class responsible for parsing the lockfile and turning it into a
|
515
|
+
# useful data structure.
|
516
516
|
class LockfileParser
|
517
517
|
NAME_VERSION = '(?! )(.*?)(?: \(([^-]*)(?:-(.*))?\))?'.freeze
|
518
|
-
DEPENDENCY_PATTERN = /^ {2}#{NAME_VERSION}
|
519
|
-
DEPENDENCIES_PATTERN = /^ {4}#{NAME_VERSION}
|
520
|
-
OPTION_PATTERN = /^ {4}(.+)\: (.+)
|
518
|
+
DEPENDENCY_PATTERN = /^ {2}#{NAME_VERSION}$/.freeze
|
519
|
+
DEPENDENCIES_PATTERN = /^ {4}#{NAME_VERSION}$/.freeze
|
520
|
+
OPTION_PATTERN = /^ {4}(.+)\: (.+)/.freeze
|
521
521
|
|
522
522
|
# Create a new lockfile parser.
|
523
523
|
#
|
@@ -570,7 +570,7 @@ module Berkshelf
|
|
570
570
|
end
|
571
571
|
end
|
572
572
|
|
573
|
-
graph << " #{name} (#{info[
|
573
|
+
graph << " #{name} (#{info["locked_version"]})\n"
|
574
574
|
end
|
575
575
|
|
576
576
|
contents = "#{dependencies}\n#{graph}"
|
@@ -599,9 +599,9 @@ module Berkshelf
|
|
599
599
|
|
600
600
|
private
|
601
601
|
|
602
|
-
|
603
|
-
|
604
|
-
|
602
|
+
# Parse a dependency line.
|
603
|
+
#
|
604
|
+
# @param [String] line
|
605
605
|
def parse_dependency(line)
|
606
606
|
if line =~ DEPENDENCY_PATTERN
|
607
607
|
name, version = $1, $2
|
@@ -615,9 +615,9 @@ module Berkshelf
|
|
615
615
|
end
|
616
616
|
end
|
617
617
|
|
618
|
-
|
619
|
-
|
620
|
-
|
618
|
+
# Parse a graph line.
|
619
|
+
#
|
620
|
+
# @param [String] line
|
621
621
|
def parse_graph(line)
|
622
622
|
if line =~ DEPENDENCY_PATTERN
|
623
623
|
name, version = $1, $2
|
@@ -631,7 +631,7 @@ module Berkshelf
|
|
631
631
|
end
|
632
632
|
end
|
633
633
|
|
634
|
-
|
634
|
+
# The class representing an internal graph.
|
635
635
|
class Graph
|
636
636
|
include Enumerable
|
637
637
|
|
data/lib/berkshelf/logger.rb
CHANGED
@@ -3,7 +3,7 @@ module Berkshelf
|
|
3
3
|
def initialize(device = STDOUT)
|
4
4
|
super
|
5
5
|
self.level = Logger::WARN
|
6
|
-
@filter_params =
|
6
|
+
@filter_params = []
|
7
7
|
end
|
8
8
|
|
9
9
|
# Reimplements Logger#add adding message filtering. The info,
|
@@ -28,6 +28,7 @@ module Berkshelf
|
|
28
28
|
if @logdev.nil? || severity < (@level)
|
29
29
|
return true
|
30
30
|
end
|
31
|
+
|
31
32
|
progname ||= @progname
|
32
33
|
if message.nil?
|
33
34
|
if block_given?
|
@@ -38,7 +39,8 @@ module Berkshelf
|
|
38
39
|
end
|
39
40
|
end
|
40
41
|
@logdev.write(
|
41
|
-
format_message(format_severity(severity), Time.now, progname, filter(message))
|
42
|
+
format_message(format_severity(severity), Time.now, progname, filter(message))
|
43
|
+
)
|
42
44
|
true
|
43
45
|
end
|
44
46
|
|
data/lib/berkshelf/mixin/git.rb
CHANGED
data/lib/berkshelf/packager.rb
CHANGED
data/lib/berkshelf/resolver.rb
CHANGED
data/lib/berkshelf/shell.rb
CHANGED
data/lib/berkshelf/source.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require_relative "api-client"
|
2
|
+
require_relative "chef_repo_universe"
|
3
|
+
require_relative "ssl_policies"
|
4
4
|
require "openssl"
|
5
5
|
|
6
6
|
module Berkshelf
|
@@ -84,7 +84,7 @@ module Berkshelf
|
|
84
84
|
def build_universe
|
85
85
|
@universe = api_client.universe
|
86
86
|
rescue => ex
|
87
|
-
@universe =
|
87
|
+
@universe = []
|
88
88
|
raise ex
|
89
89
|
end
|
90
90
|
|
@@ -154,7 +154,7 @@ module Berkshelf
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def inspect
|
157
|
-
"#<#{self.class.name} #{type}: #{uri.to_s.inspect}, #{options.map { |k, v| "#{k}: #{v.inspect}" }.join(
|
157
|
+
"#<#{self.class.name} #{type}: #{uri.to_s.inspect}, #{options.map { |k, v| "#{k}: #{v.inspect}" }.join(", ")}>"
|
158
158
|
end
|
159
159
|
|
160
160
|
def hash
|
@@ -163,6 +163,7 @@ module Berkshelf
|
|
163
163
|
|
164
164
|
def ==(other)
|
165
165
|
return false unless other.is_a?(self.class)
|
166
|
+
|
166
167
|
type == other.type && uri == other.uri
|
167
168
|
end
|
168
169
|
|
@@ -8,9 +8,7 @@ module Berkshelf
|
|
8
8
|
attr_reader :store
|
9
9
|
|
10
10
|
def initialize
|
11
|
-
@store = OpenSSL::X509::Store.new.tap
|
12
|
-
store.set_default_paths
|
13
|
-
end
|
11
|
+
@store = OpenSSL::X509::Store.new.tap(&:set_default_paths)
|
14
12
|
|
15
13
|
set_custom_certs if ::File.exist?(trusted_certs_dir)
|
16
14
|
end
|
data/lib/berkshelf/thor.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
require_relative "cli"
|
data/lib/berkshelf/thor_ext.rb
CHANGED
data/lib/berkshelf/uploader.rb
CHANGED
@@ -16,10 +16,10 @@ module Berkshelf
|
|
16
16
|
opts = args.last.respond_to?(:to_hash) ? args.pop.to_hash.each_with_object({}) { |(k, v), m| m[k.to_sym] = v } : {}
|
17
17
|
|
18
18
|
@options = {
|
19
|
-
force:
|
20
|
-
freeze:
|
19
|
+
force: false,
|
20
|
+
freeze: true,
|
21
21
|
halt_on_frozen: false,
|
22
|
-
validate:
|
22
|
+
validate: true,
|
23
23
|
}.merge(opts)
|
24
24
|
|
25
25
|
@names = Array(args).flatten
|
@@ -32,7 +32,7 @@ module Berkshelf
|
|
32
32
|
Berkshelf.log.debug " No names given, using all cookbooks"
|
33
33
|
filtered_cookbooks
|
34
34
|
else
|
35
|
-
Berkshelf.log.debug " Names given (#{names.join(
|
35
|
+
Berkshelf.log.debug " Names given (#{names.join(", ")})"
|
36
36
|
names.map { |name| lockfile.retrieve(name) }
|
37
37
|
end
|
38
38
|
|
@@ -45,10 +45,10 @@ module Berkshelf
|
|
45
45
|
|
46
46
|
private
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
# Upload the list of cookbooks to the Chef Server, with some exception
|
49
|
+
# wrapping.
|
50
|
+
#
|
51
|
+
# @param [Array<String>] cookbooks
|
52
52
|
def upload(cookbooks)
|
53
53
|
Berkshelf.log.info "Starting upload"
|
54
54
|
|
@@ -75,13 +75,15 @@ module Berkshelf
|
|
75
75
|
[ cookbook_version ],
|
76
76
|
force: options[:force],
|
77
77
|
concurrency: 1, # sadly
|
78
|
-
rest: connection
|
78
|
+
rest: connection,
|
79
|
+
skip_syntax_check: options[:skip_syntax_check]
|
79
80
|
).upload_cookbooks
|
80
81
|
Berkshelf.formatter.uploaded(cookbook, connection)
|
81
82
|
rescue Chef::Exceptions::CookbookFrozen
|
82
83
|
if options[:halt_on_frozen]
|
83
84
|
raise FrozenCookbook.new(cookbook)
|
84
85
|
end
|
86
|
+
|
85
87
|
Berkshelf.formatter.skipping(cookbook, connection)
|
86
88
|
end
|
87
89
|
ensure
|
data/lib/berkshelf/version.rb
CHANGED
data/lib/berkshelf/visualizer.rb
CHANGED
data/spec/config/knife.rb
CHANGED
@@ -6,5 +6,5 @@ validation_client_name "validator"
|
|
6
6
|
validation_key File.expand_path("spec/config/validator.pem")
|
7
7
|
chef_server_url "http://localhost:26310"
|
8
8
|
cache_type "BasicFile"
|
9
|
-
cache_options( path: "#{ENV[
|
9
|
+
cache_options( path: "#{ENV["HOME"]}/.chef/checksums" )
|
10
10
|
cookbook_path []
|