berkshelf_ext 1.0.6 → 1.0.8
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 +4 -0
- data/README.md +11 -0
- data/lib/berkshelf_ext/addons/fast_resolution.rb +48 -0
- data/lib/berkshelf_ext/all.rb +16 -10
- data/lib/berkshelf_ext/version.rb +1 -1
- metadata +2 -1
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## v1.0.8
|
2
|
+
* Add environment variable to allow loading all available extensions
|
3
|
+
* Add new addon extension fast_resolution to locate and use cached cookbooks faster
|
4
|
+
|
1
5
|
## v1.0.6
|
2
6
|
* Add custom resolve to berksfile for dependency_chains to account for reverted changeset
|
3
7
|
|
data/README.md
CHANGED
@@ -46,9 +46,20 @@ Addons are extensions that must be explicitly enabled via environment variable:
|
|
46
46
|
|
47
47
|
* `BERKSHELF_EXT_ADDONS="knife_uploader"`
|
48
48
|
|
49
|
+
It is important to note that these addons will generally make use of Chef internals
|
50
|
+
to do things.
|
51
|
+
|
49
52
|
### Available addons
|
50
53
|
|
51
54
|
* Knife based cookbook uploading (disables Ridley)[4]
|
55
|
+
* Faster dependency resolution via faster cached cookbook handling (fast_resolution)
|
56
|
+
|
57
|
+
## Load all the things!
|
58
|
+
|
59
|
+
If you want to just load everything that is available without explicitly defining
|
60
|
+
all the addons, just set the everything env variable:
|
61
|
+
|
62
|
+
* `BERKSHELF_EXT_EVERYTHING="true"`
|
52
63
|
|
53
64
|
# References
|
54
65
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'chef'
|
2
|
+
|
3
|
+
module BerkshelfExt
|
4
|
+
module FastResolution
|
5
|
+
module CookbookStore
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def included(klass)
|
9
|
+
klass.class_eval do
|
10
|
+
alias_method :non_fast_resolution_satisfy, :satisfy
|
11
|
+
alias_method :satisfy, :fast_resolution_satisfy
|
12
|
+
alias_method :non_fast_resolution_cookbooks, :cookbooks
|
13
|
+
alias_method :cookbooks, :fast_resolution_cookbooks
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def fast_resolution_satisfy(name, constraint)
|
19
|
+
if(constraint.to_s.start_with?('='))
|
20
|
+
get_version = constraint.version
|
21
|
+
else
|
22
|
+
graph = Solve::Graph.new
|
23
|
+
cookbooks(name).each { |cookbook| graph.artifacts(name, cookbook.version) }
|
24
|
+
get_version = Solve.it!(graph, [[name, constraint]]).first.last
|
25
|
+
end
|
26
|
+
c = cookbooks(name).detect{|ckbk| ckbk.version.to_s == get_version.to_s }
|
27
|
+
::Berkshelf::CachedCookbook.from_store_path(c.root_dir) if c
|
28
|
+
rescue Solve::Errors::NoSolutionError
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def fast_resolution_cookbooks(filter = nil)
|
33
|
+
[].tap do |cookbooks|
|
34
|
+
storage_path.each_child do |path|
|
35
|
+
loader = ::Chef::Cookbook::CookbookVersionLoader.new(path)
|
36
|
+
loader.load_cookbooks
|
37
|
+
cv = loader.cookbook_version
|
38
|
+
cb_name = cv.metadata.name.to_s.sub("-#{cv.version}", '')
|
39
|
+
next if filter && cb_name != filter
|
40
|
+
cookbooks << cv
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
Berkshelf::CookbookStore.send(:include, BerkshelfExt::FastResolution::CookbookStore)
|
data/lib/berkshelf_ext/all.rb
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
require 'berkshelf'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
if(ENV['BERKSHELF_EXT_EVERYTHING'].to_s.downcase == 'true')
|
4
|
+
Dir.glob(File.join(File.dirname(__FILE__), '**', '*.rb')).each do |ext_file|
|
5
|
+
require ext_file
|
6
6
|
end
|
7
|
-
|
8
|
-
|
7
|
+
else
|
8
|
+
Dir.glob(File.join(File.dirname(__FILE__), '*.rb')).each do |ext_file|
|
9
|
+
if(ENV['BERKSHELF_EXT_EXCEPT'])
|
10
|
+
next if ENV['BERKSHELF_EXT_EXCEPT'].split(',').include?(File.basename(ext_file).sub('.rb', ''))
|
11
|
+
end
|
12
|
+
if(ENV['BERKSHELF_EXT_ONLY'])
|
13
|
+
next unless ENV['BERKSHELF_EXT_ONLY'].split(',').include?(File.basename(ext_file).sub('.rb', ''))
|
14
|
+
end
|
15
|
+
require ext_file
|
9
16
|
end
|
10
|
-
require ext_file
|
11
|
-
end
|
12
17
|
|
13
|
-
if(ENV['BERKSHELF_EXT_ADDONS'])
|
14
|
-
|
15
|
-
|
18
|
+
if(ENV['BERKSHELF_EXT_ADDONS'])
|
19
|
+
ENV['BERKSHELF_EXT_ADDONS'].split(',').each do |addon|
|
20
|
+
require "berkshelf_ext/addons/#{addon.strip}"
|
21
|
+
end
|
16
22
|
end
|
17
23
|
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.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/berkshelf_ext/version.rb
|
57
57
|
- lib/berkshelf_ext/dependency_chains.rb
|
58
58
|
- lib/berkshelf_ext/addons/knife_uploader.rb
|
59
|
+
- lib/berkshelf_ext/addons/fast_resolution.rb
|
59
60
|
- lib/berkshelf_ext/non_recommends_depends.rb
|
60
61
|
- lib/berkshelf_ext/berksfile_loader_context.rb
|
61
62
|
- lib/berkshelf_ext.rb
|