chef-dk 0.4.0 → 0.5.0.rc.1

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.
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