berkshelf_ext 1.0.12 → 1.0.14
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.
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## v1.0.14
|
2
|
+
* Use chef configurations from berks config if unset by knife
|
3
|
+
* Fix exception namespacing
|
4
|
+
* Provide path information when Berksfile processing fails
|
5
|
+
* Allow limiting depth of nested berksfiles `--nested-depth n`
|
6
|
+
* Attempt to properly identify cookbook causing solution failure
|
7
|
+
* Provide better output for solution failures
|
8
|
+
|
1
9
|
## v1.0.12
|
2
10
|
* Add proper support for metadata with missing name
|
3
11
|
|
@@ -44,20 +44,30 @@ class RidleyMocker
|
|
44
44
|
cv.manifest['name'] = "#{cv.metadata.name}-#{cv.version}"
|
45
45
|
cv.name = cv.manifest['cookbook_name'] = cv.metadata.name
|
46
46
|
cv.freeze_version if upload_options.delete(:freeze)
|
47
|
+
puts " -> Knife upload to: #{Chef::Config[:chef_server_url]}"
|
47
48
|
Chef::CookbookUploader.new([cv], cookbook.path, upload_options).upload_cookbooks
|
48
49
|
@ckbk = cv
|
49
50
|
end
|
50
51
|
|
51
52
|
def chef_config!
|
52
53
|
cwd = Dir.pwd.split('/')
|
53
|
-
|
54
|
+
found = false
|
55
|
+
until(found || cwd.empty?)
|
54
56
|
knife_conf = File.join(cwd.join('/'), '.chef/knife.rb')
|
55
|
-
if(File.exists?(knife_conf))
|
56
|
-
|
57
|
-
|
57
|
+
if(found = File.exists?(knife_conf))
|
58
|
+
begin
|
59
|
+
Chef::Config.from_file(knife_conf)
|
60
|
+
rescue
|
61
|
+
end
|
62
|
+
end
|
63
|
+
cwd.pop
|
64
|
+
end
|
65
|
+
%w(chef_server_url validation_client_name validation_key client_key node_name).each do |k|
|
66
|
+
key = k.to_sym
|
67
|
+
if(value = Berkshelf::Config.instance[:chef][key])
|
68
|
+
Chef::Config[key] = value
|
58
69
|
end
|
59
70
|
end
|
60
|
-
raise 'Failed to locate knife.rb file to configure chef!'
|
61
71
|
end
|
62
72
|
|
63
73
|
end
|
@@ -22,7 +22,7 @@ module BerkshelfExt
|
|
22
22
|
Dir.chdir(File.dirname(path))
|
23
23
|
instance_eval(content, File.expand_path(path), 1)
|
24
24
|
rescue => e
|
25
|
-
raise BerksfileReadError.new(e), "An error occurred while reading the Berksfile: #{e.to_s}"
|
25
|
+
raise ::Berkshelf::BerksfileReadError.new(e), "An error occurred while reading the Berksfile (#{path}): #{e.to_s}"
|
26
26
|
ensure
|
27
27
|
Dir.chdir(initial_path)
|
28
28
|
end
|
@@ -84,13 +84,23 @@ module BerkshelfExt
|
|
84
84
|
# solution and not the dependency that caused the failure, run
|
85
85
|
# each dependency through the graph individually so we can
|
86
86
|
# provide a useful error string
|
87
|
-
demands.each do |demand|
|
87
|
+
demands.reverse.each do |demand|
|
88
88
|
begin
|
89
89
|
solution = Solve.it!(graph, [demand])
|
90
90
|
rescue Solve::Errors::NoSolutionError
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
deps = @sources[demand.first].cached_cookbook.dependencies.map{|n,v| "#{n.strip}-#{v.sub(%r{^[^0-9]+}, '').strip}"}
|
92
|
+
cur = @sources.values.map(&:cached_cookbook).map{|c| "#{c.metadata.name}-#{c.metadata.version}"}
|
93
|
+
failed_on = Array(deps - cur)
|
94
|
+
# TODO: if failed on is empty, resort and solve to attempt
|
95
|
+
# to locate root cause
|
96
|
+
raise Berkshelf::NoSolution.new(
|
97
|
+
"\n\nFailed to resolve dependencies for:\n#{demand.join(': ')}\n" <<
|
98
|
+
"Probable failure on: #{failed_on.empty? ? 'UNKNOWN!?' : failed_on.join(', ')}\n" <<
|
99
|
+
"Dependencies:\n" <<
|
100
|
+
@sources[demand.first].cached_cookbook.dependencies.map{|n,v| " #{n}: #{v}"}.sort.join("\n") <<
|
101
|
+
"\nCurrently loaded:\n" <<
|
102
|
+
@sources.values.map(&:cached_cookbook).map{|c| " #{c.name}: #{c.metadata.name} - #{c.metadata.version}"}.sort.join("\n") <<
|
103
|
+
"\n"
|
94
104
|
)
|
95
105
|
end
|
96
106
|
end
|
@@ -3,9 +3,15 @@ module BerkshelfExt
|
|
3
3
|
module Cli
|
4
4
|
class << self
|
5
5
|
def included(klass)
|
6
|
-
klass.tasks['upload'].options
|
7
|
-
|
8
|
-
|
6
|
+
klass.tasks['upload'].options.update(
|
7
|
+
:nested_berksfiles => Thor::Option.new(
|
8
|
+
'nested_berksfiles', :type => :boolean, :default => false,
|
9
|
+
:desc => 'Use Berksfiles found within cookbooks specifed in Berksfile'
|
10
|
+
),
|
11
|
+
:nested_depth => Thor::Option.new(
|
12
|
+
'nested_depth', :type => :numeric, :default => 0,
|
13
|
+
:desc => 'Restrict nesting to this depth. Defaults to "0" (no restriction)'
|
14
|
+
)
|
9
15
|
)
|
10
16
|
end
|
11
17
|
end
|
@@ -26,7 +32,8 @@ module BerkshelfExt
|
|
26
32
|
self.downloader,
|
27
33
|
sources: sources(options),
|
28
34
|
skip_dependencies: options[:skip_dependencies],
|
29
|
-
nested_berksfiles: options[:nested_berksfiles]
|
35
|
+
nested_berksfiles: options[:nested_berksfiles],
|
36
|
+
nested_depth: options[:nested_depth]
|
30
37
|
)
|
31
38
|
end
|
32
39
|
end
|
@@ -43,6 +50,7 @@ module BerkshelfExt
|
|
43
50
|
end
|
44
51
|
|
45
52
|
def nested_berksfiles_initialize(downloader, options={})
|
53
|
+
@nested_depth_limit = options[:nested_depth].to_i
|
46
54
|
skip_deps = options[:skip_dependencies]
|
47
55
|
options[:skip_dependencies] = true
|
48
56
|
non_nested_berksfiles_initialize(downloader, options)
|
@@ -57,18 +65,24 @@ module BerkshelfExt
|
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
60
|
-
def process_nested_berksfiles(srcs)
|
68
|
+
def process_nested_berksfiles(srcs, depth=0)
|
61
69
|
srcs.map(&:name).each do |name|
|
70
|
+
next unless @sources[name].location.is_a?(Berkshelf::GitLocation) || @sources[name].location.is_a?(Berkshelf::PathLocation)
|
62
71
|
berks_path = File.join(@sources[name].cached_cookbook.path, 'Berksfile')
|
63
72
|
if(File.exists?(berks_path))
|
64
73
|
berksfile = Berkshelf::Berksfile.from_file(berks_path)
|
74
|
+
puts "processing berksfile: #{berks_path}"
|
65
75
|
new_sources = berksfile.sources.delete_if do |new_src|
|
66
|
-
@sources.has_key?(new_src.name)
|
76
|
+
@sources.has_key?(new_src.name) || new_src.location.class != Berkshelf::GitLocation
|
67
77
|
end
|
68
78
|
new_sources.each do |source|
|
69
79
|
add_source(source, false)
|
70
80
|
end
|
71
|
-
|
81
|
+
if((depth + 1) >= @nested_depth_limit)
|
82
|
+
puts "Nested depth threshold reached. Halting nesting on this branch path is halted! (leaf file: #{berks_path})"
|
83
|
+
else
|
84
|
+
process_nested_berksfiles(new_sources, depth + 1)
|
85
|
+
end
|
72
86
|
end
|
73
87
|
end
|
74
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: berkshelf
|