berkshelf 0.6.0.beta2 → 0.6.0.beta3
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/.gitignore +1 -2
- data/.travis.yml +7 -0
- data/Gemfile +1 -1
- data/README.md +1 -0
- data/Thorfile +7 -0
- data/berkshelf.gemspec +4 -1
- data/features/config.feature +97 -0
- data/features/config_command.feature +10 -0
- data/features/cookbook_command.feature +12 -12
- data/features/default_locations.feature +5 -0
- data/features/install.feature +16 -0
- data/features/json_formatter.feature +1 -1
- data/features/step_definitions/cli_steps.rb +5 -1
- data/features/step_definitions/filesystem_steps.rb +45 -23
- data/features/upload_command.feature +4 -4
- data/generator_files/Gemfile.erb +2 -2
- data/generator_files/Vagrantfile.erb +34 -13
- data/generator_files/config.json +22 -0
- data/lib/berkshelf/cli.rb +24 -9
- data/lib/berkshelf/config.rb +51 -0
- data/lib/berkshelf/config_generator.rb +8 -0
- data/lib/berkshelf/config_validator.rb +78 -0
- data/lib/berkshelf/cookbook_generator.rb +2 -2
- data/lib/berkshelf/core_ext/file_utils.rb +36 -0
- data/lib/berkshelf/downloader.rb +41 -14
- data/lib/berkshelf/errors.rb +20 -0
- data/lib/berkshelf/formatters/human_readable.rb +7 -0
- data/lib/berkshelf/git.rb +13 -3
- data/lib/berkshelf/init_generator.rb +17 -4
- data/lib/berkshelf/locations/chef_api_location.rb +1 -1
- data/lib/berkshelf/locations/git_location.rb +1 -1
- data/lib/berkshelf/locations/site_location.rb +1 -1
- data/lib/berkshelf/version.rb +1 -1
- data/lib/berkshelf.rb +17 -10
- data/spec/support/knife.rb +1 -1
- data/spec/support/matchers/file_system_matchers.rb +16 -1
- data/spec/unit/berkshelf/config_spec.rb +91 -0
- data/spec/unit/berkshelf/config_validator_spec.rb +68 -0
- data/spec/unit/berkshelf/cookbook_source_spec.rb +4 -4
- data/spec/unit/berkshelf/core_ext/file_utils_spec.rb +23 -0
- data/spec/unit/berkshelf/init_generator_spec.rb +34 -32
- data/spec/unit/berkshelf/locations/chef_api_location_spec.rb +1 -1
- data/spec/unit/berkshelf/lockfile_spec.rb +2 -2
- data/spec/unit/berkshelf/resolver_spec.rb +1 -1
- data/spec/unit/berkshelf/uploader_spec.rb +1 -1
- metadata +68 -5
- data/lib/vagrant_init.rb +0 -2
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Berkshelf::ConfigValidator do
|
4
|
+
let(:config) { Berkshelf::Config.from_json json }
|
5
|
+
let(:config_validator) { klass.new Hash.new }
|
6
|
+
let(:json) { '{}' }
|
7
|
+
let(:klass) { described_class }
|
8
|
+
let(:structure) { Hash.new }
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
klass.any_instance.stub structure: structure
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#validate" do
|
15
|
+
subject { config_validator.validate config }
|
16
|
+
|
17
|
+
it { should be_true }
|
18
|
+
it { config.should be_valid }
|
19
|
+
|
20
|
+
context "with a top-level key" do
|
21
|
+
let(:json) { '{ "a": 1 }' }
|
22
|
+
let(:structure) { { a: Object } }
|
23
|
+
|
24
|
+
it { should be_true }
|
25
|
+
it { config.should be_valid }
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with a nested key" do
|
29
|
+
let(:json) { '{ "a": { "b": 1 } }' }
|
30
|
+
let(:structure) { { a: { b: Object } } }
|
31
|
+
|
32
|
+
it { should be_true }
|
33
|
+
it { config.should be_valid }
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with a top-level nonsense key" do
|
37
|
+
let(:json) { '{ "nonsense": null }' }
|
38
|
+
let(:structure) { { a: Object } }
|
39
|
+
|
40
|
+
it { should be_false }
|
41
|
+
it { config.should_not be_valid }
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with a nested nonsense key" do
|
45
|
+
let(:json) { '{ "a": { "nonsense": 1 } }' }
|
46
|
+
let(:structure) { { a: { b: Object } } }
|
47
|
+
|
48
|
+
it { should be_false }
|
49
|
+
it { config.should_not be_valid }
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with a top-level key that doesn't match the expected type" do
|
53
|
+
let(:json) { '{ "a": 1 }' }
|
54
|
+
let(:structure) { { a: String } }
|
55
|
+
|
56
|
+
it { should be_false }
|
57
|
+
it { config.should_not be_valid }
|
58
|
+
end
|
59
|
+
|
60
|
+
context "with a nested key that doesn't match the expected type" do
|
61
|
+
let(:json) { '{ "a": { "b": 1 } }' }
|
62
|
+
let(:structure) { { a: { b: String } } }
|
63
|
+
|
64
|
+
it { should be_false }
|
65
|
+
it { config.should_not be_valid }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -190,24 +190,24 @@ module Berkshelf
|
|
190
190
|
describe '#add_group' do
|
191
191
|
it "should store strings as symbols" do
|
192
192
|
subject.add_group "foo"
|
193
|
-
subject.groups.should
|
193
|
+
subject.groups.should =~ [:default, :foo]
|
194
194
|
end
|
195
195
|
|
196
196
|
it "should not store duplicate groups" do
|
197
197
|
subject.add_group "bar"
|
198
198
|
subject.add_group "bar"
|
199
199
|
subject.add_group :bar
|
200
|
-
subject.groups.should
|
200
|
+
subject.groups.should =~ [:default, :bar]
|
201
201
|
end
|
202
202
|
|
203
203
|
it "should add multiple groups" do
|
204
204
|
subject.add_group "baz", "quux"
|
205
|
-
subject.groups.should
|
205
|
+
subject.groups.should =~ [:default, :baz, :quux]
|
206
206
|
end
|
207
207
|
|
208
208
|
it "should handle multiple groups as an array" do
|
209
209
|
subject.add_group ["baz", "quux"]
|
210
|
-
subject.groups.should
|
210
|
+
subject.groups.should =~ [:default, :baz, :quux]
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FileUtils do
|
4
|
+
describe "#mv" do
|
5
|
+
let(:src) { double('src') }
|
6
|
+
let(:dest) { double('dest') }
|
7
|
+
let(:options) { double('options') }
|
8
|
+
|
9
|
+
it "delegates to #safe_mv if on Windows" do
|
10
|
+
subject.stub(:windows?) { true }
|
11
|
+
FileUtils.should_receive(:safe_mv).with(src, dest, options)
|
12
|
+
|
13
|
+
FileUtils.mv(src, dest, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "delegates to #old_mv if not on Windows" do
|
17
|
+
subject.stub(:windows?) { false }
|
18
|
+
FileUtils.should_receive(:old_mv).with(src, dest, options)
|
19
|
+
|
20
|
+
FileUtils.mv(src, dest, options)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -14,9 +14,15 @@ module Berkshelf
|
|
14
14
|
|
15
15
|
specify do
|
16
16
|
target.should have_structure {
|
17
|
+
file ".gitignore"
|
17
18
|
file "Berksfile"
|
18
19
|
file "Gemfile" do
|
19
20
|
contains "gem 'berkshelf'"
|
21
|
+
contains "gem 'vagrant'"
|
22
|
+
end
|
23
|
+
file "Vagrantfile" do
|
24
|
+
contains "require 'berkshelf/vagrant'"
|
25
|
+
contains "recipe[some_cookbook::default]"
|
20
26
|
end
|
21
27
|
no_file "chefignore"
|
22
28
|
}
|
@@ -39,6 +45,8 @@ module Berkshelf
|
|
39
45
|
|
40
46
|
context "with a metadata entry in the Berksfile" do
|
41
47
|
before do
|
48
|
+
Dir.mkdir target
|
49
|
+
File.write target.join("metadata.rb"), ""
|
42
50
|
generator = subject.new([target], metadata_entry: true)
|
43
51
|
capture(:stdout) { generator.invoke_all }
|
44
52
|
end
|
@@ -52,38 +60,6 @@ module Berkshelf
|
|
52
60
|
end
|
53
61
|
end
|
54
62
|
|
55
|
-
context "with the vagrant option true" do
|
56
|
-
before do
|
57
|
-
generator = subject.new([target], vagrant: true)
|
58
|
-
quietly { generator.invoke_all }
|
59
|
-
end
|
60
|
-
|
61
|
-
specify do
|
62
|
-
target.should have_structure {
|
63
|
-
file "Vagrantfile" do
|
64
|
-
contains "require 'berkshelf/vagrant'"
|
65
|
-
contains "recipe[some_cookbook::default]"
|
66
|
-
end
|
67
|
-
file "Gemfile" do
|
68
|
-
contains "gem 'vagrant'"
|
69
|
-
end
|
70
|
-
}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context "with the git option true" do
|
75
|
-
before do
|
76
|
-
generator = subject.new([target], git: true)
|
77
|
-
capture(:stdout) { generator.invoke_all }
|
78
|
-
end
|
79
|
-
|
80
|
-
specify do
|
81
|
-
target.should have_structure {
|
82
|
-
file ".gitignore"
|
83
|
-
}
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
63
|
context "with the foodcritic option true" do
|
88
64
|
before do
|
89
65
|
generator = subject.new([target], foodcritic: true)
|
@@ -148,5 +124,31 @@ module Berkshelf
|
|
148
124
|
generator.send(:cookbook_name).should eql("some_cookbook")
|
149
125
|
end
|
150
126
|
end
|
127
|
+
|
128
|
+
context "when skipping git" do
|
129
|
+
before do
|
130
|
+
generator = subject.new([target], skip_git: true)
|
131
|
+
capture(:stdout) { generator.invoke_all }
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should not have a .git directory" do
|
135
|
+
target.should_not have_structure {
|
136
|
+
directory ".git"
|
137
|
+
}
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
context "when skipping vagrant" do
|
142
|
+
before do
|
143
|
+
generator = subject.new([target], skip_vagrant: true)
|
144
|
+
capture(:stdout) { generator.invoke_all }
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should not have a Vagrantfile" do
|
148
|
+
target.should have_structure {
|
149
|
+
no_file "Vagrantfile"
|
150
|
+
}
|
151
|
+
end
|
152
|
+
end
|
151
153
|
end
|
152
154
|
end
|
@@ -21,9 +21,9 @@ module Berkshelf
|
|
21
21
|
|
22
22
|
Lockfile.new(resolver.sources).write
|
23
23
|
|
24
|
-
File.read('Berksfile.lock').split(/\r?\n/).
|
24
|
+
File.read('Berksfile.lock').split(/\r?\n/).should =~ [
|
25
25
|
"cookbook 'bluepill', :locked_version => '1.1.0'",
|
26
|
-
"cookbook 'build-essential', :locked_version => '1.1.
|
26
|
+
"cookbook 'build-essential', :locked_version => '1.1.2'",
|
27
27
|
"cookbook 'nginx', :locked_version => '0.101.0'",
|
28
28
|
"cookbook 'ohai', :locked_version => '1.0.2'",
|
29
29
|
"cookbook 'runit', :locked_version => '0.15.0'"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Berkshelf
|
4
|
-
describe Uploader do
|
4
|
+
describe Uploader, :chef_server do
|
5
5
|
subject { Uploader.new(server_url: Chef::Config[:chef_server_url], client_key: Chef::Config[:client_key], client_name: Chef::Config[:node_name]) }
|
6
6
|
|
7
7
|
describe "#upload" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.0.
|
4
|
+
version: 0.6.0.beta3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,8 +12,24 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
15
|
+
date: 2012-10-29 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: chozo
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ! '>='
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.1.0
|
25
|
+
type: :runtime
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.1.0
|
17
33
|
- !ruby/object:Gem::Dependency
|
18
34
|
name: ridley
|
19
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -37,7 +53,7 @@ dependencies:
|
|
37
53
|
requirements:
|
38
54
|
- - ! '>='
|
39
55
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
56
|
+
version: 0.4.0.rc1
|
41
57
|
type: :runtime
|
42
58
|
prerelease: false
|
43
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -45,7 +61,7 @@ dependencies:
|
|
45
61
|
requirements:
|
46
62
|
- - ! '>='
|
47
63
|
- !ruby/object:Gem::Version
|
48
|
-
version: 0.
|
64
|
+
version: 0.4.0.rc1
|
49
65
|
- !ruby/object:Gem::Dependency
|
50
66
|
name: chef
|
51
67
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,6 +158,38 @@ dependencies:
|
|
142
158
|
- - ! '>='
|
143
159
|
- !ruby/object:Gem::Version
|
144
160
|
version: '0'
|
161
|
+
- !ruby/object:Gem::Dependency
|
162
|
+
name: hashie
|
163
|
+
requirement: !ruby/object:Gem::Requirement
|
164
|
+
none: false
|
165
|
+
requirements:
|
166
|
+
- - ! '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
type: :runtime
|
170
|
+
prerelease: false
|
171
|
+
version_requirements: !ruby/object:Gem::Requirement
|
172
|
+
none: false
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
- !ruby/object:Gem::Dependency
|
178
|
+
name: activemodel
|
179
|
+
requirement: !ruby/object:Gem::Requirement
|
180
|
+
none: false
|
181
|
+
requirements:
|
182
|
+
- - ! '>='
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
185
|
+
type: :runtime
|
186
|
+
prerelease: false
|
187
|
+
version_requirements: !ruby/object:Gem::Requirement
|
188
|
+
none: false
|
189
|
+
requirements:
|
190
|
+
- - ! '>='
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
145
193
|
- !ruby/object:Gem::Dependency
|
146
194
|
name: redcarpet
|
147
195
|
requirement: !ruby/object:Gem::Requirement
|
@@ -443,6 +491,7 @@ extra_rdoc_files: []
|
|
443
491
|
files:
|
444
492
|
- .gitignore
|
445
493
|
- .rbenv-version
|
494
|
+
- .travis.yml
|
446
495
|
- Gemfile
|
447
496
|
- Guardfile
|
448
497
|
- LICENSE
|
@@ -450,6 +499,8 @@ files:
|
|
450
499
|
- Thorfile
|
451
500
|
- berkshelf.gemspec
|
452
501
|
- bin/berks
|
502
|
+
- features/config.feature
|
503
|
+
- features/config_command.feature
|
453
504
|
- features/cookbook_command.feature
|
454
505
|
- features/default_locations.feature
|
455
506
|
- features/groups_install.feature
|
@@ -472,6 +523,7 @@ files:
|
|
472
523
|
- generator_files/Thorfile.erb
|
473
524
|
- generator_files/Vagrantfile.erb
|
474
525
|
- generator_files/chefignore
|
526
|
+
- generator_files/config.json
|
475
527
|
- generator_files/default_recipe.erb
|
476
528
|
- generator_files/gitignore.erb
|
477
529
|
- generator_files/licenses/apachev2.erb
|
@@ -485,11 +537,15 @@ files:
|
|
485
537
|
- lib/berkshelf/berksfile.rb
|
486
538
|
- lib/berkshelf/cached_cookbook.rb
|
487
539
|
- lib/berkshelf/cli.rb
|
540
|
+
- lib/berkshelf/config.rb
|
541
|
+
- lib/berkshelf/config_generator.rb
|
542
|
+
- lib/berkshelf/config_validator.rb
|
488
543
|
- lib/berkshelf/cookbook_generator.rb
|
489
544
|
- lib/berkshelf/cookbook_source.rb
|
490
545
|
- lib/berkshelf/cookbook_store.rb
|
491
546
|
- lib/berkshelf/core_ext.rb
|
492
547
|
- lib/berkshelf/core_ext/file.rb
|
548
|
+
- lib/berkshelf/core_ext/file_utils.rb
|
493
549
|
- lib/berkshelf/core_ext/pathname.rb
|
494
550
|
- lib/berkshelf/core_ext/string.rb
|
495
551
|
- lib/berkshelf/downloader.rb
|
@@ -520,7 +576,6 @@ files:
|
|
520
576
|
- lib/berkshelf/version.rb
|
521
577
|
- lib/thor/monkies.rb
|
522
578
|
- lib/thor/monkies/hash_with_indifferent_access.rb
|
523
|
-
- lib/vagrant_init.rb
|
524
579
|
- spec/fixtures/Berksfile
|
525
580
|
- spec/fixtures/cookbooks/example_cookbook-0.5.0/README.md
|
526
581
|
- spec/fixtures/cookbooks/example_cookbook-0.5.0/metadata.rb
|
@@ -555,9 +610,12 @@ files:
|
|
555
610
|
- spec/support/matchers/filepath_matchers.rb
|
556
611
|
- spec/unit/berkshelf/berksfile_spec.rb
|
557
612
|
- spec/unit/berkshelf/cached_cookbook_spec.rb
|
613
|
+
- spec/unit/berkshelf/config_spec.rb
|
614
|
+
- spec/unit/berkshelf/config_validator_spec.rb
|
558
615
|
- spec/unit/berkshelf/cookbook_generator_spec.rb
|
559
616
|
- spec/unit/berkshelf/cookbook_source_spec.rb
|
560
617
|
- spec/unit/berkshelf/cookbook_store_spec.rb
|
618
|
+
- spec/unit/berkshelf/core_ext/file_utils_spec.rb
|
561
619
|
- spec/unit/berkshelf/downloader_spec.rb
|
562
620
|
- spec/unit/berkshelf/formatters_spec.rb
|
563
621
|
- spec/unit/berkshelf/git_spec.rb
|
@@ -596,6 +654,8 @@ signing_key:
|
|
596
654
|
specification_version: 3
|
597
655
|
summary: Manages a Cookbook's, or an Application's, Cookbook dependencies
|
598
656
|
test_files:
|
657
|
+
- features/config.feature
|
658
|
+
- features/config_command.feature
|
599
659
|
- features/cookbook_command.feature
|
600
660
|
- features/default_locations.feature
|
601
661
|
- features/groups_install.feature
|
@@ -646,9 +706,12 @@ test_files:
|
|
646
706
|
- spec/support/matchers/filepath_matchers.rb
|
647
707
|
- spec/unit/berkshelf/berksfile_spec.rb
|
648
708
|
- spec/unit/berkshelf/cached_cookbook_spec.rb
|
709
|
+
- spec/unit/berkshelf/config_spec.rb
|
710
|
+
- spec/unit/berkshelf/config_validator_spec.rb
|
649
711
|
- spec/unit/berkshelf/cookbook_generator_spec.rb
|
650
712
|
- spec/unit/berkshelf/cookbook_source_spec.rb
|
651
713
|
- spec/unit/berkshelf/cookbook_store_spec.rb
|
714
|
+
- spec/unit/berkshelf/core_ext/file_utils_spec.rb
|
652
715
|
- spec/unit/berkshelf/downloader_spec.rb
|
653
716
|
- spec/unit/berkshelf/formatters_spec.rb
|
654
717
|
- spec/unit/berkshelf/git_spec.rb
|
data/lib/vagrant_init.rb
DELETED