berkshelf 2.0.18 → 3.0.0.beta1
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/.ruby-version +1 -1
- data/.travis.yml +4 -1
- data/CHANGELOG.md +2 -26
- data/Gemfile +12 -2
- data/README.md +9 -1
- data/berkshelf.gemspec +9 -18
- data/bin/berks +3 -13
- data/features/apply_command.feature +11 -9
- data/features/berksfile.feature +8 -10
- data/features/config.feature +1 -2
- data/features/configure_command.feature +13 -14
- data/features/contingent_command.feature +13 -1
- data/features/cookbook_command.feature +2 -4
- data/features/groups_install.feature +10 -2
- data/features/help.feature +1 -1
- data/features/init_command.feature +5 -7
- data/features/install_command.feature +157 -228
- data/features/json_formatter.feature +27 -15
- data/features/licenses.feature +18 -12
- data/features/list_command.feature +6 -1
- data/features/lockfile.feature +116 -72
- data/features/outdated_command.feature +3 -47
- data/features/package_command.feature +10 -7
- data/features/shelf/show.feature +2 -2
- data/features/shelf/uninstall.feature +2 -2
- data/features/show_command.feature +10 -3
- data/features/step_definitions/chef/config_steps.rb +12 -0
- data/features/step_definitions/chef_server_steps.rb +16 -16
- data/features/step_definitions/cli_steps.rb +3 -79
- data/features/step_definitions/config_steps.rb +43 -0
- data/features/step_definitions/environment_steps.rb +7 -0
- data/features/step_definitions/filesystem_steps.rb +12 -57
- data/features/step_definitions/gem_steps.rb +1 -2
- data/features/step_definitions/json_steps.rb +3 -1
- data/features/step_definitions/lockfile_steps.rb +4 -0
- data/features/step_definitions/utility_steps.rb +0 -19
- data/features/support/aruba.rb +12 -0
- data/features/support/env.rb +52 -57
- data/features/update_command.feature +37 -23
- data/features/upload_command.feature +96 -160
- data/generator_files/Berksfile.erb +2 -1
- data/generator_files/Vagrantfile.erb +3 -0
- data/generator_files/default_test.rb.erb +1 -1
- data/generator_files/helpers.rb.erb +1 -1
- data/lib/berkshelf.rb +43 -24
- data/lib/berkshelf/api_client.rb +67 -0
- data/lib/berkshelf/api_client/remote_cookbook.rb +42 -0
- data/lib/berkshelf/berksfile.rb +232 -420
- data/lib/berkshelf/cached_cookbook.rb +22 -10
- data/lib/berkshelf/chef/config.rb +1 -0
- data/lib/berkshelf/cli.rb +66 -68
- data/lib/berkshelf/commands/shelf.rb +1 -1
- data/lib/berkshelf/community_rest.rb +10 -17
- data/lib/berkshelf/config.rb +23 -27
- data/lib/berkshelf/cookbook_generator.rb +3 -4
- data/lib/berkshelf/cookbook_store.rb +74 -17
- data/lib/berkshelf/core_ext/file.rb +2 -2
- data/lib/berkshelf/core_ext/pathname.rb +7 -5
- data/lib/berkshelf/{cookbook_source.rb → dependency.rb} +47 -67
- data/lib/berkshelf/downloader.rb +49 -106
- data/lib/berkshelf/errors.rb +64 -71
- data/lib/berkshelf/formatters.rb +11 -9
- data/lib/berkshelf/formatters/human_readable.rb +9 -9
- data/lib/berkshelf/formatters/json.rb +14 -4
- data/lib/berkshelf/init_generator.rb +3 -3
- data/lib/berkshelf/installer.rb +136 -0
- data/lib/berkshelf/location.rb +91 -131
- data/lib/berkshelf/locations/git_location.rb +9 -11
- data/lib/berkshelf/locations/github_location.rb +1 -1
- data/lib/berkshelf/locations/path_location.rb +10 -27
- data/lib/berkshelf/lockfile.rb +92 -70
- data/lib/berkshelf/logger.rb +4 -7
- data/lib/berkshelf/mixin/config.rb +21 -4
- data/lib/berkshelf/resolver.rb +60 -150
- data/lib/berkshelf/resolver/graph.rb +44 -0
- data/lib/berkshelf/source.rb +55 -0
- data/lib/berkshelf/source_uri.rb +38 -0
- data/lib/berkshelf/version.rb +1 -1
- data/spec/config/knife.rb +1 -1
- data/spec/fixtures/cassettes/Berkshelf_Resolver/_initialize/adds_the_dependencies_of_the_dependency_as_dependencies.yml +3694 -0
- data/spec/fixtures/cookbooks/example_cookbook/Berksfile.lock +1 -1
- data/spec/fixtures/lockfiles/default.lock +1 -1
- data/spec/spec_helper.rb +20 -121
- data/spec/support/chef_api.rb +3 -4
- data/spec/support/chef_server.rb +20 -11
- data/spec/support/git.rb +127 -0
- data/spec/support/kitchen.rb +12 -0
- data/spec/support/path_helpers.rb +69 -0
- data/spec/unit/berkshelf/api_client/remote_cookbook_spec.rb +23 -0
- data/spec/unit/berkshelf/api_client_spec.rb +57 -0
- data/spec/unit/berkshelf/berksfile_spec.rb +206 -324
- data/spec/unit/berkshelf/cached_cookbook_spec.rb +73 -38
- data/spec/unit/berkshelf/community_rest_spec.rb +30 -71
- data/spec/unit/berkshelf/config_spec.rb +3 -14
- data/spec/unit/berkshelf/cookbook_generator_spec.rb +1 -2
- data/spec/unit/berkshelf/cookbook_store_spec.rb +12 -7
- data/spec/unit/berkshelf/dependency_spec.rb +285 -0
- data/spec/unit/berkshelf/downloader_spec.rb +4 -183
- data/spec/unit/berkshelf/formatters/null_spec.rb +1 -1
- data/spec/unit/berkshelf/formatters_spec.rb +4 -2
- data/spec/unit/berkshelf/git_spec.rb +15 -15
- data/spec/unit/berkshelf/installer_spec.rb +39 -0
- data/spec/unit/berkshelf/location_spec.rb +87 -114
- data/spec/unit/berkshelf/locations/git_location_spec.rb +41 -53
- data/spec/unit/berkshelf/locations/path_location_spec.rb +13 -23
- data/spec/unit/berkshelf/lockfile_spec.rb +38 -40
- data/spec/unit/berkshelf/resolver/graph_spec.rb +44 -0
- data/spec/unit/berkshelf/resolver_spec.rb +34 -83
- data/spec/unit/berkshelf/source_spec.rb +23 -0
- data/spec/unit/berkshelf/source_uri_spec.rb +29 -0
- metadata +149 -188
- checksums.yaml +0 -7
- data/features/default_locations.feature +0 -127
- data/features/step_definitions/berksfile_steps.rb +0 -8
- data/features/step_definitions/configure_cli_steps.rb +0 -19
- data/features/vendor_install.feature +0 -19
- data/lib/berkshelf/core_ext/openuri.rb +0 -36
- data/lib/berkshelf/core_ext/rbzip2.rb +0 -8
- data/lib/berkshelf/locations/chef_api_location.rb +0 -228
- data/lib/berkshelf/locations/site_location.rb +0 -92
- data/lib/berkshelf/test.rb +0 -35
- data/spec/knife.rb.sample +0 -12
- data/spec/support/test_generators.rb +0 -27
- data/spec/unit/berkshelf/cli_spec.rb +0 -16
- data/spec/unit/berkshelf/cookbook_source_spec.rb +0 -358
- data/spec/unit/berkshelf/core_ext/pathname_spec.rb +0 -46
- data/spec/unit/berkshelf/locations/chef_api_location_spec.rb +0 -139
- data/spec/unit/berkshelf/locations/site_location_spec.rb +0 -19
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Pathname do
|
|
4
|
-
describe "#cookbook?" do
|
|
5
|
-
let(:cookbook_path) { tmp_path }
|
|
6
|
-
let(:metadata_rb) { tmp_path.join("metadata.rb") }
|
|
7
|
-
let(:metadata_json) { tmp_path.join("metadata.json") }
|
|
8
|
-
|
|
9
|
-
subject { Pathname.new(cookbook_path) }
|
|
10
|
-
|
|
11
|
-
context "when the path contains a metadata.json file" do
|
|
12
|
-
before { FileUtils.touch(metadata_json) }
|
|
13
|
-
its(:cookbook?) { should be_true }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
context "when the path contains a metadata.rb file" do
|
|
17
|
-
before { FileUtils.touch(metadata_rb) }
|
|
18
|
-
its(:cookbook?) { should be_true }
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
context "when the path does not contain a metadata.json or metadata.rb file" do
|
|
22
|
-
before { FileUtils.rm_f(metadata_rb) && FileUtils.rm_f(metadata_json) }
|
|
23
|
-
its(:cookbook?) { should be_false }
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe "#cookbook_root" do
|
|
28
|
-
let(:root_path) { fixtures_path.join("cookbooks", "example_cookbook") }
|
|
29
|
-
let(:cookbook_path) { root_path }
|
|
30
|
-
subject { Pathname.new(cookbook_path) }
|
|
31
|
-
|
|
32
|
-
context "when in the root of a cookbook" do
|
|
33
|
-
its(:cookbook_root) { should eql(root_path) }
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
context "when in the structure of a cookbook" do
|
|
37
|
-
let(:cookbook_path) { root_path.join("recipes") }
|
|
38
|
-
its(:cookbook_root) { should eql(root_path) }
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
context "when not within the structure of a cookbook" do
|
|
42
|
-
let(:cookbook_path) { "/" }
|
|
43
|
-
its(:cookbook_root) { should be_nil }
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Berkshelf::ChefAPILocation, :chef_server do
|
|
4
|
-
let(:test_chef_api) { 'https://chefserver:8081' }
|
|
5
|
-
let(:node_name) { 'reset' }
|
|
6
|
-
let(:client_key) { fixtures_path.join('reset.pem').to_s }
|
|
7
|
-
|
|
8
|
-
let(:valid_uri) { test_chef_api }
|
|
9
|
-
let(:invalid_uri) { 'notauri' }
|
|
10
|
-
let(:constraint) { double('constraint') }
|
|
11
|
-
|
|
12
|
-
describe '.initialize' do
|
|
13
|
-
subject do
|
|
14
|
-
Berkshelf::ChefAPILocation.new('nginx',
|
|
15
|
-
constraint,
|
|
16
|
-
chef_api: test_chef_api,
|
|
17
|
-
node_name: node_name,
|
|
18
|
-
client_key: client_key
|
|
19
|
-
)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'sets the uri attribute to the value of the chef_api option' do
|
|
23
|
-
expect(subject.uri).to eq(test_chef_api)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it 'sets the node_name attribute to the value of the node_name option' do
|
|
27
|
-
expect(subject.node_name).to eq(node_name)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it 'sets the client_key attribute to the value of the client_key option' do
|
|
31
|
-
expect(subject.client_key).to eq(client_key)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
context 'when an invalid Chef API URI is given' do
|
|
35
|
-
it 'raises Berkshelf::InvalidChefAPILocation' do
|
|
36
|
-
expect {
|
|
37
|
-
Berkshelf::ChefAPILocation.new("nginx", constraint, chef_api: invalid_uri, node_name: node_name, client_key: client_key)
|
|
38
|
-
}.to raise_error(Berkshelf::InvalidChefAPILocation, "'notauri' is not a valid Chef API URI.")
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context 'when no option for node_name is supplied' do
|
|
43
|
-
it 'raises Berkshelf::InvalidChefAPILocation' do
|
|
44
|
-
expect {
|
|
45
|
-
Berkshelf::ChefAPILocation.new('nginx', constraint, chef_api: invalid_uri, client_key: client_key)
|
|
46
|
-
}.to raise_error(Berkshelf::InvalidChefAPILocation)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
context 'when no option for client_key is supplied' do
|
|
51
|
-
it 'raises Berkshelf::InvalidChefAPILocation' do
|
|
52
|
-
expect {
|
|
53
|
-
Berkshelf::ChefAPILocation.new('nginx', constraint, chef_api: invalid_uri, node_name: node_name)
|
|
54
|
-
}.to raise_error(Berkshelf::InvalidChefAPILocation)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context 'given the symbol :config for the value of chef_api:' do
|
|
59
|
-
subject do
|
|
60
|
-
Berkshelf::ChefAPILocation.new('nginx', constraint, chef_api: :config)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it 'uses the value of Berkshelf::Chef.instance.chef.chef_server_url for the uri attribute' do
|
|
64
|
-
expect(subject.uri).to eq(Berkshelf::Config.instance.chef.chef_server_url)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it 'uses the value of Berkshelf::Chef.instance.chef.node_name for the node_name attribute' do
|
|
68
|
-
expect(subject.node_name).to eq(Berkshelf::Config.instance.chef.node_name)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it 'uses the value of Berkshelf::Chef.instance.chef.client_key for the client_key attribute' do
|
|
72
|
-
expect(subject.client_key).to eq(Berkshelf::Config.instance.chef.client_key)
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
describe '.validate_uri' do
|
|
78
|
-
it 'returns false if the given URI is invalid' do
|
|
79
|
-
expect(Berkshelf::ChefAPILocation.validate_uri(invalid_uri)).to be_false
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it 'returns true if the given URI is valid' do
|
|
83
|
-
expect(Berkshelf::ChefAPILocation.validate_uri(valid_uri)).to be_true
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
describe '.validate_uri!' do
|
|
88
|
-
it 'raises Berkshelf::InvalidChefAPILocation if the given URI is invalid' do
|
|
89
|
-
expect {
|
|
90
|
-
Berkshelf::ChefAPILocation.validate_uri!(invalid_uri)
|
|
91
|
-
}.to raise_error(Berkshelf::InvalidChefAPILocation, "'notauri' is not a valid Chef API URI.")
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it 'returns true if the given URI is valid' do
|
|
95
|
-
expect(Berkshelf::ChefAPILocation.validate_uri!(valid_uri)).to be_true
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
subject do
|
|
102
|
-
Berkshelf::ChefAPILocation.new('nginx',
|
|
103
|
-
nil,
|
|
104
|
-
chef_api: test_chef_api,
|
|
105
|
-
node_name: node_name,
|
|
106
|
-
client_key: client_key
|
|
107
|
-
)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
describe '#target_cookbook' do
|
|
111
|
-
let(:cookbook_version) { double('cookbook_version') }
|
|
112
|
-
|
|
113
|
-
context 'when a version constraint is present' do
|
|
114
|
-
let(:constraint) { double('constraint') }
|
|
115
|
-
|
|
116
|
-
it 'returns the best solution for the constraint' do
|
|
117
|
-
subject.stub(:version_constraint).and_return(constraint)
|
|
118
|
-
subject.stub_chain(:conn, :cookbook, :satisfy).with(subject.name, constraint).and_return(cookbook_version)
|
|
119
|
-
|
|
120
|
-
expect(subject.target_cookbook).to eq(cookbook_version)
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
context 'when a version constraint is not present' do
|
|
125
|
-
it 'returns the latest version of the cookbook' do
|
|
126
|
-
subject.stub(:version_constraint).and_return(nil)
|
|
127
|
-
subject.stub_chain(:conn, :cookbook, :latest_version).with(subject.name).and_return(cookbook_version)
|
|
128
|
-
|
|
129
|
-
expect(subject.target_cookbook).to eq(cookbook_version)
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
describe '#to_s' do
|
|
135
|
-
it 'returns a string containing the location key and the Chef API URI' do
|
|
136
|
-
expect(subject.to_s).to eq("chef_api: '#{test_chef_api}'")
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Berkshelf::SiteLocation do
|
|
4
|
-
describe '#download' do
|
|
5
|
-
pending
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe '#target_version' do
|
|
9
|
-
pending
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
describe '#to_hash' do
|
|
13
|
-
pending
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
describe '#to_s' do
|
|
17
|
-
pending
|
|
18
|
-
end
|
|
19
|
-
end
|