chef-cli 1.0.3

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 (372) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +32 -0
  3. data/LICENSE +201 -0
  4. data/Rakefile +70 -0
  5. data/bin/chef +25 -0
  6. data/chef-cli.gemspec +53 -0
  7. data/lib/chef-cli.rb +19 -0
  8. data/lib/chef-cli/authenticated_http.rb +22 -0
  9. data/lib/chef-cli/builtin_commands.rb +62 -0
  10. data/lib/chef-cli/chef_runner.rb +114 -0
  11. data/lib/chef-cli/chef_server_api_multi.rb +73 -0
  12. data/lib/chef-cli/cli.rb +206 -0
  13. data/lib/chef-cli/command/base.rb +89 -0
  14. data/lib/chef-cli/command/clean_policy_cookbooks.rb +115 -0
  15. data/lib/chef-cli/command/clean_policy_revisions.rb +112 -0
  16. data/lib/chef-cli/command/delete_policy.rb +121 -0
  17. data/lib/chef-cli/command/delete_policy_group.rb +121 -0
  18. data/lib/chef-cli/command/describe_cookbook.rb +98 -0
  19. data/lib/chef-cli/command/diff.rb +316 -0
  20. data/lib/chef-cli/command/env.rb +99 -0
  21. data/lib/chef-cli/command/exec.rb +45 -0
  22. data/lib/chef-cli/command/export.rb +156 -0
  23. data/lib/chef-cli/command/gem.rb +48 -0
  24. data/lib/chef-cli/command/generate.rb +123 -0
  25. data/lib/chef-cli/command/generator_commands.rb +83 -0
  26. data/lib/chef-cli/command/generator_commands/attribute.rb +37 -0
  27. data/lib/chef-cli/command/generator_commands/base.rb +157 -0
  28. data/lib/chef-cli/command/generator_commands/build_cookbook.rb +126 -0
  29. data/lib/chef-cli/command/generator_commands/chef_exts/generator_desc_resource.rb +40 -0
  30. data/lib/chef-cli/command/generator_commands/chef_exts/quieter_doc_formatter.rb +38 -0
  31. data/lib/chef-cli/command/generator_commands/chef_exts/recipe_dsl_ext.rb +39 -0
  32. data/lib/chef-cli/command/generator_commands/cookbook.rb +251 -0
  33. data/lib/chef-cli/command/generator_commands/cookbook_code_file.rb +100 -0
  34. data/lib/chef-cli/command/generator_commands/cookbook_file.rb +46 -0
  35. data/lib/chef-cli/command/generator_commands/generator_generator.rb +175 -0
  36. data/lib/chef-cli/command/generator_commands/helpers.rb +37 -0
  37. data/lib/chef-cli/command/generator_commands/policyfile.rb +125 -0
  38. data/lib/chef-cli/command/generator_commands/recipe.rb +37 -0
  39. data/lib/chef-cli/command/generator_commands/repo.rb +140 -0
  40. data/lib/chef-cli/command/generator_commands/resource.rb +37 -0
  41. data/lib/chef-cli/command/generator_commands/template.rb +47 -0
  42. data/lib/chef-cli/command/install.rb +121 -0
  43. data/lib/chef-cli/command/provision.rb +38 -0
  44. data/lib/chef-cli/command/push.rb +118 -0
  45. data/lib/chef-cli/command/push_archive.rb +126 -0
  46. data/lib/chef-cli/command/shell_init.rb +185 -0
  47. data/lib/chef-cli/command/show_policy.rb +164 -0
  48. data/lib/chef-cli/command/undelete.rb +155 -0
  49. data/lib/chef-cli/command/update.rb +140 -0
  50. data/lib/chef-cli/command/verify.rb +548 -0
  51. data/lib/chef-cli/commands_map.rb +113 -0
  52. data/lib/chef-cli/completions/bash.sh.erb +5 -0
  53. data/lib/chef-cli/completions/chef.fish.erb +10 -0
  54. data/lib/chef-cli/completions/zsh.zsh.erb +21 -0
  55. data/lib/chef-cli/component_test.rb +226 -0
  56. data/lib/chef-cli/configurable.rb +88 -0
  57. data/lib/chef-cli/cookbook_metadata.rb +45 -0
  58. data/lib/chef-cli/cookbook_omnifetch.rb +32 -0
  59. data/lib/chef-cli/cookbook_profiler/git.rb +152 -0
  60. data/lib/chef-cli/cookbook_profiler/identifiers.rb +72 -0
  61. data/lib/chef-cli/cookbook_profiler/null_scm.rb +31 -0
  62. data/lib/chef-cli/dist.rb +31 -0
  63. data/lib/chef-cli/exceptions.rb +153 -0
  64. data/lib/chef-cli/generator.rb +165 -0
  65. data/lib/chef-cli/helpers.rb +170 -0
  66. data/lib/chef-cli/pager.rb +104 -0
  67. data/lib/chef-cli/policyfile/artifactory_cookbook_source.rb +102 -0
  68. data/lib/chef-cli/policyfile/attribute_merge_checker.rb +110 -0
  69. data/lib/chef-cli/policyfile/chef_repo_cookbook_source.rb +138 -0
  70. data/lib/chef-cli/policyfile/chef_server_cookbook_source.rb +99 -0
  71. data/lib/chef-cli/policyfile/chef_server_lock_fetcher.rb +167 -0
  72. data/lib/chef-cli/policyfile/community_cookbook_source.rb +95 -0
  73. data/lib/chef-cli/policyfile/comparison_base.rb +123 -0
  74. data/lib/chef-cli/policyfile/cookbook_location_specification.rb +154 -0
  75. data/lib/chef-cli/policyfile/cookbook_locks.rb +466 -0
  76. data/lib/chef-cli/policyfile/cookbook_sources.rb +23 -0
  77. data/lib/chef-cli/policyfile/delivery_supermarket_source.rb +89 -0
  78. data/lib/chef-cli/policyfile/differ.rb +263 -0
  79. data/lib/chef-cli/policyfile/dsl.rb +288 -0
  80. data/lib/chef-cli/policyfile/git_lock_fetcher.rb +265 -0
  81. data/lib/chef-cli/policyfile/included_policies_cookbook_source.rb +156 -0
  82. data/lib/chef-cli/policyfile/lister.rb +229 -0
  83. data/lib/chef-cli/policyfile/local_lock_fetcher.rb +132 -0
  84. data/lib/chef-cli/policyfile/lock_applier.rb +80 -0
  85. data/lib/chef-cli/policyfile/lock_fetcher_mixin.rb +37 -0
  86. data/lib/chef-cli/policyfile/null_cookbook_source.rb +49 -0
  87. data/lib/chef-cli/policyfile/policyfile_location_specification.rb +128 -0
  88. data/lib/chef-cli/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -0
  89. data/lib/chef-cli/policyfile/remote_lock_fetcher.rb +108 -0
  90. data/lib/chef-cli/policyfile/reports/install.rb +69 -0
  91. data/lib/chef-cli/policyfile/reports/table_printer.rb +57 -0
  92. data/lib/chef-cli/policyfile/reports/upload.rb +70 -0
  93. data/lib/chef-cli/policyfile/solution_dependencies.rb +311 -0
  94. data/lib/chef-cli/policyfile/source_uri.rb +57 -0
  95. data/lib/chef-cli/policyfile/storage_config.rb +112 -0
  96. data/lib/chef-cli/policyfile/undo_record.rb +139 -0
  97. data/lib/chef-cli/policyfile/undo_stack.rb +128 -0
  98. data/lib/chef-cli/policyfile/uploader.rb +222 -0
  99. data/lib/chef-cli/policyfile_compiler.rb +528 -0
  100. data/lib/chef-cli/policyfile_lock.rb +581 -0
  101. data/lib/chef-cli/policyfile_services/clean_policies.rb +95 -0
  102. data/lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb +123 -0
  103. data/lib/chef-cli/policyfile_services/export_repo.rb +419 -0
  104. data/lib/chef-cli/policyfile_services/install.rb +167 -0
  105. data/lib/chef-cli/policyfile_services/push.rb +112 -0
  106. data/lib/chef-cli/policyfile_services/push_archive.rb +164 -0
  107. data/lib/chef-cli/policyfile_services/rm_policy.rb +141 -0
  108. data/lib/chef-cli/policyfile_services/rm_policy_group.rb +85 -0
  109. data/lib/chef-cli/policyfile_services/show_policy.rb +234 -0
  110. data/lib/chef-cli/policyfile_services/undelete.rb +108 -0
  111. data/lib/chef-cli/policyfile_services/update_attributes.rb +110 -0
  112. data/lib/chef-cli/service_exception_inspectors.rb +24 -0
  113. data/lib/chef-cli/service_exception_inspectors/base.rb +39 -0
  114. data/lib/chef-cli/service_exception_inspectors/http.rb +119 -0
  115. data/lib/chef-cli/service_exceptions.rb +142 -0
  116. data/lib/chef-cli/shell_out.rb +36 -0
  117. data/lib/chef-cli/skeletons/code_generator/files/default/Berksfile +3 -0
  118. data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/README.md +146 -0
  119. data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/kitchen.yml +21 -0
  120. data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +8 -0
  121. data/lib/chef-cli/skeletons/code_generator/files/default/chefignore +110 -0
  122. data/lib/chef-cli/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
  123. data/lib/chef-cli/skeletons/code_generator/files/default/cookbook_readmes/README.md +66 -0
  124. data/lib/chef-cli/skeletons/code_generator/files/default/delivery-config.json +17 -0
  125. data/lib/chef-cli/skeletons/code_generator/files/default/delivery-project.toml +34 -0
  126. data/lib/chef-cli/skeletons/code_generator/files/default/gitignore +22 -0
  127. data/lib/chef-cli/skeletons/code_generator/files/default/repo/README.md +20 -0
  128. data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
  129. data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
  130. data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +6 -0
  131. data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
  132. data/lib/chef-cli/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -0
  133. data/lib/chef-cli/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
  134. data/lib/chef-cli/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
  135. data/lib/chef-cli/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
  136. data/lib/chef-cli/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
  137. data/lib/chef-cli/skeletons/code_generator/files/default/repo/policyfiles/README.md +24 -0
  138. data/lib/chef-cli/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
  139. data/lib/chef-cli/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
  140. data/lib/chef-cli/skeletons/code_generator/files/default/spec_helper.rb +2 -0
  141. data/lib/chef-cli/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
  142. data/lib/chef-cli/skeletons/code_generator/metadata.rb +8 -0
  143. data/lib/chef-cli/skeletons/code_generator/recipes/attribute.rb +11 -0
  144. data/lib/chef-cli/skeletons/code_generator/recipes/build_cookbook.rb +175 -0
  145. data/lib/chef-cli/skeletons/code_generator/recipes/cookbook.rb +167 -0
  146. data/lib/chef-cli/skeletons/code_generator/recipes/cookbook_file.rb +23 -0
  147. data/lib/chef-cli/skeletons/code_generator/recipes/helpers.rb +19 -0
  148. data/lib/chef-cli/skeletons/code_generator/recipes/policyfile.rb +7 -0
  149. data/lib/chef-cli/skeletons/code_generator/recipes/recipe.rb +50 -0
  150. data/lib/chef-cli/skeletons/code_generator/recipes/repo.rb +71 -0
  151. data/lib/chef-cli/skeletons/code_generator/recipes/resource.rb +12 -0
  152. data/lib/chef-cli/skeletons/code_generator/recipes/template.rb +31 -0
  153. data/lib/chef-cli/skeletons/code_generator/templates/default/CHANGELOG.md.erb +11 -0
  154. data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
  155. data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -0
  156. data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
  157. data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
  158. data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
  159. data/lib/chef-cli/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -0
  160. data/lib/chef-cli/skeletons/code_generator/templates/default/README.md.erb +4 -0
  161. data/lib/chef-cli/skeletons/code_generator/templates/default/attribute.rb.erb +0 -0
  162. data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -0
  163. data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -0
  164. data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +9 -0
  165. data/lib/chef-cli/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
  166. data/lib/chef-cli/skeletons/code_generator/templates/default/helpers.rb.erb +39 -0
  167. data/lib/chef-cli/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +16 -0
  168. data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen.yml.erb +38 -0
  169. data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_dokken.yml.erb +36 -0
  170. data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +32 -0
  171. data/lib/chef-cli/skeletons/code_generator/templates/default/metadata.rb.erb +20 -0
  172. data/lib/chef-cli/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
  173. data/lib/chef-cli/skeletons/code_generator/templates/default/recipe_spec.rb.erb +29 -0
  174. data/lib/chef-cli/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -0
  175. data/lib/chef-cli/skeletons/code_generator/templates/default/resource.rb.erb +1 -0
  176. data/lib/chef-cli/skeletons/code_generator/templates/default/template.erb +0 -0
  177. data/lib/chef-cli/ui.rb +57 -0
  178. data/lib/chef-cli/version.rb +20 -0
  179. data/lib/kitchen/provisioner/policyfile_zero.rb +195 -0
  180. data/spec/shared/a_file_generator.rb +125 -0
  181. data/spec/shared/a_generated_file.rb +12 -0
  182. data/spec/shared/command_with_ui_object.rb +11 -0
  183. data/spec/shared/custom_generator_cookbook.rb +136 -0
  184. data/spec/shared/fixture_cookbook_checksums.rb +46 -0
  185. data/spec/shared/setup_git_committer_config.rb +54 -0
  186. data/spec/shared/setup_git_cookbooks.rb +53 -0
  187. data/spec/spec_helper.rb +51 -0
  188. data/spec/test_helpers.rb +84 -0
  189. data/spec/unit/chef_runner_spec.rb +139 -0
  190. data/spec/unit/chef_server_api_multi_spec.rb +120 -0
  191. data/spec/unit/cli_spec.rb +375 -0
  192. data/spec/unit/command/base_spec.rb +195 -0
  193. data/spec/unit/command/clean_policy_cookbooks_spec.rb +180 -0
  194. data/spec/unit/command/clean_policy_revisions_spec.rb +180 -0
  195. data/spec/unit/command/delete_policy_group_spec.rb +206 -0
  196. data/spec/unit/command/delete_policy_spec.rb +206 -0
  197. data/spec/unit/command/diff_spec.rb +311 -0
  198. data/spec/unit/command/env_spec.rb +86 -0
  199. data/spec/unit/command/exec_spec.rb +178 -0
  200. data/spec/unit/command/export_spec.rb +199 -0
  201. data/spec/unit/command/generate_spec.rb +142 -0
  202. data/spec/unit/command/generator_commands/attribute_spec.rb +31 -0
  203. data/spec/unit/command/generator_commands/base_spec.rb +180 -0
  204. data/spec/unit/command/generator_commands/build_cookbook_spec.rb +377 -0
  205. data/spec/unit/command/generator_commands/chef_exts/generator_desc_resource_spec.rb +77 -0
  206. data/spec/unit/command/generator_commands/chef_exts/recipe_dsl_ext_spec.rb +111 -0
  207. data/spec/unit/command/generator_commands/cookbook_file_spec.rb +31 -0
  208. data/spec/unit/command/generator_commands/cookbook_spec.rb +769 -0
  209. data/spec/unit/command/generator_commands/generator_generator_spec.rb +227 -0
  210. data/spec/unit/command/generator_commands/helpers_spec.rb +31 -0
  211. data/spec/unit/command/generator_commands/policyfile_spec.rb +223 -0
  212. data/spec/unit/command/generator_commands/recipe_spec.rb +37 -0
  213. data/spec/unit/command/generator_commands/repo_spec.rb +374 -0
  214. data/spec/unit/command/generator_commands/resource_spec.rb +31 -0
  215. data/spec/unit/command/generator_commands/template_spec.rb +31 -0
  216. data/spec/unit/command/install_spec.rb +179 -0
  217. data/spec/unit/command/push_archive_spec.rb +153 -0
  218. data/spec/unit/command/push_spec.rb +198 -0
  219. data/spec/unit/command/shell_init_spec.rb +339 -0
  220. data/spec/unit/command/show_policy_spec.rb +234 -0
  221. data/spec/unit/command/undelete_spec.rb +244 -0
  222. data/spec/unit/command/update_spec.rb +283 -0
  223. data/spec/unit/command/verify_spec.rb +341 -0
  224. data/spec/unit/commands_map_spec.rb +57 -0
  225. data/spec/unit/component_test_spec.rb +128 -0
  226. data/spec/unit/configurable_spec.rb +68 -0
  227. data/spec/unit/cookbook_metadata_spec.rb +96 -0
  228. data/spec/unit/cookbook_profiler/git_spec.rb +176 -0
  229. data/spec/unit/cookbook_profiler/identifiers_spec.rb +81 -0
  230. data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -0
  231. data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -0
  232. data/spec/unit/fixtures/command/cli_test_command.rb +26 -0
  233. data/spec/unit/fixtures/command/explicit_path_example.rb +7 -0
  234. data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -0
  235. data/spec/unit/fixtures/configurable/test_configurable.rb +10 -0
  236. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -0
  237. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -0
  238. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -0
  239. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -0
  240. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -0
  241. data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -0
  242. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -0
  243. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -0
  244. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -0
  245. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -0
  246. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -0
  247. data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -0
  248. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -0
  249. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -0
  250. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -0
  251. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/kitchen.yml +16 -0
  252. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -0
  253. data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -0
  254. data/spec/unit/fixtures/cookbooks_api/chef_server_universe.json +56 -0
  255. data/spec/unit/fixtures/cookbooks_api/pruned_chef_server_universe.json +30 -0
  256. data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1322 -0
  257. data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -0
  258. data/spec/unit/fixtures/cookbooks_api/universe.json +1 -0
  259. data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +33 -0
  260. data/spec/unit/fixtures/dev_cookbooks/README.md +16 -0
  261. data/spec/unit/fixtures/dev_cookbooks/bar-cookbook.gitbundle +0 -0
  262. data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/bin/.keep +0 -0
  263. data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/embedded/.keep +0 -0
  264. data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/embedded/bin/.keep +0 -0
  265. data/spec/unit/fixtures/eg_omnibus_dir/missing_component/bin/.keep +0 -0
  266. data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/apps/berkshelf/.keep +0 -0
  267. data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/apps/test-kitchen/.keep +0 -0
  268. data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/bin/.keep +0 -0
  269. data/spec/unit/fixtures/eg_omnibus_dir/valid/bin/.keep +0 -0
  270. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -0
  271. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -0
  272. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef-dk/.keep +0 -0
  273. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -0
  274. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -0
  275. data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/bin/.keep +0 -0
  276. data/spec/unit/fixtures/example_app/Policyfile.rb +0 -0
  277. data/spec/unit/fixtures/example_cookbook/.gitignore +17 -0
  278. data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -0
  279. data/spec/unit/fixtures/example_cookbook/Berksfile +3 -0
  280. data/spec/unit/fixtures/example_cookbook/README.md +4 -0
  281. data/spec/unit/fixtures/example_cookbook/chefignore +96 -0
  282. data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -0
  283. data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -0
  284. data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -0
  285. data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -0
  286. data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -0
  287. data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -0
  288. data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -0
  289. data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -0
  290. data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -0
  291. data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -0
  292. data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -0
  293. data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -0
  294. data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -0
  295. data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -0
  296. data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -0
  297. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -0
  298. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -0
  299. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -0
  300. data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -0
  301. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -0
  302. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -0
  303. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -0
  304. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -0
  305. data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -0
  306. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -0
  307. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -0
  308. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -0
  309. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -0
  310. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/extra/extra_file.txt +0 -0
  311. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -0
  312. data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -0
  313. data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -0
  314. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -0
  315. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -0
  316. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -0
  317. data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -0
  318. data/spec/unit/generator_spec.rb +119 -0
  319. data/spec/unit/pager_spec.rb +117 -0
  320. data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -0
  321. data/spec/unit/policyfile/attribute_merge_checker_spec.rb +80 -0
  322. data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -0
  323. data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +55 -0
  324. data/spec/unit/policyfile/chef_server_lock_fetcher_spec.rb +161 -0
  325. data/spec/unit/policyfile/community_cookbook_source_spec.rb +83 -0
  326. data/spec/unit/policyfile/comparison_base_spec.rb +340 -0
  327. data/spec/unit/policyfile/cookbook_location_specification_spec.rb +347 -0
  328. data/spec/unit/policyfile/cookbook_locks_spec.rb +527 -0
  329. data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +129 -0
  330. data/spec/unit/policyfile/differ_spec.rb +686 -0
  331. data/spec/unit/policyfile/git_lock_fetcher_spec.rb +155 -0
  332. data/spec/unit/policyfile/included_policies_cookbook_source_spec.rb +242 -0
  333. data/spec/unit/policyfile/lister_spec.rb +268 -0
  334. data/spec/unit/policyfile/local_lock_fetcher_spec.rb +199 -0
  335. data/spec/unit/policyfile/lock_applier_spec.rb +100 -0
  336. data/spec/unit/policyfile/lock_fetcher_mixin_spec.rb +60 -0
  337. data/spec/unit/policyfile/null_cookbook_source_spec.rb +34 -0
  338. data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -0
  339. data/spec/unit/policyfile/remote_lock_fetcher_spec.rb +129 -0
  340. data/spec/unit/policyfile/reports/install_spec.rb +114 -0
  341. data/spec/unit/policyfile/reports/upload_spec.rb +94 -0
  342. data/spec/unit/policyfile/solution_dependencies_spec.rb +170 -0
  343. data/spec/unit/policyfile/source_uri_spec.rb +36 -0
  344. data/spec/unit/policyfile/storage_config_spec.rb +180 -0
  345. data/spec/unit/policyfile/undo_record_spec.rb +258 -0
  346. data/spec/unit/policyfile/undo_stack_spec.rb +265 -0
  347. data/spec/unit/policyfile/uploader_spec.rb +410 -0
  348. data/spec/unit/policyfile_demands_spec.rb +1197 -0
  349. data/spec/unit/policyfile_evaluation_spec.rb +628 -0
  350. data/spec/unit/policyfile_includes_dsl_spec.rb +220 -0
  351. data/spec/unit/policyfile_includes_spec.rb +720 -0
  352. data/spec/unit/policyfile_install_with_includes_spec.rb +232 -0
  353. data/spec/unit/policyfile_lock_build_spec.rb +1065 -0
  354. data/spec/unit/policyfile_lock_install_spec.rb +137 -0
  355. data/spec/unit/policyfile_lock_serialization_spec.rb +424 -0
  356. data/spec/unit/policyfile_lock_validation_spec.rb +608 -0
  357. data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -0
  358. data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +272 -0
  359. data/spec/unit/policyfile_services/export_repo_spec.rb +473 -0
  360. data/spec/unit/policyfile_services/install_spec.rb +209 -0
  361. data/spec/unit/policyfile_services/push_archive_spec.rb +359 -0
  362. data/spec/unit/policyfile_services/push_spec.rb +249 -0
  363. data/spec/unit/policyfile_services/rm_policy_group_spec.rb +237 -0
  364. data/spec/unit/policyfile_services/rm_policy_spec.rb +263 -0
  365. data/spec/unit/policyfile_services/show_policy_spec.rb +887 -0
  366. data/spec/unit/policyfile_services/undelete_spec.rb +302 -0
  367. data/spec/unit/policyfile_services/update_attributes_spec.rb +229 -0
  368. data/spec/unit/policyfile_services/update_spec.rb +162 -0
  369. data/spec/unit/service_exception_inspectors/base_spec.rb +41 -0
  370. data/spec/unit/service_exception_inspectors/http_spec.rb +138 -0
  371. data/spec/unit/shell_out_spec.rb +34 -0
  372. metadata +796 -0
@@ -0,0 +1,98 @@
1
+ require_relative "base"
2
+ require_relative "../ui"
3
+ require_relative "../cookbook_profiler/identifiers"
4
+ require_relative "../dist"
5
+
6
+ module ChefCLI
7
+ class IdDumper
8
+
9
+ attr_reader :cb_path
10
+ attr_reader :ui
11
+
12
+ def initialize(ui, cb_relpath)
13
+ @ui = ui
14
+ @cb_path = cb_relpath
15
+ end
16
+
17
+ def run
18
+ id = ChefCLI::CookbookProfiler::Identifiers.new(cookbook_version)
19
+ ui.msg "Path: #{cookbook_path}"
20
+ ui.msg "SemVer version: #{id.semver_version}"
21
+ ui.msg "Identifier: #{id.content_identifier}"
22
+ ui.msg "File fingerprints:"
23
+ ui.msg id.fingerprint_text
24
+ end
25
+
26
+ def cookbook_version
27
+ @cookbook_version ||= cookbook_loader.cookbook_version
28
+ end
29
+
30
+ def cookbook_path
31
+ File.expand_path(cb_path)
32
+ end
33
+
34
+ def cookbook_loader
35
+ @cookbook_loader ||=
36
+ begin
37
+ loader = Chef::Cookbook::CookbookVersionLoader.new(cookbook_path, chefignore)
38
+ loader.load!
39
+ loader
40
+ end
41
+ end
42
+
43
+ def chefignore
44
+ @chefignore ||= Chef::Cookbook::Chefignore.new(File.join(cookbook_path, "chefignore"))
45
+ end
46
+ end
47
+
48
+ module Command
49
+
50
+ class DescribeCookbook < ChefCLI::Command::Base
51
+
52
+ banner "Usage: #{ChefCLI::Dist::EXEC} describe-cookbook <path/to/cookbook>"
53
+
54
+ attr_reader :cookbook_path
55
+ attr_reader :ui
56
+
57
+ def initialize(*args)
58
+ super
59
+ @cookbook_path = nil
60
+ @ui = UI.new
61
+ end
62
+
63
+ def run(params = [])
64
+ return 1 unless apply_params!(params)
65
+ return 1 unless check_cookbook_path
66
+ IdDumper.new(ui, cookbook_path).run
67
+ end
68
+
69
+ def check_cookbook_path
70
+ unless File.exist?(cookbook_path)
71
+ ui.err("Given cookbook path '#{cookbook_path}' does not exist or is not readable")
72
+ return false
73
+ end
74
+
75
+ mdrb_path = File.join(cookbook_path, "metadata.rb")
76
+ mdjson_path = File.join(cookbook_path, "metadata.json")
77
+
78
+ unless File.exist?(mdrb_path) || File.exist?(mdjson_path)
79
+ ui.err("Given cookbook path '#{cookbook_path}' does not appear to be a cookbook, it does not contain a metadata.rb or metadata.json")
80
+ return false
81
+ end
82
+ true
83
+ end
84
+
85
+ def apply_params!(params)
86
+ remaining_args = parse_options(params)
87
+ if remaining_args.size != 1
88
+ ui.err(opt_parser)
89
+ return false
90
+ else
91
+ @cookbook_path = File.expand_path(remaining_args.first)
92
+ true
93
+ end
94
+ end
95
+
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,316 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2015-2019 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
+ require_relative "base"
19
+ require_relative "../ui"
20
+ require_relative "../pager"
21
+ require_relative "../policyfile/differ"
22
+ require_relative "../policyfile/comparison_base"
23
+ require_relative "../policyfile/storage_config"
24
+ require_relative "../configurable"
25
+ require_relative "../dist"
26
+ require "chef/server_api"
27
+
28
+ module ChefCLI
29
+ module Command
30
+
31
+ class Diff < Base
32
+
33
+ include Configurable
34
+ include Policyfile::StorageConfigDelegation
35
+
36
+ banner(<<~BANNER)
37
+ Usage: #{ChefCLI::Dist::EXEC} diff [POLICYFILE] [--head | --git GIT_REF | POLICY_GROUP | POLICY_GROUP...POLICY_GROUP ]
38
+
39
+ `#{ChefCLI::Dist::EXEC} diff` displays an itemized diff comparing two revisions of a
40
+ Policyfile lock.
41
+
42
+ When the `--git` option is given, `#{ChefCLI::Dist::EXEC} diff` either compares a given
43
+ git reference against the current lockfile revision on disk or compares
44
+ between two git references. Examples:
45
+
46
+ * `#{ChefCLI::Dist::EXEC} diff --git HEAD`: compares the current lock with the latest
47
+ commit on the current branch.
48
+ * `#{ChefCLI::Dist::EXEC} diff --git master`: compares the current lock with the latest
49
+ commit to master.
50
+ * `#{ChefCLI::Dist::EXEC} diff --git v1.0.0`: compares the current lock with the revision
51
+ as of the `v1.0.0` tag.
52
+ * `#{ChefCLI::Dist::EXEC} diff --git master...dev-branch`: compares the Policyfile lock on
53
+ master with the revision on the `dev-branch` branch.
54
+ * `#{ChefCLI::Dist::EXEC} diff --git v1.0.0...master`: compares the Policyfile lock at the
55
+ `v1.0.0` tag with the lastest revision on the master branch.
56
+
57
+ `#{ChefCLI::Dist::EXEC} diff --head` is a shortcut for `#{ChefCLI::Dist::EXEC} diff --git HEAD`.
58
+
59
+ When no git-specific flag is given, `#{ChefCLI::Dist::EXEC} diff` either compares the
60
+ current lockfile revision on disk to one on the #{ChefCLI::Dist::SERVER_PRODUCT} or compares
61
+ two lockfiles on the #{ChefCLI::Dist::SERVER_PRODUCT}. Lockfiles on the #{ChefCLI::Dist::SERVER_PRODUCT}
62
+ are specified by Policy Group. Examples:
63
+
64
+ * `#{ChefCLI::Dist::EXEC} diff staging`: compares the current lock with the one currently
65
+ assigned to the `staging` Policy Group.
66
+ * `#{ChefCLI::Dist::EXEC} diff production...staging`: compares the lock currently assigned
67
+ to the `production` Policy Group to the lock currently assigned to the
68
+ `staging` Policy Group.
69
+
70
+ Options:
71
+ BANNER
72
+
73
+ option :git,
74
+ short: "-g GIT_REF",
75
+ long: "--git GIT_REF",
76
+ description: "Compare local lock against GIT_REF, or between two git commits."
77
+
78
+ option :head,
79
+ long: "--head",
80
+ description: "Compare local lock against last git commit.",
81
+ boolean: true
82
+
83
+ option :pager,
84
+ long: "--[no-]pager",
85
+ description: "Enable/disable paged diff ouput (default: enabled).",
86
+ default: true,
87
+ boolean: true
88
+
89
+ option :config_file,
90
+ short: "-c CONFIG_FILE",
91
+ long: "--config CONFIG_FILE",
92
+ description: "Path to configuration file."
93
+
94
+ option :debug,
95
+ short: "-D",
96
+ long: "--debug",
97
+ description: "Enable stacktraces and other debug output.",
98
+ default: false
99
+
100
+ attr_accessor :ui
101
+
102
+ attr_reader :old_base
103
+ attr_reader :new_base
104
+
105
+ attr_reader :storage_config
106
+
107
+ def initialize(*args)
108
+ super
109
+
110
+ @ui = UI.new
111
+
112
+ @old_base = nil
113
+ @new_base = nil
114
+ @policyfile_relative_path = nil
115
+ @storage_config = nil
116
+ @http_client = nil
117
+
118
+ @old_lock = nil
119
+ @new_lock = nil
120
+ end
121
+
122
+ def debug?
123
+ !!config[:debug]
124
+ end
125
+
126
+ def run(params = [])
127
+ return 1 unless apply_params!(params)
128
+ print_diff
129
+ 0
130
+ rescue PolicyfileServiceError => e
131
+ handle_error(e)
132
+ 1
133
+ end
134
+
135
+ def handle_error(error)
136
+ ui.err("Error: #{error.message}")
137
+ if error.respond_to?(:reason)
138
+ ui.err("Reason: #{error.reason}")
139
+ ui.err("")
140
+ ui.err(error.extended_error_info) if debug?
141
+ ui.err(error.cause.backtrace.join("\n")) if debug?
142
+ end
143
+ end
144
+
145
+ def print_diff
146
+ # eagerly evaluate locks so we hit any errors before we've entered
147
+ # pagerland. Also, git commands behave weirdly when run while the pager
148
+ # is active, doing this eagerly also avoids that issue
149
+ materialize_locks
150
+ Pager.new(enable_pager: config[:pager]).with_pager do |pager|
151
+ differ = differ(pager.ui)
152
+ differ.run_report
153
+ end
154
+ end
155
+
156
+ def differ(ui = self.ui())
157
+ Policyfile::Differ.new(old_name: old_base.name,
158
+ old_lock: old_lock,
159
+ new_name: new_base.name,
160
+ new_lock: new_lock,
161
+ ui: ui)
162
+ end
163
+
164
+ def http_client
165
+ @http_client ||= Chef::ServerAPI.new(chef_config.chef_server_url,
166
+ signing_key_filename: chef_config.client_key,
167
+ client_name: chef_config.node_name)
168
+ end
169
+
170
+ def old_lock
171
+ materialize_locks unless @old_lock
172
+ @old_lock
173
+ end
174
+
175
+ def new_lock
176
+ materialize_locks unless @new_lock
177
+ @new_lock
178
+ end
179
+
180
+ def policy_name
181
+ local_lock["name"]
182
+ end
183
+
184
+ def local_lock
185
+ @local_lock ||= local_lock_comparison_base.lock
186
+ end
187
+
188
+ # ComparisonBase for the local lockfile. This is used to get the
189
+ # policy_name which is needed to query the server for the lockfile of a
190
+ # particular policy_group.
191
+ def local_lock_comparison_base
192
+ Policyfile::ComparisonBase::Local.new(policyfile_lock_relpath)
193
+ end
194
+
195
+ def policyfile_lock_relpath
196
+ storage_config.policyfile_lock_filename
197
+ end
198
+
199
+ def apply_params!(params)
200
+ remaining_args = parse_options(params)
201
+
202
+ if no_comparison_specified?(remaining_args)
203
+ ui.err("No comparison specified")
204
+ ui.err("")
205
+ ui.err(opt_parser)
206
+ false
207
+ elsif conflicting_args_and_opts_given?(remaining_args)
208
+ ui.err("Conflicting arguments and options: git and Policy Group comparisons cannot be mixed")
209
+ ui.err("")
210
+ ui.err(opt_parser)
211
+ false
212
+ elsif conflicting_git_options_given?
213
+ ui.err("Conflicting git options: --head and --git are exclusive")
214
+ ui.err("")
215
+ ui.err(opt_parser)
216
+
217
+ false
218
+ elsif config[:head]
219
+ set_policyfile_path_from_args(remaining_args)
220
+ @old_base = Policyfile::ComparisonBase::Git.new("HEAD", policyfile_lock_relpath)
221
+ @new_base = Policyfile::ComparisonBase::Local.new(policyfile_lock_relpath)
222
+ true
223
+ elsif config[:git]
224
+ set_policyfile_path_from_args(remaining_args)
225
+ parse_git_comparison(config[:git])
226
+ else
227
+ set_policyfile_path_from_args(remaining_args)
228
+ parse_server_comparison(remaining_args)
229
+ end
230
+ end
231
+
232
+ def parse_server_comparison(args)
233
+ comparison_string = args.last
234
+ if comparison_string.include?("...")
235
+ old_pgroup, new_pgroup, *extra = comparison_string.split("...")
236
+ @old_base, @new_base = [old_pgroup, new_pgroup].map do |g|
237
+ Policyfile::ComparisonBase::PolicyGroup.new(g, policy_name, http_client)
238
+ end
239
+
240
+ unless extra.empty?
241
+ ui.err("Unable to parse policy group comparison `#{comparison_string}`. Only 2 references can be specified.")
242
+ return false
243
+ end
244
+ else
245
+ @old_base = Policyfile::ComparisonBase::PolicyGroup.new(comparison_string, policy_name, http_client)
246
+ @new_base = Policyfile::ComparisonBase::Local.new(policyfile_lock_relpath)
247
+ end
248
+ true
249
+ end
250
+
251
+ def parse_git_comparison(git_ref)
252
+ if git_ref.include?("...")
253
+ old_ref, new_ref, *extra = git_ref.split("...")
254
+ @old_base, @new_base = [old_ref, new_ref].map do |r|
255
+ Policyfile::ComparisonBase::Git.new(r, policyfile_lock_relpath)
256
+ end
257
+
258
+ unless extra.empty?
259
+ ui.err("Unable to parse git comparison `#{git_ref}`. Only 2 references can be specified.")
260
+ return false
261
+ end
262
+ else
263
+ @old_base = Policyfile::ComparisonBase::Git.new(git_ref, policyfile_lock_relpath)
264
+ @new_base = Policyfile::ComparisonBase::Local.new(policyfile_lock_relpath)
265
+ end
266
+ true
267
+ end
268
+
269
+ def no_comparison_specified?(args)
270
+ !policy_group_comparison?(args) && !config[:head] && !config[:git]
271
+ end
272
+
273
+ def conflicting_args_and_opts_given?(args)
274
+ (config[:git] || config[:head]) && policy_group_comparison?(args)
275
+ end
276
+
277
+ def conflicting_git_options_given?
278
+ config[:git] && config[:head]
279
+ end
280
+
281
+ def comparing_policy_groups?
282
+ !(config[:git] || config[:head])
283
+ end
284
+
285
+ # Try to detect if the only argument given is a policyfile path. This is
286
+ # necessary because we support an optional argument with the path to the
287
+ # ruby policyfile. It would be easier if we used an option like `-f`, but
288
+ # that would be inconsistent with other commands (`chef install`, `chef
289
+ # push`, etc.).
290
+ def policy_group_comparison?(args)
291
+ return false if args.empty?
292
+ return true if args.size > 1
293
+ !(args.first =~ /\.rb\Z/)
294
+ end
295
+
296
+ def set_policyfile_path_from_args(args)
297
+ policyfile_relative_path =
298
+ if !comparing_policy_groups?
299
+ args.first || "Policyfile.rb"
300
+ elsif args.size == 1
301
+ "Policyfile.rb"
302
+ else
303
+ args.first
304
+ end
305
+ @storage_config = Policyfile::StorageConfig.new.use_policyfile(policyfile_relative_path)
306
+ end
307
+
308
+ def materialize_locks
309
+ @old_lock = old_base.lock
310
+ @new_lock = new_base.lock
311
+ end
312
+
313
+ end
314
+
315
+ end
316
+ end
@@ -0,0 +1,99 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2015-2019 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
+ require_relative "base"
19
+ require_relative "../cookbook_omnifetch"
20
+ require_relative "../ui"
21
+ require_relative "../version"
22
+ require_relative "../dist"
23
+ require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
24
+ require "yaml"
25
+
26
+ module ChefCLI
27
+ module Command
28
+ class Env < ChefCLI::Command::Base
29
+ banner "Usage: #{ChefCLI::Dist::EXEC} env"
30
+
31
+ attr_accessor :ui
32
+
33
+ def initialize(*args)
34
+ super
35
+ @ui = UI.new
36
+ end
37
+
38
+ def run(params)
39
+ info = {}
40
+ info["#{ChefCLI::Dist::PRODUCT}"] = workstation_info
41
+ info["Ruby"] = ruby_info
42
+ info["Path"] = paths
43
+ ui.msg info.to_yaml
44
+ end
45
+
46
+ def workstation_info
47
+ info = {}
48
+ if omnibus_install?
49
+ info["Version"] = ChefCLI::VERSION
50
+ info["Home"] = package_home
51
+ info["Install Directory"] = omnibus_root
52
+ info["Policyfile Config"] = policyfile_config
53
+ else
54
+ info["Version"] = "Not running from within Workstation"
55
+ end
56
+ info
57
+ end
58
+
59
+ def ruby_info
60
+ Hash.new.tap do |ruby|
61
+ ruby["Executable"] = Gem.ruby
62
+ ruby["Version"] = RUBY_VERSION
63
+ ruby["RubyGems"] = Hash.new.tap do |rubygems|
64
+ rubygems["RubyGems Version"] = Gem::VERSION
65
+ rubygems["RubyGems Platforms"] = Gem.platforms.map(&:to_s)
66
+ rubygems["Gem Environment"] = gem_environment
67
+ end
68
+ end
69
+ end
70
+
71
+ def gem_environment
72
+ h = {}
73
+ h["GEM ROOT"] = omnibus_env["GEM_ROOT"]
74
+ h["GEM HOME"] = omnibus_env["GEM_HOME"]
75
+ h["GEM PATHS"] = omnibus_env["GEM_PATH"].split(File::PATH_SEPARATOR)
76
+ rescue OmnibusInstallNotFound
77
+ h["GEM_ROOT"] = ENV["GEM_ROOT"] if ENV.key?("GEM_ROOT")
78
+ h["GEM_HOME"] = ENV["GEM_HOME"] if ENV.key?("GEM_HOME")
79
+ h["GEM PATHS"] = ENV["GEM_PATH"].split(File::PATH_SEPARATOR) if ENV.key?("GEM_PATH") && !ENV.key?("GEM_PATH").nil?
80
+ ensure
81
+ h
82
+ end
83
+
84
+ def paths
85
+ omnibus_env["PATH"].split(File::PATH_SEPARATOR)
86
+ rescue OmnibusInstallNotFound
87
+ ENV["PATH"].split(File::PATH_SEPARATOR)
88
+ end
89
+
90
+ def policyfile_config
91
+ Hash.new.tap do |h|
92
+ h["Cache Path"] = CookbookOmnifetch.cache_path
93
+ h["Storage Path"] = CookbookOmnifetch.storage_path.to_s
94
+ end
95
+ end
96
+
97
+ end
98
+ end
99
+ end