chef-dk 0.9.0 → 0.10.0

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +190 -190
  3. data/Gemfile +26 -26
  4. data/LICENSE +201 -201
  5. data/README.md +292 -276
  6. data/Rakefile +18 -18
  7. data/bin/chef +25 -25
  8. data/chef-dk.gemspec +62 -0
  9. data/lib/chef-dk.rb +19 -19
  10. data/lib/chef-dk/authenticated_http.rb +40 -40
  11. data/lib/chef-dk/builtin_commands.rb +60 -60
  12. data/lib/chef-dk/chef_runner.rb +98 -98
  13. data/lib/chef-dk/cli.rb +200 -200
  14. data/lib/chef-dk/command/base.rb +79 -79
  15. data/lib/chef-dk/command/clean_policy_cookbooks.rb +116 -116
  16. data/lib/chef-dk/command/clean_policy_revisions.rb +113 -113
  17. data/lib/chef-dk/command/delete_policy.rb +122 -122
  18. data/lib/chef-dk/command/delete_policy_group.rb +122 -122
  19. data/lib/chef-dk/command/diff.rb +316 -316
  20. data/lib/chef-dk/command/env.rb +90 -90
  21. data/lib/chef-dk/command/exec.rb +45 -45
  22. data/lib/chef-dk/command/export.rb +151 -151
  23. data/lib/chef-dk/command/gem.rb +47 -47
  24. data/lib/chef-dk/command/generate.rb +120 -120
  25. data/lib/chef-dk/command/generator_commands.rb +80 -80
  26. data/lib/chef-dk/command/generator_commands/app.rb +107 -107
  27. data/lib/chef-dk/command/generator_commands/attribute.rb +37 -37
  28. data/lib/chef-dk/command/generator_commands/base.rb +121 -121
  29. data/lib/chef-dk/command/generator_commands/cookbook.rb +153 -119
  30. data/lib/chef-dk/command/generator_commands/cookbook_code_file.rb +100 -100
  31. data/lib/chef-dk/command/generator_commands/cookbook_file.rb +45 -45
  32. data/lib/chef-dk/command/generator_commands/generator_generator.rb +177 -177
  33. data/lib/chef-dk/command/generator_commands/lwrp.rb +36 -36
  34. data/lib/chef-dk/command/generator_commands/policyfile.rb +127 -86
  35. data/lib/chef-dk/command/generator_commands/recipe.rb +36 -36
  36. data/lib/chef-dk/command/generator_commands/repo.rb +125 -96
  37. data/lib/chef-dk/command/generator_commands/template.rb +46 -46
  38. data/lib/chef-dk/command/install.rb +121 -121
  39. data/lib/chef-dk/command/provision.rb +438 -438
  40. data/lib/chef-dk/command/push.rb +118 -118
  41. data/lib/chef-dk/command/push_archive.rb +126 -126
  42. data/lib/chef-dk/command/shell_init.rb +180 -180
  43. data/lib/chef-dk/command/show_policy.rb +165 -165
  44. data/lib/chef-dk/command/undelete.rb +155 -155
  45. data/lib/chef-dk/command/update.rb +129 -129
  46. data/lib/chef-dk/command/verify.rb +534 -490
  47. data/lib/chef-dk/commands_map.rb +115 -115
  48. data/lib/chef-dk/completions/bash.sh.erb +5 -5
  49. data/lib/chef-dk/completions/chef.fish.erb +10 -10
  50. data/lib/chef-dk/completions/zsh.zsh.erb +21 -21
  51. data/lib/chef-dk/component_test.rb +173 -171
  52. data/lib/chef-dk/configurable.rb +57 -57
  53. data/lib/chef-dk/cookbook_metadata.rb +45 -45
  54. data/lib/chef-dk/cookbook_omnifetch.rb +32 -32
  55. data/lib/chef-dk/cookbook_profiler/git.rb +151 -151
  56. data/lib/chef-dk/cookbook_profiler/identifiers.rb +72 -72
  57. data/lib/chef-dk/cookbook_profiler/null_scm.rb +32 -32
  58. data/lib/chef-dk/exceptions.rb +126 -113
  59. data/lib/chef-dk/generator.rb +163 -163
  60. data/lib/chef-dk/helpers.rb +159 -159
  61. data/lib/chef-dk/pager.rb +106 -106
  62. data/lib/chef-dk/policyfile/chef_repo_cookbook_source.rb +138 -122
  63. data/lib/chef-dk/policyfile/chef_server_cookbook_source.rb +54 -54
  64. data/lib/chef-dk/policyfile/community_cookbook_source.rb +97 -82
  65. data/lib/chef-dk/policyfile/comparison_base.rb +124 -124
  66. data/lib/chef-dk/policyfile/cookbook_location_specification.rb +141 -133
  67. data/lib/chef-dk/policyfile/cookbook_locks.rb +466 -466
  68. data/lib/chef-dk/policyfile/cookbook_sources.rb +22 -21
  69. data/lib/chef-dk/policyfile/delivery_supermarket_source.rb +90 -0
  70. data/lib/chef-dk/policyfile/differ.rb +266 -266
  71. data/lib/chef-dk/policyfile/dsl.rb +223 -197
  72. data/lib/chef-dk/policyfile/lister.rb +232 -232
  73. data/lib/chef-dk/policyfile/null_cookbook_source.rb +45 -45
  74. data/lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -124
  75. data/lib/chef-dk/policyfile/reports/install.rb +70 -70
  76. data/lib/chef-dk/policyfile/reports/table_printer.rb +58 -58
  77. data/lib/chef-dk/policyfile/reports/upload.rb +70 -70
  78. data/lib/chef-dk/policyfile/solution_dependencies.rb +298 -298
  79. data/lib/chef-dk/policyfile/storage_config.rb +100 -100
  80. data/lib/chef-dk/policyfile/undo_record.rb +142 -142
  81. data/lib/chef-dk/policyfile/undo_stack.rb +130 -130
  82. data/lib/chef-dk/policyfile/uploader.rb +213 -213
  83. data/lib/chef-dk/policyfile_compiler.rb +380 -322
  84. data/lib/chef-dk/policyfile_lock.rb +552 -552
  85. data/lib/chef-dk/policyfile_services/clean_policies.rb +95 -95
  86. data/lib/chef-dk/policyfile_services/clean_policy_cookbooks.rb +125 -125
  87. data/lib/chef-dk/policyfile_services/export_repo.rb +309 -309
  88. data/lib/chef-dk/policyfile_services/install.rb +125 -125
  89. data/lib/chef-dk/policyfile_services/push.rb +114 -114
  90. data/lib/chef-dk/policyfile_services/push_archive.rb +173 -173
  91. data/lib/chef-dk/policyfile_services/rm_policy.rb +142 -142
  92. data/lib/chef-dk/policyfile_services/rm_policy_group.rb +86 -86
  93. data/lib/chef-dk/policyfile_services/show_policy.rb +237 -237
  94. data/lib/chef-dk/policyfile_services/undelete.rb +108 -108
  95. data/lib/chef-dk/policyfile_services/update_attributes.rb +104 -104
  96. data/lib/chef-dk/service_exception_inspectors.rb +25 -25
  97. data/lib/chef-dk/service_exception_inspectors/base.rb +40 -40
  98. data/lib/chef-dk/service_exception_inspectors/http.rb +121 -121
  99. data/lib/chef-dk/service_exceptions.rb +143 -143
  100. data/lib/chef-dk/shell_out.rb +36 -36
  101. data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +3 -3
  102. data/lib/chef-dk/skeletons/code_generator/files/default/chefignore +100 -100
  103. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -9
  104. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -54
  105. data/lib/chef-dk/skeletons/code_generator/files/default/gitignore +16 -16
  106. data/lib/chef-dk/skeletons/code_generator/files/default/repo/README.md +28 -28
  107. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -27
  108. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -7
  109. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -3
  110. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -8
  111. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +58 -58
  112. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +3 -3
  113. data/lib/chef-dk/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
  114. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +9 -9
  115. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +12 -12
  116. data/lib/chef-dk/skeletons/code_generator/files/default/repo/policies/README.md +24 -0
  117. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +9 -9
  118. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +12 -12
  119. data/lib/chef-dk/skeletons/code_generator/files/default/serverspec_spec_helper.rb +8 -8
  120. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +2 -2
  121. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
  122. data/lib/chef-dk/skeletons/code_generator/metadata.rb +8 -8
  123. data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +97 -97
  124. data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +12 -12
  125. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +117 -104
  126. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +24 -24
  127. data/lib/chef-dk/skeletons/code_generator/recipes/lwrp.rb +23 -23
  128. data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +8 -8
  129. data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +27 -27
  130. data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +67 -48
  131. data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +32 -32
  132. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -3
  133. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.apache2.erb +201 -201
  134. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -339
  135. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -674
  136. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -21
  137. data/lib/chef-dk/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -20
  138. data/lib/chef-dk/skeletons/code_generator/templates/default/README.md.erb +4 -4
  139. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen.yml.erb +21 -16
  140. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +32 -27
  141. data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +7 -7
  142. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb +5 -5
  143. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +20 -20
  144. data/lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb +11 -11
  145. data/lib/chef-dk/skeletons/code_generator/templates/default/serverspec_default_spec.rb.erb +9 -9
  146. data/lib/chef-dk/ui.rb +58 -58
  147. data/lib/chef-dk/version.rb +20 -20
  148. data/lib/kitchen/provisioner/policyfile_zero.rb +189 -193
  149. data/spec/shared/a_file_generator.rb +125 -125
  150. data/spec/shared/a_generated_file.rb +12 -12
  151. data/spec/shared/command_with_ui_object.rb +11 -11
  152. data/spec/shared/custom_generator_cookbook.rb +117 -117
  153. data/spec/shared/fixture_cookbook_checksums.rb +47 -47
  154. data/spec/shared/setup_git_cookbooks.rb +53 -53
  155. data/spec/spec_helper.rb +50 -49
  156. data/spec/test_helpers.rb +84 -84
  157. data/spec/unit/chef_runner_spec.rb +111 -111
  158. data/spec/unit/cli_spec.rb +357 -357
  159. data/spec/unit/command/base_spec.rb +169 -169
  160. data/spec/unit/command/clean_policy_cookbooks_spec.rb +181 -181
  161. data/spec/unit/command/clean_policy_revisions_spec.rb +181 -181
  162. data/spec/unit/command/delete_policy_group_spec.rb +207 -207
  163. data/spec/unit/command/delete_policy_spec.rb +207 -207
  164. data/spec/unit/command/diff_spec.rb +312 -312
  165. data/spec/unit/command/env_spec.rb +52 -52
  166. data/spec/unit/command/exec_spec.rb +179 -179
  167. data/spec/unit/command/export_spec.rb +189 -189
  168. data/spec/unit/command/generate_spec.rb +142 -142
  169. data/spec/unit/command/generator_commands/app_spec.rb +169 -169
  170. data/spec/unit/command/generator_commands/attribute_spec.rb +32 -32
  171. data/spec/unit/command/generator_commands/cookbook_file_spec.rb +32 -32
  172. data/spec/unit/command/generator_commands/cookbook_spec.rb +450 -320
  173. data/spec/unit/command/generator_commands/generator_generator_spec.rb +229 -229
  174. data/spec/unit/command/generator_commands/lwrp_spec.rb +32 -32
  175. data/spec/unit/command/generator_commands/policyfile_spec.rb +225 -125
  176. data/spec/unit/command/generator_commands/recipe_spec.rb +34 -34
  177. data/spec/unit/command/generator_commands/repo_spec.rb +367 -283
  178. data/spec/unit/command/generator_commands/template_spec.rb +32 -32
  179. data/spec/unit/command/install_spec.rb +179 -179
  180. data/spec/unit/command/provision_spec.rb +592 -592
  181. data/spec/unit/command/push_archive_spec.rb +153 -153
  182. data/spec/unit/command/push_spec.rb +199 -199
  183. data/spec/unit/command/shell_init_spec.rb +329 -329
  184. data/spec/unit/command/show_policy_spec.rb +235 -235
  185. data/spec/unit/command/undelete_spec.rb +246 -246
  186. data/spec/unit/command/update_spec.rb +251 -251
  187. data/spec/unit/command/verify_spec.rb +325 -323
  188. data/spec/unit/commands_map_spec.rb +57 -57
  189. data/spec/unit/component_test_spec.rb +126 -126
  190. data/spec/unit/cookbook_metadata_spec.rb +98 -98
  191. data/spec/unit/cookbook_profiler/git_spec.rb +176 -176
  192. data/spec/unit/cookbook_profiler/identifiers_spec.rb +83 -83
  193. data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -9
  194. data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -9
  195. data/spec/unit/fixtures/command/cli_test_command.rb +26 -26
  196. data/spec/unit/fixtures/command/explicit_path_example.rb +7 -7
  197. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
  198. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -3
  199. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
  200. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -96
  201. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
  202. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
  203. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -16
  204. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -3
  205. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -4
  206. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -96
  207. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -8
  208. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -8
  209. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/.kitchen.yml +16 -16
  210. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -3
  211. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -4
  212. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -96
  213. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -8
  214. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -8
  215. data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1321 -1321
  216. data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -2987
  217. data/spec/unit/fixtures/cookbooks_api/universe.json +1 -1
  218. data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +36 -36
  219. data/spec/unit/fixtures/dev_cookbooks/README.md +16 -16
  220. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -2
  221. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -5
  222. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -3
  223. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -2
  224. data/spec/unit/fixtures/example_cookbook/.gitignore +17 -17
  225. data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -16
  226. data/spec/unit/fixtures/example_cookbook/Berksfile +3 -3
  227. data/spec/unit/fixtures/example_cookbook/README.md +4 -4
  228. data/spec/unit/fixtures/example_cookbook/chefignore +96 -96
  229. data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -8
  230. data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -8
  231. data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -17
  232. data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -16
  233. data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -3
  234. data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -4
  235. data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -96
  236. data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -5
  237. data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -8
  238. data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -17
  239. data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -16
  240. data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -3
  241. data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -4
  242. data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -96
  243. data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -8
  244. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -4
  245. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -96
  246. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -8
  247. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -8
  248. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -3
  249. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -4
  250. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -96
  251. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -9
  252. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -8
  253. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -16
  254. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -3
  255. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -4
  256. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -96
  257. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -8
  258. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -8
  259. data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -2
  260. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
  261. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
  262. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
  263. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
  264. data/spec/unit/generator_spec.rb +120 -120
  265. data/spec/unit/helpers_spec.rb +92 -92
  266. data/spec/unit/pager_spec.rb +119 -119
  267. data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -66
  268. data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +34 -34
  269. data/spec/unit/policyfile/community_cookbook_source_spec.rb +84 -51
  270. data/spec/unit/policyfile/comparison_base_spec.rb +343 -343
  271. data/spec/unit/policyfile/cookbook_location_specification_spec.rb +257 -252
  272. data/spec/unit/policyfile/cookbook_locks_spec.rb +529 -529
  273. data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +130 -0
  274. data/spec/unit/policyfile/differ_spec.rb +687 -687
  275. data/spec/unit/policyfile/lister_spec.rb +272 -272
  276. data/spec/unit/policyfile/null_cookbook_source_spec.rb +35 -35
  277. data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -92
  278. data/spec/unit/policyfile/reports/install_spec.rb +115 -115
  279. data/spec/unit/policyfile/reports/upload_spec.rb +96 -96
  280. data/spec/unit/policyfile/solution_dependencies_spec.rb +145 -145
  281. data/spec/unit/policyfile/storage_config_spec.rb +172 -172
  282. data/spec/unit/policyfile/undo_record_spec.rb +260 -260
  283. data/spec/unit/policyfile/undo_stack_spec.rb +266 -266
  284. data/spec/unit/policyfile/uploader_spec.rb +410 -410
  285. data/spec/unit/policyfile_demands_spec.rb +997 -876
  286. data/spec/unit/policyfile_evaluation_spec.rb +557 -441
  287. data/spec/unit/policyfile_lock_build_spec.rb +1056 -1056
  288. data/spec/unit/policyfile_lock_install_spec.rb +138 -138
  289. data/spec/unit/policyfile_lock_serialization_spec.rb +425 -425
  290. data/spec/unit/policyfile_lock_validation_spec.rb +611 -611
  291. data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -236
  292. data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +275 -275
  293. data/spec/unit/policyfile_services/export_repo_spec.rb +439 -439
  294. data/spec/unit/policyfile_services/install_spec.rb +191 -191
  295. data/spec/unit/policyfile_services/push_archive_spec.rb +345 -345
  296. data/spec/unit/policyfile_services/push_spec.rb +233 -233
  297. data/spec/unit/policyfile_services/rm_policy_group_spec.rb +241 -241
  298. data/spec/unit/policyfile_services/rm_policy_spec.rb +266 -266
  299. data/spec/unit/policyfile_services/show_policy_spec.rb +889 -889
  300. data/spec/unit/policyfile_services/undelete_spec.rb +304 -304
  301. data/spec/unit/policyfile_services/update_attributes_spec.rb +217 -217
  302. data/spec/unit/service_exception_inspectors/base_spec.rb +43 -43
  303. data/spec/unit/service_exception_inspectors/http_spec.rb +140 -140
  304. data/spec/unit/shell_out_spec.rb +34 -34
  305. data/warning.txt +9 -0
  306. metadata +18 -5
data/README.md CHANGED
@@ -1,276 +1,292 @@
1
- # Chef Development Kit
2
-
3
- Chef Development Kit (ChefDK) brings Chef and the development tools developed by the Chef Community together and acts as the consistent interface to this awesomeness. This awesomeness is composed of:
4
-
5
- * [Chef][]
6
- * [Berkshelf][]
7
- * [Test Kitchen][]
8
- * [ChefSpec][]
9
- * [Foodcritic][]
10
-
11
- This repository contains the code for the `chef` command. The full
12
- package is built via the 'chefdk' project in
13
- [omnibus-chef](https://github.com/opscode/omnibus-chef).
14
-
15
- ## Installation
16
-
17
- You can get the [latest release of ChefDK from the downloads page][ChefDK].
18
-
19
- On Mac OS X, you can also use [homebrew-cask](http://caskroom.io)
20
- to `brew cask install chefdk`.
21
-
22
- Once you install the package, the `chef-client` suite, `berks`,
23
- `kitchen`, and this application (`chef`) will be symlinked into your
24
- system bin directory, ready to use.
25
-
26
- ### Pre-release Candidates
27
-
28
- You can run `curl -LO https://www.chef.io/chef/install.sh && sudo bash ./install.sh -P chefdk -p && rm install.sh` to download and install the latest pre-release candidate. If you want to specify a different version replace `-p` with `-v <version>`
29
-
30
- ## Usage
31
-
32
- For help with [Berkshelf][], [Test Kitchen][], [ChefSpec][] or [Foodcritic][],
33
- visit those projects' homepages for documentation and guides. For help with
34
- `chef-client` and `knife`, visit the [Chef documentation][]
35
- and [Learn Chef][].
36
-
37
- ### The `chef` Command
38
-
39
- Our goal is for `chef` to become a workflow tool that builds on the
40
- ideas of Berkshelf to provide an awesome experience that encourages
41
- quick iteration and testing (and makes those things easy) and provides a
42
- way to easily, reliably, and repeatably roll out new automation code to
43
- your infrastructure.
44
-
45
- While we've got a long way to go before we reach that goal we do have
46
- some helpful bits of functionality already included in the `chef`
47
- command:
48
-
49
- #### `chef generate`
50
- The generate subcommand generates skeleton Chef code
51
- layouts so you can skip repetitive boilerplate and get down to
52
- automating your infrastructure quickly. Unlike other generators, it only
53
- generates the minimum required files when creating a cookbook so you can
54
- focus on the task at hand without getting overwhelmed by stuff you don't
55
- need.
56
-
57
- The following generators are built-in:
58
-
59
- * `chef generate app` Creates an "application" layout that supports
60
- multiple cookbooks. This is a somewhat experimental compromise between
61
- the one-repo-per-cookbook and monolithic-chef-repo styles of cookbook
62
- management.
63
-
64
- * `chef generate cookbook` Creates a single cookbook.
65
- * `chef generate recipe` Creates a new recipe file in an existing
66
- cookbook.
67
- * `chef generate attribute` Creates a new attributes file in an existing
68
- cookbook.
69
- * `chef generate template` Creates a new template file in an existing
70
- cookbook. Use the `-s SOURCE` option to copy a source file's content to
71
- populate the template.
72
- * `chef generate file` Creates a new cookbook file in an existing
73
- cookbook. Supports the `-s SOURCE` option similar to template.
74
- * `chef generate lwrp` Creates a new LWRP resource and provider in an
75
- existing cookbook.
76
-
77
- The `chef generate` command also accepts additional `--generator-arg key=value`
78
- pairs that can be used to supply ad-hoc data to a generator cookbook.
79
- For example, you might specify `--generator-arg database=mysql` and then only
80
- write a template for `recipes/mysql.rb` if `context.database == 'mysql'`.
81
-
82
- #### `chef gem`
83
- `chef gem` is a wrapper command that manages installation and updating
84
- of rubygems for the Ruby installation embedded in the ChefDK package.
85
- This allows you to install knife plugins, Test Kitchen drivers, and
86
- other Ruby applications that are not packaged with ChefDK.
87
-
88
- Gems are installed to a `.chefdk` directory in your home directory; any
89
- executables included with a gem you install will be created in
90
- `~/.chefdk/gem/ruby/2.1.0/bin`. You can run these executables with
91
- `chef exec`, or use `chef shell-init` to add ChefDK's paths to your
92
- environment. Those commands are documented below.
93
-
94
- ### `chef exec`
95
- `chef exec <command>` runs any arbitrary shell command with the PATH
96
- environment variable and the ruby environment variables (`GEM_HOME`,
97
- `GEM_PATH`, etc.) setup to point at the embedded ChefDK omnibus environment.
98
-
99
- ### `chef shell-init`
100
- `chef shell-init SHELL_NAME` emits shell commands that modify your
101
- environment to make ChefDK your primary ruby. It supports bash, zsh,
102
- fish and PowerShell (posh). For more information to help you decide if
103
- this is desirable and instructions, see "Using ChefDK as Your Primary
104
- Development Environment" below.
105
-
106
- ### `chef install`
107
- `chef install` reads a `Policyfile.rb` document, which contains a
108
- `run_list` and optional cookbook version constraints, finds a set of
109
- cookbooks that provide the desired recipes and meet dependency
110
- constraints, and emits a `Policyfile.lock.json` describing the expanded
111
- run list and locked cookbook set. The `Policyfile.lock.json` can be used
112
- to install the cookbooks on another machine. The policy lock can be
113
- uploaded to a Chef Server (via the `chef push` command) to apply the
114
- expanded run list and locked cookbook set to nodes in your
115
- infrastructure. See the POLICYFILE_README.md for further details.
116
-
117
- ### `chef push`
118
- `chef push POLICY_GROUP` uploads a Policyfile.lock.json along with the cookbooks it
119
- references to a Chef Server. The policy lock is applied to a
120
- `POLICY_GROUP`, which is a set of nodes that share the same run list and
121
- cookbook set. This command operates in compatibility mode and has the
122
- same caveats as `chef install`. See the POLICYFILE_README.md for further
123
- details.
124
-
125
- ### `chef update`
126
- `chef update` updates a Policyfile.lock.json with the latest cookbooks
127
- from upstream sources. It supports an `--attributes` flag which will
128
- cause only attributes from the Policyfile.rb to be updated.
129
-
130
- ### `chef diff`
131
- `chef diff` shows an itemized diff between Policyfile locks. It can
132
- compare Policyfile locks from local disk, git, and/or the Chef Server,
133
- based on the options given.
134
-
135
- #### `chef verify`
136
- `chef verify` tests the embedded applications. By default it runs a
137
- quick "smoke test" to verify that the embedded applications are
138
- installed correctly and can run basic commands. As an end user this is
139
- probably all you'll ever need, but `verify` can also optionally run unit
140
- and integration tests by supplying the `--unit` and `--integration`
141
- flags, respectively.
142
-
143
- *WARNING:* The integration tests will do dangerous things like start
144
- HTTP servers with access to your filesystem and even create users and
145
- groups if run with sufficient privileges. The tests may also be
146
- sensitive to your machine's configuration. If you choose to run these,
147
- we recommend to only run them on dedicated, isolated hosts (we do this
148
- in our build cluster to verify each build).
149
-
150
- ### Using ChefDK as Your Primary Development Environment
151
-
152
- By default, ChefDK only adds a few select applications to your `PATH`
153
- and packages them in such a way that they are isolated from any other
154
- Ruby development tools you have on your system. If you're happily using
155
- your system ruby, rvm, rbenv, chruby or any other development
156
- environment, you can continue to do so. Just ensure that the ChefDK
157
- provided applications appear first in your `PATH` before any
158
- gem-installed versions and you're good to go.
159
-
160
- If you'd like to use ChefDK as your primary Ruby/Chef development
161
- environment, however, you can do so by initializing your shell with
162
- ChefDK's environment.
163
-
164
- To try it temporarily, in a new terminal session, run:
165
-
166
- ```sh
167
- eval "$(chef shell-init SHELL_NAME)"
168
- ```
169
-
170
- where `SHELL_NAME` is the name of your shell (usually bash, but zsh is
171
- also common). This modifies your `PATH` and `GEM_*` environment
172
- variables to include ChefDK's paths (run without the `eval` to see the
173
- generated code). Now your default `ruby` and associated tools will be
174
- the ones from ChefDK:
175
-
176
- ```sh
177
- which ruby
178
- # => /opt/chefdk/embedded/bin/ruby
179
- ```
180
-
181
- To add ChefDK to your shell's environment permanently, add the
182
- initialization step to your shell's profile:
183
-
184
- ```sh
185
- echo 'eval "$(chef shell-init SHELL_NAME)"' >> ~/.YOUR_SHELL_PROFILE
186
- ```
187
-
188
- Where `YOUR_SHELL_PROFILE` is `~/.bash_profile` for most bash users,
189
- `~/.zshrc` for zsh, and `~/.bashrc` on Ubuntu.
190
-
191
- #### Powershell
192
-
193
- You can use `chef shell-init` with PowerShell on Windows.
194
-
195
- To try it in your current session:
196
-
197
- ```posh
198
- chef shell-init powershell | Invoke-Expression
199
- ```
200
-
201
- To enable it permanently:
202
-
203
- ```posh
204
- "chef shell-init powershell | Invoke-Expression" >> $PROFILE
205
- ```
206
-
207
- #### Fish
208
-
209
- `chef shell-init` also supports fish.
210
-
211
- To try it:
212
-
213
- ```fish
214
- eval (chef shell-init fish)
215
- ```
216
-
217
- To permanently enable:
218
-
219
- ```fish
220
- echo 'eval (chef shell-init SHELL_NAME)' >> ~/.config/fish/config.fish
221
- ```
222
-
223
- ## Uninstallation Instructions
224
-
225
- ### Mac OS X
226
-
227
- You can uninstall Chef Development Kit on Mac using below commands:
228
-
229
- ```sh
230
- # Remove the installed files
231
- sudo rm -rf /opt/chefdk
232
-
233
- # Remove the system installation entry
234
- sudo pkgutil --forget com.getchef.pkg.chefdk
235
-
236
- # Remove the symlinks under /usr/bin for Chef Development Kit
237
- ls -la /usr/bin | egrep '/opt/chefdk' | awk '{ print $9 }' | sudo xargs -I % rm -f /usr/bin/%
238
- ```
239
-
240
- ### Windows
241
-
242
- You can use `Add / Remove Programs` on Windows to remove the Chef Development
243
- Kit from your system.
244
-
245
- ### RHEL
246
-
247
- You can use `rpm` to uninstall Chef Development Kit on RHEL based systems:
248
-
249
- ```sh
250
- rpm -qa *chefdk*
251
- yum remove <package>
252
- rm -rf /opt/chefdk
253
- rm -rf ~/.chefdk
254
- ```
255
-
256
- ### Ubuntu
257
-
258
- You can use `dpkg` to uninstall Chef Development Kit on Ubuntu based systems:
259
-
260
- ```sh
261
- dpkg --list | grep chefdk # or dpkg --status chefdk
262
-
263
- # Purge chefdk from the system.
264
- # see man dkpg for details
265
- dpkg -P chefdk
266
- ```
267
- - - -
268
-
269
- [Berkshelf]: http://berkshelf.com "Berkshelf"
270
- [Chef]: https://www.chef.io "Chef"
271
- [ChefDK]: https://downloads.chef.io/chef-dk "Chef Development Kit"
272
- [Chef Documentation]: https://docs.chef.io "Chef Documentation"
273
- [ChefSpec]: http://chefspec.org "ChefSpec"
274
- [Foodcritic]: http://foodcritic.io "Foodcritic"
275
- [Learn Chef]: https://learn.chef.io "Learn Chef"
276
- [Test Kitchen]: http://kitchen.ci "Test Kitchen"
1
+ # Chef Development Kit
2
+
3
+ Chef Development Kit (ChefDK) brings Chef and the development tools developed by the Chef Community together and acts as the consistent interface to this awesomeness. This awesomeness is composed of:
4
+
5
+ * [Chef][]
6
+ * [Berkshelf][]
7
+ * [Test Kitchen][]
8
+ * [ChefSpec][]
9
+ * [Foodcritic][]
10
+
11
+ This repository contains the code for the `chef` command. The full
12
+ package is built via the 'chefdk' project in
13
+ [omnibus-chef](https://github.com/opscode/omnibus-chef).
14
+
15
+ ## Installation
16
+
17
+ You can get the [latest release of ChefDK from the downloads page][ChefDK].
18
+
19
+ On Mac OS X, you can also use [homebrew-cask](http://caskroom.io)
20
+ to `brew cask install chefdk`.
21
+
22
+ Once you install the package, the `chef-client` suite, `berks`,
23
+ `kitchen`, and this application (`chef`) will be symlinked into your
24
+ system bin directory, ready to use.
25
+
26
+ ### Pre-release Candidates
27
+
28
+ The following commands will download the latest ChefDK package from the `current` channel. The `current` channel holds builds that have passed testing and are candidates for release.
29
+
30
+ #### Linux and OS/X:
31
+
32
+ In a terminal, run:
33
+
34
+ `curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -c current -P chefdk`
35
+
36
+ To download a specific version, append the `-v` flag. EG, `-v 0.9.0`.
37
+
38
+ #### Windows
39
+
40
+ Open up a Powershell command prompt as Administrator and run:
41
+
42
+ `. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -channel current -project chefdk`
43
+
44
+ To download a specific version, append the `-version` flag. EG, `-version 0.9.0`.
45
+
46
+ ## Usage
47
+
48
+ For help with [Berkshelf][], [Test Kitchen][], [ChefSpec][] or [Foodcritic][],
49
+ visit those projects' homepages for documentation and guides. For help with
50
+ `chef-client` and `knife`, visit the [Chef documentation][]
51
+ and [Learn Chef][].
52
+
53
+ ### The `chef` Command
54
+
55
+ Our goal is for `chef` to become a workflow tool that builds on the
56
+ ideas of Berkshelf to provide an awesome experience that encourages
57
+ quick iteration and testing (and makes those things easy) and provides a
58
+ way to easily, reliably, and repeatably roll out new automation code to
59
+ your infrastructure.
60
+
61
+ While we've got a long way to go before we reach that goal we do have
62
+ some helpful bits of functionality already included in the `chef`
63
+ command:
64
+
65
+ #### `chef generate`
66
+ The generate subcommand generates skeleton Chef code
67
+ layouts so you can skip repetitive boilerplate and get down to
68
+ automating your infrastructure quickly. Unlike other generators, it only
69
+ generates the minimum required files when creating a cookbook so you can
70
+ focus on the task at hand without getting overwhelmed by stuff you don't
71
+ need.
72
+
73
+ The following generators are built-in:
74
+
75
+ * `chef generate app` Creates an "application" layout that supports
76
+ multiple cookbooks. This is a somewhat experimental compromise between
77
+ the one-repo-per-cookbook and monolithic-chef-repo styles of cookbook
78
+ management.
79
+
80
+ * `chef generate cookbook` Creates a single cookbook.
81
+ * `chef generate recipe` Creates a new recipe file in an existing
82
+ cookbook.
83
+ * `chef generate attribute` Creates a new attributes file in an existing
84
+ cookbook.
85
+ * `chef generate template` Creates a new template file in an existing
86
+ cookbook. Use the `-s SOURCE` option to copy a source file's content to
87
+ populate the template.
88
+ * `chef generate file` Creates a new cookbook file in an existing
89
+ cookbook. Supports the `-s SOURCE` option similar to template.
90
+ * `chef generate lwrp` Creates a new LWRP resource and provider in an
91
+ existing cookbook.
92
+
93
+ The `chef generate` command also accepts additional `--generator-arg key=value`
94
+ pairs that can be used to supply ad-hoc data to a generator cookbook.
95
+ For example, you might specify `--generator-arg database=mysql` and then only
96
+ write a template for `recipes/mysql.rb` if `context.database == 'mysql'`.
97
+
98
+ #### `chef gem`
99
+ `chef gem` is a wrapper command that manages installation and updating
100
+ of rubygems for the Ruby installation embedded in the ChefDK package.
101
+ This allows you to install knife plugins, Test Kitchen drivers, and
102
+ other Ruby applications that are not packaged with ChefDK.
103
+
104
+ Gems are installed to a `.chefdk` directory in your home directory; any
105
+ executables included with a gem you install will be created in
106
+ `~/.chefdk/gem/ruby/2.1.0/bin`. You can run these executables with
107
+ `chef exec`, or use `chef shell-init` to add ChefDK's paths to your
108
+ environment. Those commands are documented below.
109
+
110
+ ### `chef exec`
111
+ `chef exec <command>` runs any arbitrary shell command with the PATH
112
+ environment variable and the ruby environment variables (`GEM_HOME`,
113
+ `GEM_PATH`, etc.) setup to point at the embedded ChefDK omnibus environment.
114
+
115
+ ### `chef shell-init`
116
+ `chef shell-init SHELL_NAME` emits shell commands that modify your
117
+ environment to make ChefDK your primary ruby. It supports bash, zsh,
118
+ fish and PowerShell (posh). For more information to help you decide if
119
+ this is desirable and instructions, see "Using ChefDK as Your Primary
120
+ Development Environment" below.
121
+
122
+ ### `chef install`
123
+ `chef install` reads a `Policyfile.rb` document, which contains a
124
+ `run_list` and optional cookbook version constraints, finds a set of
125
+ cookbooks that provide the desired recipes and meet dependency
126
+ constraints, and emits a `Policyfile.lock.json` describing the expanded
127
+ run list and locked cookbook set. The `Policyfile.lock.json` can be used
128
+ to install the cookbooks on another machine. The policy lock can be
129
+ uploaded to a Chef Server (via the `chef push` command) to apply the
130
+ expanded run list and locked cookbook set to nodes in your
131
+ infrastructure. See the POLICYFILE_README.md for further details.
132
+
133
+ ### `chef push`
134
+ `chef push POLICY_GROUP` uploads a Policyfile.lock.json along with the cookbooks it
135
+ references to a Chef Server. The policy lock is applied to a
136
+ `POLICY_GROUP`, which is a set of nodes that share the same run list and
137
+ cookbook set. This command operates in compatibility mode and has the
138
+ same caveats as `chef install`. See the POLICYFILE_README.md for further
139
+ details.
140
+
141
+ ### `chef update`
142
+ `chef update` updates a Policyfile.lock.json with the latest cookbooks
143
+ from upstream sources. It supports an `--attributes` flag which will
144
+ cause only attributes from the Policyfile.rb to be updated.
145
+
146
+ ### `chef diff`
147
+ `chef diff` shows an itemized diff between Policyfile locks. It can
148
+ compare Policyfile locks from local disk, git, and/or the Chef Server,
149
+ based on the options given.
150
+
151
+ #### `chef verify`
152
+ `chef verify` tests the embedded applications. By default it runs a
153
+ quick "smoke test" to verify that the embedded applications are
154
+ installed correctly and can run basic commands. As an end user this is
155
+ probably all you'll ever need, but `verify` can also optionally run unit
156
+ and integration tests by supplying the `--unit` and `--integration`
157
+ flags, respectively.
158
+
159
+ *WARNING:* The integration tests will do dangerous things like start
160
+ HTTP servers with access to your filesystem and even create users and
161
+ groups if run with sufficient privileges. The tests may also be
162
+ sensitive to your machine's configuration. If you choose to run these,
163
+ we recommend to only run them on dedicated, isolated hosts (we do this
164
+ in our build cluster to verify each build).
165
+
166
+ ### Using ChefDK as Your Primary Development Environment
167
+
168
+ By default, ChefDK only adds a few select applications to your `PATH`
169
+ and packages them in such a way that they are isolated from any other
170
+ Ruby development tools you have on your system. If you're happily using
171
+ your system ruby, rvm, rbenv, chruby or any other development
172
+ environment, you can continue to do so. Just ensure that the ChefDK
173
+ provided applications appear first in your `PATH` before any
174
+ gem-installed versions and you're good to go.
175
+
176
+ If you'd like to use ChefDK as your primary Ruby/Chef development
177
+ environment, however, you can do so by initializing your shell with
178
+ ChefDK's environment.
179
+
180
+ To try it temporarily, in a new terminal session, run:
181
+
182
+ ```sh
183
+ eval "$(chef shell-init SHELL_NAME)"
184
+ ```
185
+
186
+ where `SHELL_NAME` is the name of your shell (usually bash, but zsh is
187
+ also common). This modifies your `PATH` and `GEM_*` environment
188
+ variables to include ChefDK's paths (run without the `eval` to see the
189
+ generated code). Now your default `ruby` and associated tools will be
190
+ the ones from ChefDK:
191
+
192
+ ```sh
193
+ which ruby
194
+ # => /opt/chefdk/embedded/bin/ruby
195
+ ```
196
+
197
+ To add ChefDK to your shell's environment permanently, add the
198
+ initialization step to your shell's profile:
199
+
200
+ ```sh
201
+ echo 'eval "$(chef shell-init SHELL_NAME)"' >> ~/.YOUR_SHELL_PROFILE
202
+ ```
203
+
204
+ Where `YOUR_SHELL_PROFILE` is `~/.bash_profile` for most bash users,
205
+ `~/.zshrc` for zsh, and `~/.bashrc` on Ubuntu.
206
+
207
+ #### Powershell
208
+
209
+ You can use `chef shell-init` with PowerShell on Windows.
210
+
211
+ To try it in your current session:
212
+
213
+ ```posh
214
+ chef shell-init powershell | Invoke-Expression
215
+ ```
216
+
217
+ To enable it permanently:
218
+
219
+ ```posh
220
+ "chef shell-init powershell | Invoke-Expression" >> $PROFILE
221
+ ```
222
+
223
+ #### Fish
224
+
225
+ `chef shell-init` also supports fish.
226
+
227
+ To try it:
228
+
229
+ ```fish
230
+ eval (chef shell-init fish)
231
+ ```
232
+
233
+ To permanently enable:
234
+
235
+ ```fish
236
+ echo 'eval (chef shell-init SHELL_NAME)' >> ~/.config/fish/config.fish
237
+ ```
238
+
239
+ ## Uninstallation Instructions
240
+
241
+ ### Mac OS X
242
+
243
+ You can uninstall Chef Development Kit on Mac using below commands:
244
+
245
+ ```sh
246
+ # Remove the installed files
247
+ sudo rm -rf /opt/chefdk
248
+
249
+ # Remove the system installation entry
250
+ sudo pkgutil --forget com.getchef.pkg.chefdk
251
+
252
+ # Remove the symlinks under /usr/bin for Chef Development Kit
253
+ ls -la /usr/bin | egrep '/opt/chefdk' | awk '{ print $9 }' | sudo xargs -I % rm -f /usr/bin/%
254
+ ```
255
+
256
+ ### Windows
257
+
258
+ You can use `Add / Remove Programs` on Windows to remove the Chef Development
259
+ Kit from your system.
260
+
261
+ ### RHEL
262
+
263
+ You can use `rpm` to uninstall Chef Development Kit on RHEL based systems:
264
+
265
+ ```sh
266
+ rpm -qa *chefdk*
267
+ yum remove <package>
268
+ rm -rf /opt/chefdk
269
+ rm -rf ~/.chefdk
270
+ ```
271
+
272
+ ### Ubuntu
273
+
274
+ You can use `dpkg` to uninstall Chef Development Kit on Ubuntu based systems:
275
+
276
+ ```sh
277
+ dpkg --list | grep chefdk # or dpkg --status chefdk
278
+
279
+ # Purge chefdk from the system.
280
+ # see man dkpg for details
281
+ dpkg -P chefdk
282
+ ```
283
+ - - -
284
+
285
+ [Berkshelf]: http://berkshelf.com "Berkshelf"
286
+ [Chef]: https://www.chef.io "Chef"
287
+ [ChefDK]: https://downloads.chef.io/chef-dk "Chef Development Kit"
288
+ [Chef Documentation]: https://docs.chef.io "Chef Documentation"
289
+ [ChefSpec]: http://chefspec.org "ChefSpec"
290
+ [Foodcritic]: http://foodcritic.io "Foodcritic"
291
+ [Learn Chef]: https://learn.chef.io "Learn Chef"
292
+ [Test Kitchen]: http://kitchen.ci "Test Kitchen"