chef-dk 0.14.25 → 0.15.9

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 (328) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -12
  3. data/Gemfile.lock +56 -82
  4. data/LICENSE +201 -201
  5. data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +27 -27
  6. data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +288 -288
  7. data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +52 -52
  8. data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +51 -51
  9. data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
  10. data/acceptance/Gemfile.lock +18 -21
  11. data/acceptance/README.md +132 -132
  12. data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
  13. data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
  14. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
  15. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
  16. data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
  17. data/acceptance/trivial/.kitchen.yml +7 -7
  18. data/acceptance/trivial/test/integration/chefdk-current-install/inspec/chef_client_spec.rb +5 -5
  19. data/bin/chef +25 -25
  20. data/chef-dk.gemspec +1 -0
  21. data/lib/chef-dk.rb +19 -19
  22. data/lib/chef-dk/authenticated_http.rb +40 -40
  23. data/lib/chef-dk/chef_runner.rb +1 -1
  24. data/lib/chef-dk/cli.rb +2 -2
  25. data/lib/chef-dk/command/base.rb +79 -79
  26. data/lib/chef-dk/command/clean_policy_cookbooks.rb +116 -116
  27. data/lib/chef-dk/command/clean_policy_revisions.rb +113 -113
  28. data/lib/chef-dk/command/delete_policy.rb +122 -122
  29. data/lib/chef-dk/command/delete_policy_group.rb +122 -122
  30. data/lib/chef-dk/command/diff.rb +316 -316
  31. data/lib/chef-dk/command/env.rb +90 -90
  32. data/lib/chef-dk/command/exec.rb +45 -45
  33. data/lib/chef-dk/command/export.rb +2 -2
  34. data/lib/chef-dk/command/gem.rb +47 -47
  35. data/lib/chef-dk/command/generate.rb +2 -0
  36. data/lib/chef-dk/command/generator_commands/app.rb +107 -107
  37. data/lib/chef-dk/command/generator_commands/attribute.rb +37 -37
  38. data/lib/chef-dk/command/generator_commands/base.rb +148 -148
  39. data/lib/chef-dk/command/generator_commands/build_cookbook.rb +110 -0
  40. data/lib/chef-dk/command/generator_commands/cookbook.rb +21 -0
  41. data/lib/chef-dk/command/generator_commands/cookbook_code_file.rb +100 -100
  42. data/lib/chef-dk/command/generator_commands/cookbook_file.rb +45 -45
  43. data/lib/chef-dk/command/generator_commands/generator_generator.rb +177 -177
  44. data/lib/chef-dk/command/generator_commands/lwrp.rb +36 -36
  45. data/lib/chef-dk/command/generator_commands/policyfile.rb +127 -127
  46. data/lib/chef-dk/command/generator_commands/recipe.rb +36 -36
  47. data/lib/chef-dk/command/generator_commands/repo.rb +125 -125
  48. data/lib/chef-dk/command/generator_commands/template.rb +46 -46
  49. data/lib/chef-dk/command/install.rb +121 -121
  50. data/lib/chef-dk/command/provision.rb +438 -438
  51. data/lib/chef-dk/command/push.rb +118 -118
  52. data/lib/chef-dk/command/push_archive.rb +126 -126
  53. data/lib/chef-dk/command/shell_init.rb +180 -180
  54. data/lib/chef-dk/command/show_policy.rb +165 -165
  55. data/lib/chef-dk/command/undelete.rb +155 -155
  56. data/lib/chef-dk/command/update.rb +148 -148
  57. data/lib/chef-dk/command/verify.rb +9 -11
  58. data/lib/chef-dk/completions/bash.sh.erb +5 -5
  59. data/lib/chef-dk/completions/chef.fish.erb +10 -10
  60. data/lib/chef-dk/completions/zsh.zsh.erb +21 -21
  61. data/lib/chef-dk/configurable.rb +69 -69
  62. data/lib/chef-dk/cookbook_metadata.rb +45 -45
  63. data/lib/chef-dk/cookbook_omnifetch.rb +32 -32
  64. data/lib/chef-dk/cookbook_profiler/git.rb +151 -151
  65. data/lib/chef-dk/cookbook_profiler/identifiers.rb +72 -72
  66. data/lib/chef-dk/cookbook_profiler/null_scm.rb +32 -32
  67. data/lib/chef-dk/exceptions.rb +129 -129
  68. data/lib/chef-dk/helpers.rb +24 -17
  69. data/lib/chef-dk/pager.rb +106 -106
  70. data/lib/chef-dk/policyfile/chef_repo_cookbook_source.rb +138 -138
  71. data/lib/chef-dk/policyfile/chef_server_cookbook_source.rb +54 -54
  72. data/lib/chef-dk/policyfile/community_cookbook_source.rb +97 -97
  73. data/lib/chef-dk/policyfile/comparison_base.rb +124 -124
  74. data/lib/chef-dk/policyfile/cookbook_location_specification.rb +154 -154
  75. data/lib/chef-dk/policyfile/cookbook_locks.rb +466 -466
  76. data/lib/chef-dk/policyfile/cookbook_sources.rb +22 -22
  77. data/lib/chef-dk/policyfile/delivery_supermarket_source.rb +90 -90
  78. data/lib/chef-dk/policyfile/differ.rb +266 -266
  79. data/lib/chef-dk/policyfile/dsl.rb +261 -261
  80. data/lib/chef-dk/policyfile/lister.rb +232 -232
  81. data/lib/chef-dk/policyfile/null_cookbook_source.rb +45 -45
  82. data/lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -124
  83. data/lib/chef-dk/policyfile/reports/install.rb +70 -70
  84. data/lib/chef-dk/policyfile/reports/table_printer.rb +58 -58
  85. data/lib/chef-dk/policyfile/reports/upload.rb +70 -70
  86. data/lib/chef-dk/policyfile/solution_dependencies.rb +298 -298
  87. data/lib/chef-dk/policyfile/storage_config.rb +100 -100
  88. data/lib/chef-dk/policyfile/undo_record.rb +142 -142
  89. data/lib/chef-dk/policyfile/undo_stack.rb +130 -130
  90. data/lib/chef-dk/policyfile/uploader.rb +213 -213
  91. data/lib/chef-dk/policyfile_compiler.rb +419 -419
  92. data/lib/chef-dk/policyfile_lock.rb +552 -552
  93. data/lib/chef-dk/policyfile_services/clean_policies.rb +95 -95
  94. data/lib/chef-dk/policyfile_services/clean_policy_cookbooks.rb +125 -125
  95. data/lib/chef-dk/policyfile_services/export_repo.rb +421 -421
  96. data/lib/chef-dk/policyfile_services/install.rb +126 -126
  97. data/lib/chef-dk/policyfile_services/push_archive.rb +204 -204
  98. data/lib/chef-dk/policyfile_services/rm_policy.rb +142 -142
  99. data/lib/chef-dk/policyfile_services/rm_policy_group.rb +86 -86
  100. data/lib/chef-dk/policyfile_services/show_policy.rb +237 -237
  101. data/lib/chef-dk/policyfile_services/undelete.rb +108 -108
  102. data/lib/chef-dk/policyfile_services/update_attributes.rb +104 -104
  103. data/lib/chef-dk/service_exception_inspectors.rb +25 -25
  104. data/lib/chef-dk/service_exception_inspectors/base.rb +40 -40
  105. data/lib/chef-dk/service_exception_inspectors/http.rb +121 -121
  106. data/lib/chef-dk/service_exceptions.rb +143 -143
  107. data/lib/chef-dk/shell_out.rb +36 -36
  108. data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +3 -3
  109. data/lib/chef-dk/skeletons/code_generator/files/default/build-cookbook/.kitchen.yml +21 -0
  110. data/lib/chef-dk/skeletons/code_generator/files/default/build-cookbook/README.md +146 -0
  111. data/lib/chef-dk/skeletons/code_generator/files/default/build-cookbook/test-fixture-recipe.rb +7 -0
  112. data/lib/chef-dk/skeletons/code_generator/files/default/chefignore +102 -102
  113. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -9
  114. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -54
  115. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +10 -0
  116. data/lib/chef-dk/skeletons/code_generator/files/default/gitignore +16 -16
  117. data/lib/chef-dk/skeletons/code_generator/files/default/repo/README.md +28 -28
  118. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -27
  119. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -7
  120. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -3
  121. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -8
  122. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +58 -58
  123. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +3 -3
  124. data/lib/chef-dk/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -6
  125. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +9 -9
  126. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +12 -12
  127. data/lib/chef-dk/skeletons/code_generator/files/default/repo/policies/README.md +24 -24
  128. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +9 -9
  129. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +12 -12
  130. data/lib/chef-dk/skeletons/code_generator/files/default/serverspec_spec_helper.rb +8 -8
  131. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +2 -2
  132. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -2
  133. data/lib/chef-dk/skeletons/code_generator/metadata.rb +8 -8
  134. data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +97 -97
  135. data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +12 -12
  136. data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +88 -0
  137. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +6 -0
  138. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +24 -24
  139. data/lib/chef-dk/skeletons/code_generator/recipes/lwrp.rb +23 -23
  140. data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +8 -8
  141. data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +27 -27
  142. data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +67 -67
  143. data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +32 -32
  144. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -3
  145. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -339
  146. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -674
  147. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -21
  148. data/lib/chef-dk/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -25
  149. data/lib/chef-dk/skeletons/code_generator/templates/default/README.md.erb +4 -4
  150. data/lib/chef-dk/skeletons/code_generator/templates/default/build-cookbook/Berksfile.erb +20 -0
  151. data/lib/chef-dk/skeletons/code_generator/templates/default/build-cookbook/metadata.rb.erb +9 -0
  152. data/lib/chef-dk/skeletons/code_generator/templates/default/build-cookbook/recipe.rb.erb +8 -0
  153. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen.yml.erb +3 -2
  154. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +3 -2
  155. data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +7 -7
  156. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb +5 -5
  157. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +20 -20
  158. data/lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb +11 -11
  159. data/lib/chef-dk/skeletons/code_generator/templates/default/serverspec_default_spec.rb.erb +9 -9
  160. data/lib/chef-dk/ui.rb +58 -58
  161. data/lib/chef-dk/version.rb +1 -1
  162. data/lib/kitchen/provisioner/policyfile_zero.rb +195 -195
  163. data/omnibus_overrides.rb +2 -1
  164. data/spec/shared/a_file_generator.rb +125 -125
  165. data/spec/shared/a_generated_file.rb +12 -12
  166. data/spec/shared/command_with_ui_object.rb +11 -11
  167. data/spec/shared/fixture_cookbook_checksums.rb +47 -47
  168. data/spec/shared/setup_git_cookbooks.rb +53 -53
  169. data/spec/spec_helper.rb +51 -51
  170. data/spec/test_helpers.rb +84 -84
  171. data/spec/unit/chef_runner_spec.rb +1 -1
  172. data/spec/unit/cli_spec.rb +23 -6
  173. data/spec/unit/command/clean_policy_cookbooks_spec.rb +181 -181
  174. data/spec/unit/command/clean_policy_revisions_spec.rb +181 -181
  175. data/spec/unit/command/delete_policy_group_spec.rb +207 -207
  176. data/spec/unit/command/delete_policy_spec.rb +207 -207
  177. data/spec/unit/command/diff_spec.rb +312 -312
  178. data/spec/unit/command/env_spec.rb +52 -52
  179. data/spec/unit/command/exec_spec.rb +179 -179
  180. data/spec/unit/command/export_spec.rb +200 -200
  181. data/spec/unit/command/generate_spec.rb +142 -142
  182. data/spec/unit/command/generator_commands/app_spec.rb +169 -169
  183. data/spec/unit/command/generator_commands/attribute_spec.rb +32 -32
  184. data/spec/unit/command/generator_commands/base_spec.rb +136 -136
  185. data/spec/unit/command/generator_commands/build_cookbook_spec.rb +309 -0
  186. data/spec/unit/command/generator_commands/cookbook_file_spec.rb +32 -32
  187. data/spec/unit/command/generator_commands/cookbook_spec.rb +98 -4
  188. data/spec/unit/command/generator_commands/generator_generator_spec.rb +229 -229
  189. data/spec/unit/command/generator_commands/lwrp_spec.rb +32 -32
  190. data/spec/unit/command/generator_commands/policyfile_spec.rb +225 -225
  191. data/spec/unit/command/generator_commands/recipe_spec.rb +34 -34
  192. data/spec/unit/command/generator_commands/template_spec.rb +32 -32
  193. data/spec/unit/command/install_spec.rb +179 -179
  194. data/spec/unit/command/provision_spec.rb +592 -592
  195. data/spec/unit/command/push_archive_spec.rb +153 -153
  196. data/spec/unit/command/push_spec.rb +199 -199
  197. data/spec/unit/command/shell_init_spec.rb +329 -329
  198. data/spec/unit/command/show_policy_spec.rb +235 -235
  199. data/spec/unit/command/undelete_spec.rb +246 -246
  200. data/spec/unit/command/update_spec.rb +275 -275
  201. data/spec/unit/command/verify_spec.rb +1 -3
  202. data/spec/unit/commands_map_spec.rb +57 -57
  203. data/spec/unit/configurable_spec.rb +41 -41
  204. data/spec/unit/cookbook_metadata_spec.rb +98 -98
  205. data/spec/unit/cookbook_profiler/git_spec.rb +176 -176
  206. data/spec/unit/cookbook_profiler/identifiers_spec.rb +83 -83
  207. data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -9
  208. data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -9
  209. data/spec/unit/fixtures/command/cli_test_command.rb +26 -26
  210. data/spec/unit/fixtures/command/explicit_path_example.rb +7 -7
  211. data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -5
  212. data/spec/unit/fixtures/configurable/test_configurable.rb +10 -10
  213. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
  214. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -3
  215. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
  216. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -96
  217. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
  218. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
  219. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -16
  220. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -3
  221. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -4
  222. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -96
  223. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -8
  224. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -8
  225. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/.kitchen.yml +16 -16
  226. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -3
  227. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -4
  228. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -96
  229. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -8
  230. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -8
  231. data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1321 -1321
  232. data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -2987
  233. data/spec/unit/fixtures/cookbooks_api/universe.json +1 -1
  234. data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +36 -36
  235. data/spec/unit/fixtures/dev_cookbooks/README.md +16 -16
  236. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -2
  237. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -5
  238. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -3
  239. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -2
  240. data/spec/unit/fixtures/example_cookbook/.gitignore +17 -17
  241. data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -16
  242. data/spec/unit/fixtures/example_cookbook/Berksfile +3 -3
  243. data/spec/unit/fixtures/example_cookbook/README.md +4 -4
  244. data/spec/unit/fixtures/example_cookbook/chefignore +96 -96
  245. data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -8
  246. data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -8
  247. data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -17
  248. data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -16
  249. data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -3
  250. data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -4
  251. data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -96
  252. data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -5
  253. data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -8
  254. data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -17
  255. data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -16
  256. data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -3
  257. data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -4
  258. data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -96
  259. data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -8
  260. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -4
  261. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -96
  262. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -8
  263. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -8
  264. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -3
  265. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -4
  266. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -96
  267. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -9
  268. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -8
  269. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -16
  270. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -3
  271. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -4
  272. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -96
  273. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -8
  274. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -8
  275. data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -2
  276. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
  277. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
  278. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
  279. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
  280. data/spec/unit/gemfile_util_spec.rb +41 -0
  281. data/spec/unit/helpers_spec.rb +19 -0
  282. data/spec/unit/pager_spec.rb +119 -119
  283. data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -93
  284. data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +34 -34
  285. data/spec/unit/policyfile/community_cookbook_source_spec.rb +84 -84
  286. data/spec/unit/policyfile/comparison_base_spec.rb +343 -343
  287. data/spec/unit/policyfile/cookbook_location_specification_spec.rb +277 -277
  288. data/spec/unit/policyfile/cookbook_locks_spec.rb +529 -529
  289. data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +130 -130
  290. data/spec/unit/policyfile/differ_spec.rb +687 -687
  291. data/spec/unit/policyfile/lister_spec.rb +272 -272
  292. data/spec/unit/policyfile/null_cookbook_source_spec.rb +35 -35
  293. data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -92
  294. data/spec/unit/policyfile/reports/install_spec.rb +115 -115
  295. data/spec/unit/policyfile/reports/upload_spec.rb +96 -96
  296. data/spec/unit/policyfile/solution_dependencies_spec.rb +145 -145
  297. data/spec/unit/policyfile/storage_config_spec.rb +172 -172
  298. data/spec/unit/policyfile/undo_record_spec.rb +260 -260
  299. data/spec/unit/policyfile/undo_stack_spec.rb +266 -266
  300. data/spec/unit/policyfile/uploader_spec.rb +410 -410
  301. data/spec/unit/policyfile_demands_spec.rb +1203 -1203
  302. data/spec/unit/policyfile_evaluation_spec.rb +642 -642
  303. data/spec/unit/policyfile_lock_build_spec.rb +1056 -1056
  304. data/spec/unit/policyfile_lock_install_spec.rb +138 -138
  305. data/spec/unit/policyfile_lock_serialization_spec.rb +425 -425
  306. data/spec/unit/policyfile_lock_validation_spec.rb +611 -611
  307. data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -236
  308. data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +275 -275
  309. data/spec/unit/policyfile_services/export_repo_spec.rb +481 -481
  310. data/spec/unit/policyfile_services/install_spec.rb +211 -211
  311. data/spec/unit/policyfile_services/push_archive_spec.rb +378 -378
  312. data/spec/unit/policyfile_services/push_spec.rb +233 -233
  313. data/spec/unit/policyfile_services/rm_policy_group_spec.rb +241 -241
  314. data/spec/unit/policyfile_services/rm_policy_spec.rb +266 -266
  315. data/spec/unit/policyfile_services/show_policy_spec.rb +889 -889
  316. data/spec/unit/policyfile_services/undelete_spec.rb +304 -304
  317. data/spec/unit/policyfile_services/update_attributes_spec.rb +217 -217
  318. data/spec/unit/service_exception_inspectors/base_spec.rb +43 -43
  319. data/spec/unit/service_exception_inspectors/http_spec.rb +140 -140
  320. data/spec/unit/shell_out_spec.rb +34 -34
  321. data/tasks/bin/bundle-platform +6 -2
  322. data/tasks/bin/bundle-platform.bat +0 -0
  323. data/tasks/bin/create-override-gemfile +0 -0
  324. data/tasks/bundle_util.rb +18 -2
  325. data/tasks/gemfile_util.rb +53 -8
  326. data/version_policy.rb +9 -1
  327. data/warning.txt +9 -9
  328. metadata +30 -3
@@ -1,21 +1,21 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) <%= year %> <%= copyright_holder %>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) <%= year %> <%= copyright_holder %>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -1,25 +1,25 @@
1
- # Policyfile.rb - Describe how you want Chef to build your system.
2
- #
3
- # For more information on the Policyfile feature, visit
4
- # https://github.com/chef/chef-dk/blob/master/POLICYFILE_README.md
5
-
6
- # A name that describes what the system you're building with Chef does.
7
- name "<%= policy_name %>"
8
-
9
- <% if include_chef_repo_source %>
10
- # This lets you source cookbooks from your chef-repo.
11
- default_source :chef_repo, "../"
12
-
13
- <% end -%>
14
- # Where to find external cookbooks:
15
- default_source :supermarket
16
-
17
- # run_list: chef-client will run these recipes in the order specified.
18
- run_list "<%= policy_run_list %>"
19
-
20
- # Specify a custom source for a single cookbook:
21
- <% if policy_local_cookbook.nil? %>
22
- # cookbook "example_cookbook", path: "../cookbooks/example_cookbook"
23
- <% else %>
24
- cookbook "<%= cookbook_name %>", path: "."
25
- <% end %>
1
+ # Policyfile.rb - Describe how you want Chef to build your system.
2
+ #
3
+ # For more information on the Policyfile feature, visit
4
+ # https://github.com/chef/chef-dk/blob/master/POLICYFILE_README.md
5
+
6
+ # A name that describes what the system you're building with Chef does.
7
+ name "<%= policy_name %>"
8
+
9
+ <% if include_chef_repo_source %>
10
+ # This lets you source cookbooks from your chef-repo.
11
+ default_source :chef_repo, "../"
12
+
13
+ <% end -%>
14
+ # Where to find external cookbooks:
15
+ default_source :supermarket
16
+
17
+ # run_list: chef-client will run these recipes in the order specified.
18
+ run_list "<%= policy_run_list %>"
19
+
20
+ # Specify a custom source for a single cookbook:
21
+ <% if policy_local_cookbook.nil? %>
22
+ # cookbook "example_cookbook", path: "../cookbooks/example_cookbook"
23
+ <% else %>
24
+ cookbook "<%= cookbook_name %>", path: "."
25
+ <% end %>
@@ -1,4 +1,4 @@
1
- # <%= cookbook_name %>
2
-
3
- TODO: Enter the cookbook description here.
4
-
1
+ # <%= cookbook_name %>
2
+
3
+ TODO: Enter the cookbook description here.
4
+
@@ -0,0 +1,20 @@
1
+ source 'https://supermarket.chef.io'
2
+
3
+ metadata
4
+ <% if build_cookbook_parent_is_cookbook -%>
5
+
6
+ cookbook 'delivery-truck',
7
+ git: 'https://github.com/chef-cookbooks/delivery-truck.git',
8
+ branch: 'master'
9
+
10
+ # This is so we know where to get delivery-truck's dependency
11
+ cookbook 'delivery-sugar',
12
+ git: 'https://github.com/chef-cookbooks/delivery-sugar.git',
13
+ branch: 'master'
14
+ <% end -%>
15
+
16
+ group :delivery do
17
+ cookbook 'delivery_build', git: 'https://github.com/chef-cookbooks/delivery_build'
18
+ cookbook 'delivery-base', git: 'https://github.com/chef-cookbooks/delivery-base'
19
+ cookbook 'test', path: './test/fixtures/cookbooks/test'
20
+ end
@@ -0,0 +1,9 @@
1
+ name 'build-cookbook'
2
+ maintainer '<%= copyright_holder %>'
3
+ maintainer_email '<%= email %>'
4
+ license '<%= license %>'
5
+ version '0.1.0'
6
+ <% if build_cookbook_parent_is_cookbook -%>
7
+
8
+ depends 'delivery-truck'
9
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ #
2
+ # Cookbook Name:: build-cookbook
3
+ # Recipe:: <%= @phase %>
4
+ #
5
+ <%= license_description('#') %>
6
+ <% if build_cookbook_parent_is_cookbook -%>
7
+ include_recipe 'delivery-truck::<%= @phase %>'
8
+ <% end -%>
@@ -9,10 +9,11 @@ provisioner:
9
9
  # default verifier)
10
10
  # verifier:
11
11
  # name: inspec
12
+ # format: doc
12
13
 
13
14
  platforms:
14
- - name: ubuntu-14.04
15
- - name: centos-7.1
15
+ - name: ubuntu-16.04
16
+ - name: centos-7.2
16
17
 
17
18
  suites:
18
19
  - name: default
@@ -22,10 +22,11 @@ provisioner:
22
22
  # default verifier)
23
23
  # verifier:
24
24
  # name: inspec
25
+ # format: doc
25
26
 
26
27
  platforms:
27
- - name: ubuntu-14.04
28
- - name: centos-7.1
28
+ - name: ubuntu-16.04
29
+ - name: centos-7.2
29
30
 
30
31
  suites:
31
32
  - name: default
@@ -1,7 +1,7 @@
1
- name '<%= cookbook_name %>'
2
- maintainer '<%= copyright_holder %>'
3
- maintainer_email '<%= email %>'
4
- license '<%= license %>'
5
- description 'Installs/Configures <%= cookbook_name %>'
6
- long_description 'Installs/Configures <%= cookbook_name %>'
7
- version '0.1.0'
1
+ name '<%= cookbook_name %>'
2
+ maintainer '<%= copyright_holder %>'
3
+ maintainer_email '<%= email %>'
4
+ license '<%= license %>'
5
+ description 'Installs/Configures <%= cookbook_name %>'
6
+ long_description 'Installs/Configures <%= cookbook_name %>'
7
+ version '0.1.0'
@@ -1,5 +1,5 @@
1
- #
2
- # Cookbook Name:: <%= cookbook_name %>
3
- # Recipe:: <%= recipe_name %>
4
- #
5
- <%= license_description('#') %>
1
+ #
2
+ # Cookbook Name:: <%= cookbook_name %>
3
+ # Recipe:: <%= recipe_name %>
4
+ #
5
+ <%= license_description('#') %>
@@ -1,20 +1,20 @@
1
- #
2
- # Cookbook Name:: <%= cookbook_name %>
3
- # Spec:: default
4
- #
5
- <%= license_description('#') %>
6
-
7
- require 'spec_helper'
8
-
9
- describe '<%= cookbook_name %>::<%= recipe_name %>' do
10
- context 'When all attributes are default, on an unspecified platform' do
11
- let(:chef_run) do
12
- runner = ChefSpec::ServerRunner.new
13
- runner.converge(described_recipe)
14
- end
15
-
16
- it 'converges successfully' do
17
- expect { chef_run }.to_not raise_error
18
- end
19
- end
20
- end
1
+ #
2
+ # Cookbook Name:: <%= cookbook_name %>
3
+ # Spec:: default
4
+ #
5
+ <%= license_description('#') %>
6
+
7
+ require 'spec_helper'
8
+
9
+ describe '<%= cookbook_name %>::<%= recipe_name %>' do
10
+ context 'When all attributes are default, on an unspecified platform' do
11
+ let(:chef_run) do
12
+ runner = ChefSpec::ServerRunner.new
13
+ runner.converge(described_recipe)
14
+ end
15
+
16
+ it 'converges successfully' do
17
+ expect { chef_run }.to_not raise_error
18
+ end
19
+ end
20
+ end
@@ -1,11 +1,11 @@
1
- .rake_test_cache
2
-
3
- ###
4
- # Ignore Chef key files and secrets
5
- ###
6
- .chef/*.pem
7
- .chef/encrypted_data_bag_secret
8
- <%- if policy_only -%>
9
- cookbooks/**
10
- !cookbooks/README.md
11
- <%- end -%>
1
+ .rake_test_cache
2
+
3
+ ###
4
+ # Ignore Chef key files and secrets
5
+ ###
6
+ .chef/*.pem
7
+ .chef/encrypted_data_bag_secret
8
+ <%- if policy_only -%>
9
+ cookbooks/**
10
+ !cookbooks/README.md
11
+ <%- end -%>
@@ -1,9 +1,9 @@
1
- require 'spec_helper'
2
-
3
- describe '<%= cookbook_name %>::default' do
4
- # Serverspec examples can be found at
5
- # http://serverspec.org/resource_types.html
6
- it 'does something' do
7
- skip 'Replace this with meaningful tests'
8
- end
9
- end
1
+ require 'spec_helper'
2
+
3
+ describe '<%= cookbook_name %>::default' do
4
+ # Serverspec examples can be found at
5
+ # http://serverspec.org/resource_types.html
6
+ it 'does something' do
7
+ skip 'Replace this with meaningful tests'
8
+ end
9
+ end
@@ -1,58 +1,58 @@
1
- #
2
- # Copyright:: Copyright (c) 2014 Chef Software Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- module ChefDK
19
- class UI
20
-
21
- class NullStream
22
-
23
- def puts(*anything)
24
- nil
25
- end
26
-
27
- def print(*anything)
28
- nil
29
- end
30
-
31
- end
32
-
33
- def self.null
34
- new(out: NullStream.new, err: NullStream.new)
35
- end
36
-
37
- attr_reader :out_stream
38
- attr_reader :err_stream
39
-
40
- def initialize(out: nil, err: nil)
41
- @out_stream = out || $stdout
42
- @err_stream = err || $stderr
43
- end
44
-
45
- def err(message)
46
- @err_stream.puts(message)
47
- end
48
-
49
- def msg(message)
50
- @out_stream.puts(message)
51
- end
52
-
53
- def print(message)
54
- @out_stream.print(message)
55
- end
56
- end
57
- end
58
-
1
+ #
2
+ # Copyright:: Copyright (c) 2014 Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ module ChefDK
19
+ class UI
20
+
21
+ class NullStream
22
+
23
+ def puts(*anything)
24
+ nil
25
+ end
26
+
27
+ def print(*anything)
28
+ nil
29
+ end
30
+
31
+ end
32
+
33
+ def self.null
34
+ new(out: NullStream.new, err: NullStream.new)
35
+ end
36
+
37
+ attr_reader :out_stream
38
+ attr_reader :err_stream
39
+
40
+ def initialize(out: nil, err: nil)
41
+ @out_stream = out || $stdout
42
+ @err_stream = err || $stderr
43
+ end
44
+
45
+ def err(message)
46
+ @err_stream.puts(message)
47
+ end
48
+
49
+ def msg(message)
50
+ @out_stream.puts(message)
51
+ end
52
+
53
+ def print(message)
54
+ @out_stream.print(message)
55
+ end
56
+ end
57
+ end
58
+
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module ChefDK
19
- VERSION = "0.14.25"
19
+ VERSION = "0.15.9"
20
20
  end
@@ -1,195 +1,195 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
- #
5
- # Copyright (C) 2013, Fletcher Nichol
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
-
19
- require "kitchen/provisioner/chef_base"
20
-
21
- # TODO: chef-dk and kitchen can only co-exist if kitchen and chef-dk agree on
22
- # the version of mixlib-shellout to use. Kitchen currently locked at 1.4,
23
- # chef-dk is on 2.x
24
- require 'chef-dk/policyfile_services/export_repo'
25
-
26
- module Kitchen
27
-
28
- module Provisioner
29
-
30
- class Base
31
-
32
- # PolicyfileZero needs to access the base behavior of creating the
33
- # sandbox directory without invoking the behavior of
34
- # ChefBase#create_sandbox, because that will trigger the use of
35
- # Chef::CommonSandbox, which we need to override.
36
- alias_method :create_sandbox_directory, :create_sandbox
37
-
38
- end
39
-
40
- class PolicyfileSandbox < Chef::CommonSandbox
41
-
42
- # Stub #prepare_cookbooks because we have implemented this in the
43
- # provisioner, below. If a Berksfile is present, the default
44
- # implementation will try to run Berkshelf, which can lead to dependency
45
- # issues since berks is not yet using Solve 2.x. See also
46
- # PolicyfileZero#load_needed_dependencies! which is stubbed to prevent
47
- # berks from loading.
48
- def prepare_cookbooks
49
- end
50
-
51
- end
52
-
53
- # Policyfile + Chef Zero provisioner.
54
- #
55
- # @author Daniel DeLeo <dan@chef.io>
56
- class PolicyfileZero < ChefBase
57
-
58
- # This provsioner will forcibly set the following config options:
59
- # * `use_policyfile`: `true`
60
- # * `versioned_cookbooks`: `true`
61
- # * `deployment_group`: `POLICY_NAME-local`
62
- # Since it makes no sense to modify these, they are hardcoded elsewhere.
63
- default_config :client_rb, {}
64
- default_config :json_attributes, true
65
- default_config :named_run_list, nil
66
- default_config :chef_zero_host, nil
67
- default_config :chef_zero_port, 8889
68
- default_config :policyfile, "Policyfile.rb"
69
-
70
- default_config :chef_client_path do |provisioner|
71
- provisioner.
72
- remote_path_join(%W[#{provisioner[:chef_omnibus_root]} bin chef-client]).
73
- tap { |path| path.concat(".bat") if provisioner.windows_os? }
74
- end
75
-
76
- default_config :ruby_bindir do |provisioner|
77
- provisioner.
78
- remote_path_join(%W[#{provisioner[:chef_omnibus_root]} embedded bin])
79
- end
80
-
81
- # (see Base#finalize_config!)
82
- def finalize_config!(*args)
83
- super
84
- banner("Using policyfile mode for chef-client")
85
- end
86
-
87
- # (see Base#create_sandbox)
88
- def create_sandbox
89
- create_sandbox_directory
90
- PolicyfileSandbox.new(config, sandbox_path, instance).populate
91
- prepare_cookbooks
92
- prepare_validation_pem
93
- prepare_client_rb
94
- end
95
-
96
- # (see Base#run_command)
97
- def run_command
98
- level = config[:log_level] == :info ? :auto : config[:log_level]
99
-
100
- cmd = "#{sudo(config[:chef_client_path])} --local-mode".
101
- tap { |str| str.insert(0, "& ") if powershell_shell? }
102
-
103
- args = [
104
- "--config #{config[:root_path]}/client.rb",
105
- "--log_level #{level}",
106
- "--force-formatter",
107
- "--no-color"
108
- ]
109
- if config[:chef_zero_port]
110
- args << "--chef-zero-port #{config[:chef_zero_port]}"
111
- end
112
- if config[:log_file]
113
- args << "--logfile #{config[:log_file]}"
114
- end
115
-
116
- if config[:named_run_list]
117
- args << "--named-run-list #{config[:named_run_list]}"
118
- end
119
-
120
- wrap_shell_code(
121
- [cmd, *args].join(" ").
122
- tap { |str| str.insert(0, reload_ps1_path) if windows_os? }
123
- )
124
- end
125
-
126
- # We don't want to load Berkshelf or Librarian; Policyfile is managing
127
- # dependencies, so these can only cause trouble.
128
- def load_needed_dependencies!
129
- end
130
-
131
- private
132
-
133
- # Overrides behavior of parent class so that dna.json isn't created; we
134
- # don't need it.
135
- #
136
- # @api private
137
- def prepare_json
138
- end
139
-
140
- # Copies the policyfile's cookbooks to the sandbox.
141
- #
142
- # @api private
143
- def prepare_cookbooks
144
- Kitchen.mutex.synchronize do
145
- policy_exporter.run
146
- end
147
- end
148
-
149
- # An instance of ChefDK::PolicyfileServices::ExportRepo, configured with
150
- # the sandbox path. Calling `#run` on this copies the cookbooks to the
151
- # sandbox. Calling `#policy_name` returns the policy's name.
152
- #
153
- # @api private
154
- def policy_exporter
155
- # Must force this because TK by default copies the current cookbook to the sandbox
156
- # See ChefDK::PolicyfileServices::ExportRepo#assert_export_dir_clean!
157
- @policy_exporter ||= ChefDK::PolicyfileServices::ExportRepo.new(policyfile: config[:policyfile],
158
- export_dir: sandbox_path,
159
- force: true)
160
- end
161
-
162
- # Writes a fake (but valid) validation.pem into the sandbox directory.
163
- #
164
- # @api private
165
- def prepare_validation_pem
166
- info("Preparing validation.pem")
167
- debug("Using a dummy validation.pem")
168
-
169
- source = File.join(Kitchen.source_root, %w[support dummy-validation.pem])
170
- FileUtils.cp(source, File.join(sandbox_path, "validation.pem"))
171
- end
172
-
173
- # Writes a client.rb configuration file to the sandbox directory.
174
- #
175
- # @api private
176
- def prepare_client_rb
177
- data = default_config_rb.merge(config[:client_rb])
178
-
179
- data["use_policyfile"] = true
180
- data["versioned_cookbooks"] = true
181
- data["policy_name"] = policy_exporter.policy_name
182
- data["policy_group"] = "local"
183
- data["policy_document_native_api"] = true
184
-
185
- info("Preparing client.rb")
186
- debug("Creating client.rb from #{data.inspect}")
187
-
188
- File.open(File.join(sandbox_path, "client.rb"), "wb") do |file|
189
- file.write(format_config_file(data))
190
- end
191
- end
192
-
193
- end
194
- end
195
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
+ #
5
+ # Copyright (C) 2013, Fletcher Nichol
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require "kitchen/provisioner/chef_base"
20
+
21
+ # TODO: chef-dk and kitchen can only co-exist if kitchen and chef-dk agree on
22
+ # the version of mixlib-shellout to use. Kitchen currently locked at 1.4,
23
+ # chef-dk is on 2.x
24
+ require 'chef-dk/policyfile_services/export_repo'
25
+
26
+ module Kitchen
27
+
28
+ module Provisioner
29
+
30
+ class Base
31
+
32
+ # PolicyfileZero needs to access the base behavior of creating the
33
+ # sandbox directory without invoking the behavior of
34
+ # ChefBase#create_sandbox, because that will trigger the use of
35
+ # Chef::CommonSandbox, which we need to override.
36
+ alias_method :create_sandbox_directory, :create_sandbox
37
+
38
+ end
39
+
40
+ class PolicyfileSandbox < Chef::CommonSandbox
41
+
42
+ # Stub #prepare_cookbooks because we have implemented this in the
43
+ # provisioner, below. If a Berksfile is present, the default
44
+ # implementation will try to run Berkshelf, which can lead to dependency
45
+ # issues since berks is not yet using Solve 2.x. See also
46
+ # PolicyfileZero#load_needed_dependencies! which is stubbed to prevent
47
+ # berks from loading.
48
+ def prepare_cookbooks
49
+ end
50
+
51
+ end
52
+
53
+ # Policyfile + Chef Zero provisioner.
54
+ #
55
+ # @author Daniel DeLeo <dan@chef.io>
56
+ class PolicyfileZero < ChefBase
57
+
58
+ # This provsioner will forcibly set the following config options:
59
+ # * `use_policyfile`: `true`
60
+ # * `versioned_cookbooks`: `true`
61
+ # * `deployment_group`: `POLICY_NAME-local`
62
+ # Since it makes no sense to modify these, they are hardcoded elsewhere.
63
+ default_config :client_rb, {}
64
+ default_config :json_attributes, true
65
+ default_config :named_run_list, nil
66
+ default_config :chef_zero_host, nil
67
+ default_config :chef_zero_port, 8889
68
+ default_config :policyfile, "Policyfile.rb"
69
+
70
+ default_config :chef_client_path do |provisioner|
71
+ provisioner.
72
+ remote_path_join(%W[#{provisioner[:chef_omnibus_root]} bin chef-client]).
73
+ tap { |path| path.concat(".bat") if provisioner.windows_os? }
74
+ end
75
+
76
+ default_config :ruby_bindir do |provisioner|
77
+ provisioner.
78
+ remote_path_join(%W[#{provisioner[:chef_omnibus_root]} embedded bin])
79
+ end
80
+
81
+ # (see Base#finalize_config!)
82
+ def finalize_config!(*args)
83
+ super
84
+ banner("Using policyfile mode for chef-client")
85
+ end
86
+
87
+ # (see Base#create_sandbox)
88
+ def create_sandbox
89
+ create_sandbox_directory
90
+ PolicyfileSandbox.new(config, sandbox_path, instance).populate
91
+ prepare_cookbooks
92
+ prepare_validation_pem
93
+ prepare_client_rb
94
+ end
95
+
96
+ # (see Base#run_command)
97
+ def run_command
98
+ level = config[:log_level] == :info ? :auto : config[:log_level]
99
+
100
+ cmd = "#{sudo(config[:chef_client_path])} --local-mode".
101
+ tap { |str| str.insert(0, "& ") if powershell_shell? }
102
+
103
+ args = [
104
+ "--config #{config[:root_path]}/client.rb",
105
+ "--log_level #{level}",
106
+ "--force-formatter",
107
+ "--no-color"
108
+ ]
109
+ if config[:chef_zero_port]
110
+ args << "--chef-zero-port #{config[:chef_zero_port]}"
111
+ end
112
+ if config[:log_file]
113
+ args << "--logfile #{config[:log_file]}"
114
+ end
115
+
116
+ if config[:named_run_list]
117
+ args << "--named-run-list #{config[:named_run_list]}"
118
+ end
119
+
120
+ wrap_shell_code(
121
+ [cmd, *args].join(" ").
122
+ tap { |str| str.insert(0, reload_ps1_path) if windows_os? }
123
+ )
124
+ end
125
+
126
+ # We don't want to load Berkshelf or Librarian; Policyfile is managing
127
+ # dependencies, so these can only cause trouble.
128
+ def load_needed_dependencies!
129
+ end
130
+
131
+ private
132
+
133
+ # Overrides behavior of parent class so that dna.json isn't created; we
134
+ # don't need it.
135
+ #
136
+ # @api private
137
+ def prepare_json
138
+ end
139
+
140
+ # Copies the policyfile's cookbooks to the sandbox.
141
+ #
142
+ # @api private
143
+ def prepare_cookbooks
144
+ Kitchen.mutex.synchronize do
145
+ policy_exporter.run
146
+ end
147
+ end
148
+
149
+ # An instance of ChefDK::PolicyfileServices::ExportRepo, configured with
150
+ # the sandbox path. Calling `#run` on this copies the cookbooks to the
151
+ # sandbox. Calling `#policy_name` returns the policy's name.
152
+ #
153
+ # @api private
154
+ def policy_exporter
155
+ # Must force this because TK by default copies the current cookbook to the sandbox
156
+ # See ChefDK::PolicyfileServices::ExportRepo#assert_export_dir_clean!
157
+ @policy_exporter ||= ChefDK::PolicyfileServices::ExportRepo.new(policyfile: config[:policyfile],
158
+ export_dir: sandbox_path,
159
+ force: true)
160
+ end
161
+
162
+ # Writes a fake (but valid) validation.pem into the sandbox directory.
163
+ #
164
+ # @api private
165
+ def prepare_validation_pem
166
+ info("Preparing validation.pem")
167
+ debug("Using a dummy validation.pem")
168
+
169
+ source = File.join(Kitchen.source_root, %w[support dummy-validation.pem])
170
+ FileUtils.cp(source, File.join(sandbox_path, "validation.pem"))
171
+ end
172
+
173
+ # Writes a client.rb configuration file to the sandbox directory.
174
+ #
175
+ # @api private
176
+ def prepare_client_rb
177
+ data = default_config_rb.merge(config[:client_rb])
178
+
179
+ data["use_policyfile"] = true
180
+ data["versioned_cookbooks"] = true
181
+ data["policy_name"] = policy_exporter.policy_name
182
+ data["policy_group"] = "local"
183
+ data["policy_document_native_api"] = true
184
+
185
+ info("Preparing client.rb")
186
+ debug("Creating client.rb from #{data.inspect}")
187
+
188
+ File.open(File.join(sandbox_path, "client.rb"), "wb") do |file|
189
+ file.write(format_config_file(data))
190
+ end
191
+ end
192
+
193
+ end
194
+ end
195
+ end