berkshelf_ext 1.0.0 → 1.0.2
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 +6 -1
- data/README.md +24 -5
- data/berkshelf_ext-1.0.0.gem +0 -0
- data/berkshelf_ext.gemspec +1 -0
- data/bin/berks_ext +0 -0
- data/lib/berkshelf_ext/addons/knife_uploader.rb +62 -0
- data/lib/berkshelf_ext/all.rb +6 -0
- data/lib/berkshelf_ext/berksfile_loader_context.rb +2 -2
- data/lib/berkshelf_ext/dependency_chains.rb +32 -1
- data/lib/berkshelf_ext/non_recommends_depends.rb +20 -0
- data/lib/berkshelf_ext/version.rb +1 -1
- metadata +20 -2
data/CHANGELOG.md
CHANGED
@@ -1,2 +1,7 @@
|
|
1
|
-
##
|
1
|
+
## v1.0.2
|
2
|
+
* Add `non_recommends_depends` to fix dependency resolution
|
3
|
+
* Add `knife_uploader` addon to disable ridley based uploads
|
4
|
+
* Remove preemptive cookbook fetching. Fixes proper dependency resolution to use dependencies defined within Berksfile when explicitly defining cookbooks to upload.
|
5
|
+
|
6
|
+
## v1.0.0
|
2
7
|
* Initial release
|
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Berkshelf Ext
|
2
2
|
|
3
|
-
Berkshelf extensions to add features to berkshelf
|
4
|
-
accepted upstream.
|
3
|
+
Berkshelf extensions to add features to berkshelf.
|
5
4
|
|
6
5
|
## Usage
|
7
6
|
|
@@ -26,9 +25,12 @@ it as usual.
|
|
26
25
|
|
27
26
|
## Current extensions
|
28
27
|
|
29
|
-
|
30
|
-
|
31
|
-
*
|
28
|
+
These extensions are auto loaded by default.
|
29
|
+
|
30
|
+
* Resolution via nested berksfiles (nested_berksfiles)[1]
|
31
|
+
* Proper berksfile path when loading berksfiles (berksfile_loader_context)[2]
|
32
|
+
* Proper dependency resolution (dependency_chains)[3]
|
33
|
+
* Do not include recommends entries in cookbook dependencies (non_recommends_depends)
|
32
34
|
|
33
35
|
## Prevent extension loading
|
34
36
|
|
@@ -38,5 +40,22 @@ environment variables
|
|
38
40
|
* `BERKSHELF_EXT_EXCEPT="nested_berksfiles"`
|
39
41
|
* `BERKSHELF_EXT_ONLY="nested_berksfiles,berksfile_loader_context"`
|
40
42
|
|
43
|
+
## Current addons
|
44
|
+
|
45
|
+
Addons are extensions that must be explicitly enabled via environment variable:
|
46
|
+
|
47
|
+
* `BERKSHELF_EXT_ADDONS="knife_uploader"`
|
48
|
+
|
49
|
+
### Available addons
|
50
|
+
|
51
|
+
* Knife based cookbook uploading (disables Ridley)[4]
|
52
|
+
|
53
|
+
# References
|
54
|
+
|
55
|
+
1. https://github.com/RiotGames/berkshelf/pull/304
|
56
|
+
2. https://github.com/RiotGames/berkshelf/pull/304
|
57
|
+
3. https://github.com/RiotGames/berkshelf/pull/302
|
58
|
+
4. https://github.com/RiotGames/berkshelf/pull/291
|
59
|
+
|
41
60
|
# Info
|
42
61
|
* Repository: https://github.com/chrisroberts/berkshelf_ext
|
Binary file
|
data/berkshelf_ext.gemspec
CHANGED
data/bin/berks_ext
CHANGED
File without changes
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'chef'
|
2
|
+
require 'chef/cookbook_uploader'
|
3
|
+
|
4
|
+
module Ridley
|
5
|
+
class << self
|
6
|
+
def new(options)
|
7
|
+
RidleyMocker.new(options)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class RidleyMocker
|
13
|
+
def initialize(options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(sym, *args)
|
17
|
+
if(@ckbk)
|
18
|
+
@ckbk.send(sym, *args)
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def cookbook
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def alive?
|
29
|
+
false
|
30
|
+
end
|
31
|
+
|
32
|
+
def path
|
33
|
+
@path
|
34
|
+
end
|
35
|
+
|
36
|
+
def upload(path, upload_options)
|
37
|
+
chef_config!
|
38
|
+
@path = path
|
39
|
+
loader = Chef::Cookbook::CookbookVersionLoader.new(path)
|
40
|
+
loader.load_cookbooks
|
41
|
+
cv = loader.cookbook_version
|
42
|
+
cv.send(:generate_manifest)
|
43
|
+
cv.manifest['name'] = "#{cv.name}-#{cv.version}" #.sub!(%r{-[^-]+$}, '')
|
44
|
+
cv.manifest['cookbook_name'] = cv.name
|
45
|
+
cv.freeze_version if upload_options.delete(:freeze)
|
46
|
+
Chef::CookbookUploader.new([cv], cookbook.path, upload_options).upload_cookbooks
|
47
|
+
@ckbk = cv
|
48
|
+
end
|
49
|
+
|
50
|
+
def chef_config!
|
51
|
+
cwd = Dir.pwd.split('/')
|
52
|
+
until(cwd.empty?)
|
53
|
+
knife_conf = File.join(cwd.join('/'), '.chef/knife.rb')
|
54
|
+
if(File.exists?(knife_conf))
|
55
|
+
Chef::Config.from_file(knife_conf)
|
56
|
+
return
|
57
|
+
end
|
58
|
+
end
|
59
|
+
raise 'Failed to locate knife.rb file to configure chef!'
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/lib/berkshelf_ext/all.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module BerkshelfExt
|
2
2
|
module BerksfileLoaderContext
|
3
3
|
module Berksfile
|
4
4
|
def self.included(klass)
|
@@ -50,4 +50,4 @@ module Berkshelf
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
Berkshelf::Berksfile.send(:include,
|
53
|
+
Berkshelf::Berksfile.send(:include, BerkshelfExt::BerksfileLoaderContext::Berksfile)
|
@@ -1,5 +1,33 @@
|
|
1
1
|
module BerkshelfExt
|
2
2
|
module DependencyChains
|
3
|
+
module Berksfile
|
4
|
+
class << self
|
5
|
+
def included(klass)
|
6
|
+
klass.class_eval do
|
7
|
+
alias_method :non_dependency_chains_sources, :sources
|
8
|
+
alias_method :sources, :dependency_chains_sources
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
def dependency_chains_sources(options = {})
|
13
|
+
l_sources = @sources.collect { |name, source| source }.flatten
|
14
|
+
|
15
|
+
except = Array(options.fetch(:except, nil)).collect(&:to_sym)
|
16
|
+
only = Array(options.fetch(:only, nil)).collect(&:to_sym)
|
17
|
+
|
18
|
+
case
|
19
|
+
when !except.empty? && !only.empty?
|
20
|
+
raise Berkshelf::ArgumentError, "Cannot specify both :except and :only"
|
21
|
+
when !except.empty?
|
22
|
+
l_sources.select { |source| (except & source.groups).empty? }
|
23
|
+
when !only.empty?
|
24
|
+
l_sources.select { |source| !(only & source.groups).empty? }
|
25
|
+
else
|
26
|
+
l_sources
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
3
31
|
module Resolver
|
4
32
|
|
5
33
|
class << self
|
@@ -48,7 +76,10 @@ module BerkshelfExt
|
|
48
76
|
begin
|
49
77
|
solution = Solve.it!(graph, [demand])
|
50
78
|
rescue Solve::Errors::NoSolutionError
|
51
|
-
|
79
|
+
raise Berkshelf::NoSolution.new(
|
80
|
+
"Failed to resolve dependencies for:\n#{demand.join(': ')}\nDependencies: " <<
|
81
|
+
@sources[demand.first].cached_cookbook.dependencies.map{|n,v| " #{n}: #{v}"}.join("\n")
|
82
|
+
)
|
52
83
|
end
|
53
84
|
end
|
54
85
|
solution = Solve.it!(graph, demands)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module BerkshelfExt
|
2
|
+
module NonRecommendsDepends
|
3
|
+
module CachedCookbook
|
4
|
+
class << self
|
5
|
+
def included(klass)
|
6
|
+
klass.class_eval do
|
7
|
+
alias_method :non_non_recommends_depends_dependencies, :dependencies
|
8
|
+
alias_method :dependencies, :non_recommends_depends_dependencies
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def non_recommends_depends_dependencies
|
14
|
+
metadata.dependencies
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Berkshelf::CachedCookbook.send(:include, BerkshelfExt::NonRecommendsDepends::CachedCookbook)
|
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.2
|
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-04-
|
12
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: berkshelf
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 1.3.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: chef
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
description: Extenstions for berkshelf
|
31
47
|
email: chrisroberts.code@gmail.com
|
32
48
|
executables:
|
@@ -39,6 +55,8 @@ files:
|
|
39
55
|
- lib/berkshelf_ext/nested_berksfiles.rb
|
40
56
|
- lib/berkshelf_ext/version.rb
|
41
57
|
- lib/berkshelf_ext/dependency_chains.rb
|
58
|
+
- lib/berkshelf_ext/addons/knife_uploader.rb
|
59
|
+
- lib/berkshelf_ext/non_recommends_depends.rb
|
42
60
|
- lib/berkshelf_ext/berksfile_loader_context.rb
|
43
61
|
- lib/berkshelf_ext.rb
|
44
62
|
- README.md
|