chef-dk 0.4.0 → 0.5.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +1 -3
  3. data/README.md +20 -15
  4. data/lib/chef-dk/cli.rb +18 -1
  5. data/lib/chef-dk/command/verify.rb +1 -1
  6. data/lib/chef-dk/policyfile/cookbook_location_specification.rb +5 -1
  7. data/lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb +44 -0
  8. data/lib/chef-dk/policyfile/uploader.rb +58 -6
  9. data/lib/chef-dk/policyfile_lock.rb +42 -0
  10. data/lib/chef-dk/skeletons/code_generator/files/default/{repo/cookbooks → cookbook_readmes}/README-policy.md +0 -0
  11. data/lib/chef-dk/skeletons/code_generator/files/default/{repo/cookbooks → cookbook_readmes}/README.md +1 -1
  12. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
  13. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -0
  14. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
  15. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +13 -18
  16. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
  17. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +7 -3
  18. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
  19. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +6 -13
  20. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
  21. data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +5 -1
  22. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +5 -1
  23. data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +5 -20
  24. data/lib/chef-dk/version.rb +1 -1
  25. data/lib/kitchen/provisioner/policyfile_zero.rb +21 -9
  26. data/spec/spec_helper.rb +8 -0
  27. data/spec/unit/cli_spec.rb +49 -3
  28. data/spec/unit/command/generator_commands/app_spec.rb +1 -1
  29. data/spec/unit/command/generator_commands/cookbook_spec.rb +1 -1
  30. data/spec/unit/command/generator_commands/repo_spec.rb +46 -50
  31. data/spec/unit/policyfile/uploader_spec.rb +225 -171
  32. data/spec/unit/policyfile_evaluation_spec.rb +16 -0
  33. data/spec/unit/policyfile_lock_build_spec.rb +156 -0
  34. metadata +18 -9
  35. data/lib/chef-dk/skeletons/code_generator/files/default/repo/Rakefile +0 -65
  36. data/lib/chef-dk/skeletons/code_generator/files/default/repo/certificates/README.md +0 -19
  37. data/lib/chef-dk/skeletons/code_generator/templates/default/repo/config/rake.rb.erb +0 -38
@@ -206,6 +206,22 @@ E
206
206
 
207
207
  end
208
208
 
209
+ context "with an added cookbook with no options" do
210
+
211
+ let(:policyfile_rb) do
212
+ <<-EOH
213
+ run_list "foo", "bar"
214
+ cookbook "baz"
215
+ EOH
216
+ end
217
+
218
+ it "adds the cookbook to the list of location specs" do
219
+ expect(policyfile.errors).to eq([])
220
+ expected_cb_spec = ChefDK::Policyfile::CookbookLocationSpecification.new("baz", ">= 0.0.0", {}, storage_config)
221
+ expect(policyfile.cookbook_location_specs).to eq("baz" => expected_cb_spec)
222
+ end
223
+ end
224
+
209
225
  end
210
226
 
211
227
  context "with the default source set to a chef server" do
@@ -145,8 +145,21 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
145
145
  end
146
146
  end
147
147
 
148
+ let(:expected_canonical_revision_string) do
149
+ <<-REVISION_STRING
150
+ name:minimal_policyfile
151
+ run-list-item:recipe[foo]
152
+ cookbook:foo;id:467dc855408ce8b74f991c5dc2fd72a6aa369b60
153
+ REVISION_STRING
154
+ end
155
+
156
+ let(:expected_revision_id) do
157
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
158
+ end
159
+
148
160
  let(:compiled_policyfile) do
149
161
  {
162
+ "revision_id" => expected_revision_id,
150
163
 
151
164
  "name" => "minimal_policyfile",
152
165
 
@@ -175,6 +188,14 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
175
188
  expect(policyfile_lock.to_lock).to eq(compiled_policyfile)
176
189
  end
177
190
 
191
+ it "generates a canonical revision string" do
192
+ expect(policyfile_lock.canonical_revision_string).to eq(expected_canonical_revision_string)
193
+ end
194
+
195
+ it "generates a revision id" do
196
+ expect(policyfile_lock.revision_id).to eq(expected_revision_id)
197
+ end
198
+
178
199
  end
179
200
 
180
201
  context "with a policyfile containing a local cookbook" do
@@ -199,9 +220,23 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
199
220
  end
200
221
  end
201
222
 
223
+ let(:expected_canonical_revision_string) do
224
+ <<-REVISION_STRING
225
+ name:dev_cookbook
226
+ run-list-item:recipe[bar]
227
+ cookbook:bar;id:#{cookbook_bar_cksum}
228
+ REVISION_STRING
229
+ end
230
+
231
+ let(:expected_revision_id) do
232
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
233
+ end
234
+
202
235
  let(:compiled_policyfile) do
203
236
  {
204
237
 
238
+ "revision_id" => expected_revision_id,
239
+
205
240
  "name" => "dev_cookbook",
206
241
 
207
242
  "run_list" => ["recipe[bar]"],
@@ -234,6 +269,15 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
234
269
  actual_lock = policyfile_lock.to_lock
235
270
  expect(actual_lock).to eq(compiled_policyfile)
236
271
  end
272
+
273
+ it "generates a canonical revision string" do
274
+ expect(policyfile_lock.canonical_revision_string).to eq(expected_canonical_revision_string)
275
+ end
276
+
277
+ it "generates a revision id" do
278
+ expect(policyfile_lock.revision_id).to eq(expected_revision_id)
279
+ end
280
+
237
281
  end
238
282
 
239
283
  context "with a policyfile using custom identifiers" do
@@ -269,9 +313,24 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
269
313
 
270
314
  end
271
315
 
316
+ let(:expected_canonical_revision_string) do
317
+ <<-REVISION_STRING
318
+ name:custom_identifier
319
+ run-list-item:recipe[foo]
320
+ cookbook:foo;id:1.0.0
321
+ cookbook:bar;id:0.1.0
322
+ REVISION_STRING
323
+ end
324
+
325
+ let(:expected_revision_id) do
326
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
327
+ end
328
+
272
329
  let(:compiled_policyfile) do
273
330
  {
274
331
 
332
+ "revision_id" => expected_revision_id,
333
+
275
334
  "name" => "custom_identifier",
276
335
 
277
336
  "run_list" => ["recipe[foo]"],
@@ -313,6 +372,14 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
313
372
  expect(policyfile_lock.to_lock).to eq(compiled_policyfile)
314
373
  end
315
374
 
375
+ it "generates a canonical revision string" do
376
+ expect(policyfile_lock.canonical_revision_string).to eq(expected_canonical_revision_string)
377
+ end
378
+
379
+ it "generates a revision id" do
380
+ expect(policyfile_lock.revision_id).to eq(expected_revision_id)
381
+ end
382
+
316
383
  end
317
384
 
318
385
  context "with a policyfile lock with a mix of cached and local cookbooks" do
@@ -361,10 +428,28 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
361
428
 
362
429
  end
363
430
 
431
+ let(:expected_canonical_revision_string) do
432
+ <<-REVISION_STRING
433
+ name:basic_example
434
+ run-list-item:recipe[foo]
435
+ run-list-item:recipe[bar]
436
+ run-list-item:recipe[baz::non_default]
437
+ cookbook:foo;id:#{cookbook_foo_cksum}
438
+ cookbook:bar;id:#{cookbook_bar_cksum}
439
+ cookbook:baz;id:#{cookbook_baz_cksum}
440
+ cookbook:dep_of_bar;id:#{cookbook_dep_of_bar_cksum}
441
+ REVISION_STRING
442
+ end
443
+
444
+ let(:expected_revision_id) do
445
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
446
+ end
364
447
 
365
448
  let(:compiled_policyfile) do
366
449
  {
367
450
 
451
+ "revision_id" => expected_revision_id,
452
+
368
453
  "name" => "basic_example",
369
454
 
370
455
  "run_list" => ["recipe[foo]", "recipe[bar]", "recipe[baz::non_default]"],
@@ -441,6 +526,14 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
441
526
  expect(policyfile_lock.to_lock).to eq(compiled_policyfile)
442
527
  end
443
528
 
529
+ it "generates a canonical revision string" do
530
+ expect(policyfile_lock.canonical_revision_string).to eq(expected_canonical_revision_string)
531
+ end
532
+
533
+ it "generates a revision id" do
534
+ expect(policyfile_lock.revision_id).to eq(expected_revision_id)
535
+ end
536
+
444
537
  end
445
538
 
446
539
  context "with solution dependencies specified" do
@@ -462,9 +555,23 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
462
555
  end
463
556
  end
464
557
 
558
+ let(:expected_canonical_revision_string) do
559
+ <<-REVISION_STRING
560
+ name:minimal_policyfile
561
+ run-list-item:recipe[foo]
562
+ cookbook:foo;id:#{cookbook_foo_cksum}
563
+ REVISION_STRING
564
+ end
565
+
566
+ let(:expected_revision_id) do
567
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
568
+ end
569
+
465
570
  let(:compiled_policyfile) do
466
571
  {
467
572
 
573
+ "revision_id" => expected_revision_id,
574
+
468
575
  "name" => "minimal_policyfile",
469
576
 
470
577
  "run_list" => ["recipe[foo]"],
@@ -511,9 +618,24 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
511
618
  end
512
619
  end
513
620
 
621
+ let(:expected_canonical_revision_string) do
622
+ <<-REVISION_STRING
623
+ name:minimal_policyfile
624
+ run-list-item:recipe[foo]
625
+ named-run-list:rl2;run-list-item:recipe[foo::bar]
626
+ cookbook:foo;id:#{cookbook_foo_cksum}
627
+ REVISION_STRING
628
+ end
629
+
630
+ let(:expected_revision_id) do
631
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
632
+ end
633
+
514
634
  let(:compiled_policyfile) do
515
635
  {
516
636
 
637
+ "revision_id" => expected_revision_id,
638
+
517
639
  "name" => "minimal_policyfile",
518
640
 
519
641
  "run_list" => ["recipe[foo]"],
@@ -540,6 +662,14 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
540
662
  expect(policyfile_lock.to_lock).to eq(compiled_policyfile)
541
663
  end
542
664
 
665
+ it "generates a canonical revision string" do
666
+ expect(policyfile_lock.canonical_revision_string).to eq(expected_canonical_revision_string)
667
+ end
668
+
669
+ it "generates a revision id" do
670
+ expect(policyfile_lock.revision_id).to eq(expected_revision_id)
671
+ end
672
+
543
673
  end
544
674
 
545
675
  describe "building a policyfile lock from a policyfile compiler" do
@@ -589,9 +719,27 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
589
719
  ChefDK::PolicyfileLock.build_from_compiler(policyfile_compiler, storage_config)
590
720
  end
591
721
 
722
+
723
+ let(:expected_canonical_revision_string) do
724
+ <<-REVISION_STRING
725
+ name:my-policyfile
726
+ run-list-item:recipe[foo::default]
727
+ run-list-item:recipe[bar::default]
728
+ named-run-list:rl2;run-list-item:recipe[bar::default]
729
+ cookbook:foo;id:#{cookbook_foo_cksum}
730
+ cookbook:bar;id:#{cookbook_bar_cksum}
731
+ REVISION_STRING
732
+ end
733
+
734
+ let(:expected_revision_id) do
735
+ Digest::SHA1.new.hexdigest(expected_canonical_revision_string)
736
+ end
737
+
592
738
  let(:compiled_policyfile) do
593
739
  {
594
740
 
741
+ "revision_id" => expected_revision_id,
742
+
595
743
  "name" => "my-policyfile",
596
744
 
597
745
  "run_list" => ["recipe[foo::default]", "recipe[bar::default]"],
@@ -656,6 +804,14 @@ describe ChefDK::PolicyfileLock, "building a lockfile" do
656
804
  expect(policyfile_lock.to_lock).to eq(compiled_policyfile)
657
805
  end
658
806
 
807
+ it "generates a canonical revision string" do
808
+ expect(policyfile_lock.canonical_revision_string).to eq(expected_canonical_revision_string)
809
+ end
810
+
811
+ it "generates a revision id" do
812
+ expect(policyfile_lock.revision_id).to eq(expected_revision_id)
813
+ end
814
+
659
815
  end
660
816
 
661
817
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-dk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel DeLeo
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-02-03 00:00:00.000000000 Z
13
+ date: 2015-03-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mixlib-cli
@@ -67,6 +67,9 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '12.0'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 12.2.0.rc.2
70
73
  type: :runtime
71
74
  prerelease: false
72
75
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,6 +77,9 @@ dependencies:
74
77
  - - "~>"
75
78
  - !ruby/object:Gem::Version
76
79
  version: '12.0'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 12.2.0.rc.2
77
83
  - !ruby/object:Gem::Dependency
78
84
  name: solve
79
85
  requirement: !ruby/object:Gem::Requirement
@@ -223,15 +229,19 @@ files:
223
229
  - lib/chef-dk/shell_out.rb
224
230
  - lib/chef-dk/skeletons/code_generator/files/default/Berksfile
225
231
  - lib/chef-dk/skeletons/code_generator/files/default/chefignore
232
+ - lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md
233
+ - lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md
226
234
  - lib/chef-dk/skeletons/code_generator/files/default/gitignore
227
235
  - lib/chef-dk/skeletons/code_generator/files/default/repo/README.md
228
- - lib/chef-dk/skeletons/code_generator/files/default/repo/Rakefile
229
- - lib/chef-dk/skeletons/code_generator/files/default/repo/certificates/README.md
230
- - lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/README-policy.md
231
- - lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/README.md
236
+ - lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb
237
+ - lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb
238
+ - lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb
232
239
  - lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md
240
+ - lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json
233
241
  - lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md
242
+ - lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json
234
243
  - lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md
244
+ - lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json
235
245
  - lib/chef-dk/skeletons/code_generator/files/default/serverspec_spec_helper.rb
236
246
  - lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb
237
247
  - lib/chef-dk/skeletons/code_generator/metadata.rb
@@ -258,7 +268,6 @@ files:
258
268
  - lib/chef-dk/skeletons/code_generator/templates/default/provider.rb.erb
259
269
  - lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb
260
270
  - lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb
261
- - lib/chef-dk/skeletons/code_generator/templates/default/repo/config/rake.rb.erb
262
271
  - lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb
263
272
  - lib/chef-dk/skeletons/code_generator/templates/default/resource.rb.erb
264
273
  - lib/chef-dk/skeletons/code_generator/templates/default/serverspec_default_spec.rb.erb
@@ -415,9 +424,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
415
424
  version: '2.0'
416
425
  required_rubygems_version: !ruby/object:Gem::Requirement
417
426
  requirements:
418
- - - ">="
427
+ - - ">"
419
428
  - !ruby/object:Gem::Version
420
- version: '0'
429
+ version: 1.3.1
421
430
  requirements: []
422
431
  rubyforge_project:
423
432
  rubygems_version: 2.4.2
@@ -1,65 +0,0 @@
1
- #
2
- # Rakefile for Chef Server Repository
3
- #
4
- # Author:: Adam Jacob (<adam@opscode.com>)
5
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
20
-
21
- require 'rubygems'
22
- require 'chef'
23
- require 'json'
24
-
25
- # Load constants from rake config file.
26
- require File.join(File.dirname(__FILE__), 'config', 'rake')
27
-
28
- # Detect the version control system and assign to $vcs. Used by the update
29
- # task in chef_repo.rake (below). The install task calls update, so this
30
- # is run whenever the repo is installed.
31
- #
32
- # Comment out these lines to skip the update.
33
-
34
- if File.directory?(File.join(TOPDIR, ".svn"))
35
- $vcs = :svn
36
- elsif File.directory?(File.join(TOPDIR, ".git"))
37
- $vcs = :git
38
- end
39
-
40
- # Load common, useful tasks from Chef.
41
- # rake -T to see the tasks this loads.
42
-
43
- load 'chef/tasks/chef_repo.rake'
44
-
45
- desc "Bundle a single cookbook for distribution"
46
- task :bundle_cookbook => [ :metadata ]
47
- task :bundle_cookbook, :cookbook do |t, args|
48
- tarball_name = "#{args.cookbook}.tar.gz"
49
- temp_dir = File.join(Dir.tmpdir, "chef-upload-cookbooks")
50
- temp_cookbook_dir = File.join(temp_dir, args.cookbook)
51
- tarball_dir = File.join(TOPDIR, "pkgs")
52
- FileUtils.mkdir_p(tarball_dir)
53
- FileUtils.mkdir(temp_dir)
54
- FileUtils.mkdir(temp_cookbook_dir)
55
-
56
- child_folders = [ "cookbooks/#{args.cookbook}", "site-cookbooks/#{args.cookbook}" ]
57
- child_folders.each do |folder|
58
- file_path = File.join(TOPDIR, folder, ".")
59
- FileUtils.cp_r(file_path, temp_cookbook_dir) if File.directory?(file_path)
60
- end
61
-
62
- system("tar", "-C", temp_dir, "-cvzf", File.join(tarball_dir, tarball_name), "#{args.cookbook}")
63
-
64
- FileUtils.rm_rf temp_dir
65
- end
@@ -1,19 +0,0 @@
1
- Creating SSL certificates is a common task done in web application infrastructures, so a rake task is provided to generate certificates. These certificates are stored here by the ssl_cert task.
2
-
3
- Configure the values used in the SSL certificate by modifying `config/rake.rb`.
4
-
5
- To generate a certificate set for a new monitoring server, for example:
6
-
7
- rake ssl_cert FQDN=monitoring.example.com
8
-
9
- Once the certificates are generated, copy them into the cookbook(s) where you want to use them.
10
-
11
- cp certificates/monitoring.example.com.* cookbooks/COOKBOOK/files/default
12
-
13
- In the recipe for that cookbook, create a `cookbook_file` resource to configure a resource that puts them in place on the destination server.
14
-
15
- cookbook_file '/etc/apache2/ssl/monitoring.example.com.pem'
16
- owner 'root'
17
- group 'root'
18
- mode 0600
19
- end