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.
- checksums.yaml +7 -0
- data/Gemfile +32 -0
- data/LICENSE +201 -0
- data/Rakefile +70 -0
- data/bin/chef +25 -0
- data/chef-cli.gemspec +53 -0
- data/lib/chef-cli.rb +19 -0
- data/lib/chef-cli/authenticated_http.rb +22 -0
- data/lib/chef-cli/builtin_commands.rb +62 -0
- data/lib/chef-cli/chef_runner.rb +114 -0
- data/lib/chef-cli/chef_server_api_multi.rb +73 -0
- data/lib/chef-cli/cli.rb +206 -0
- data/lib/chef-cli/command/base.rb +89 -0
- data/lib/chef-cli/command/clean_policy_cookbooks.rb +115 -0
- data/lib/chef-cli/command/clean_policy_revisions.rb +112 -0
- data/lib/chef-cli/command/delete_policy.rb +121 -0
- data/lib/chef-cli/command/delete_policy_group.rb +121 -0
- data/lib/chef-cli/command/describe_cookbook.rb +98 -0
- data/lib/chef-cli/command/diff.rb +316 -0
- data/lib/chef-cli/command/env.rb +99 -0
- data/lib/chef-cli/command/exec.rb +45 -0
- data/lib/chef-cli/command/export.rb +156 -0
- data/lib/chef-cli/command/gem.rb +48 -0
- data/lib/chef-cli/command/generate.rb +123 -0
- data/lib/chef-cli/command/generator_commands.rb +83 -0
- data/lib/chef-cli/command/generator_commands/attribute.rb +37 -0
- data/lib/chef-cli/command/generator_commands/base.rb +157 -0
- data/lib/chef-cli/command/generator_commands/build_cookbook.rb +126 -0
- data/lib/chef-cli/command/generator_commands/chef_exts/generator_desc_resource.rb +40 -0
- data/lib/chef-cli/command/generator_commands/chef_exts/quieter_doc_formatter.rb +38 -0
- data/lib/chef-cli/command/generator_commands/chef_exts/recipe_dsl_ext.rb +39 -0
- data/lib/chef-cli/command/generator_commands/cookbook.rb +251 -0
- data/lib/chef-cli/command/generator_commands/cookbook_code_file.rb +100 -0
- data/lib/chef-cli/command/generator_commands/cookbook_file.rb +46 -0
- data/lib/chef-cli/command/generator_commands/generator_generator.rb +175 -0
- data/lib/chef-cli/command/generator_commands/helpers.rb +37 -0
- data/lib/chef-cli/command/generator_commands/policyfile.rb +125 -0
- data/lib/chef-cli/command/generator_commands/recipe.rb +37 -0
- data/lib/chef-cli/command/generator_commands/repo.rb +140 -0
- data/lib/chef-cli/command/generator_commands/resource.rb +37 -0
- data/lib/chef-cli/command/generator_commands/template.rb +47 -0
- data/lib/chef-cli/command/install.rb +121 -0
- data/lib/chef-cli/command/provision.rb +38 -0
- data/lib/chef-cli/command/push.rb +118 -0
- data/lib/chef-cli/command/push_archive.rb +126 -0
- data/lib/chef-cli/command/shell_init.rb +185 -0
- data/lib/chef-cli/command/show_policy.rb +164 -0
- data/lib/chef-cli/command/undelete.rb +155 -0
- data/lib/chef-cli/command/update.rb +140 -0
- data/lib/chef-cli/command/verify.rb +548 -0
- data/lib/chef-cli/commands_map.rb +113 -0
- data/lib/chef-cli/completions/bash.sh.erb +5 -0
- data/lib/chef-cli/completions/chef.fish.erb +10 -0
- data/lib/chef-cli/completions/zsh.zsh.erb +21 -0
- data/lib/chef-cli/component_test.rb +226 -0
- data/lib/chef-cli/configurable.rb +88 -0
- data/lib/chef-cli/cookbook_metadata.rb +45 -0
- data/lib/chef-cli/cookbook_omnifetch.rb +32 -0
- data/lib/chef-cli/cookbook_profiler/git.rb +152 -0
- data/lib/chef-cli/cookbook_profiler/identifiers.rb +72 -0
- data/lib/chef-cli/cookbook_profiler/null_scm.rb +31 -0
- data/lib/chef-cli/dist.rb +31 -0
- data/lib/chef-cli/exceptions.rb +153 -0
- data/lib/chef-cli/generator.rb +165 -0
- data/lib/chef-cli/helpers.rb +170 -0
- data/lib/chef-cli/pager.rb +104 -0
- data/lib/chef-cli/policyfile/artifactory_cookbook_source.rb +102 -0
- data/lib/chef-cli/policyfile/attribute_merge_checker.rb +110 -0
- data/lib/chef-cli/policyfile/chef_repo_cookbook_source.rb +138 -0
- data/lib/chef-cli/policyfile/chef_server_cookbook_source.rb +99 -0
- data/lib/chef-cli/policyfile/chef_server_lock_fetcher.rb +167 -0
- data/lib/chef-cli/policyfile/community_cookbook_source.rb +95 -0
- data/lib/chef-cli/policyfile/comparison_base.rb +123 -0
- data/lib/chef-cli/policyfile/cookbook_location_specification.rb +154 -0
- data/lib/chef-cli/policyfile/cookbook_locks.rb +466 -0
- data/lib/chef-cli/policyfile/cookbook_sources.rb +23 -0
- data/lib/chef-cli/policyfile/delivery_supermarket_source.rb +89 -0
- data/lib/chef-cli/policyfile/differ.rb +263 -0
- data/lib/chef-cli/policyfile/dsl.rb +288 -0
- data/lib/chef-cli/policyfile/git_lock_fetcher.rb +265 -0
- data/lib/chef-cli/policyfile/included_policies_cookbook_source.rb +156 -0
- data/lib/chef-cli/policyfile/lister.rb +229 -0
- data/lib/chef-cli/policyfile/local_lock_fetcher.rb +132 -0
- data/lib/chef-cli/policyfile/lock_applier.rb +80 -0
- data/lib/chef-cli/policyfile/lock_fetcher_mixin.rb +37 -0
- data/lib/chef-cli/policyfile/null_cookbook_source.rb +49 -0
- data/lib/chef-cli/policyfile/policyfile_location_specification.rb +128 -0
- data/lib/chef-cli/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -0
- data/lib/chef-cli/policyfile/remote_lock_fetcher.rb +108 -0
- data/lib/chef-cli/policyfile/reports/install.rb +69 -0
- data/lib/chef-cli/policyfile/reports/table_printer.rb +57 -0
- data/lib/chef-cli/policyfile/reports/upload.rb +70 -0
- data/lib/chef-cli/policyfile/solution_dependencies.rb +311 -0
- data/lib/chef-cli/policyfile/source_uri.rb +57 -0
- data/lib/chef-cli/policyfile/storage_config.rb +112 -0
- data/lib/chef-cli/policyfile/undo_record.rb +139 -0
- data/lib/chef-cli/policyfile/undo_stack.rb +128 -0
- data/lib/chef-cli/policyfile/uploader.rb +222 -0
- data/lib/chef-cli/policyfile_compiler.rb +528 -0
- data/lib/chef-cli/policyfile_lock.rb +581 -0
- data/lib/chef-cli/policyfile_services/clean_policies.rb +95 -0
- data/lib/chef-cli/policyfile_services/clean_policy_cookbooks.rb +123 -0
- data/lib/chef-cli/policyfile_services/export_repo.rb +419 -0
- data/lib/chef-cli/policyfile_services/install.rb +167 -0
- data/lib/chef-cli/policyfile_services/push.rb +112 -0
- data/lib/chef-cli/policyfile_services/push_archive.rb +164 -0
- data/lib/chef-cli/policyfile_services/rm_policy.rb +141 -0
- data/lib/chef-cli/policyfile_services/rm_policy_group.rb +85 -0
- data/lib/chef-cli/policyfile_services/show_policy.rb +234 -0
- data/lib/chef-cli/policyfile_services/undelete.rb +108 -0
- data/lib/chef-cli/policyfile_services/update_attributes.rb +110 -0
- data/lib/chef-cli/service_exception_inspectors.rb +24 -0
- data/lib/chef-cli/service_exception_inspectors/base.rb +39 -0
- data/lib/chef-cli/service_exception_inspectors/http.rb +119 -0
- data/lib/chef-cli/service_exceptions.rb +142 -0
- data/lib/chef-cli/shell_out.rb +36 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/Berksfile +3 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/README.md +146 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/kitchen.yml +21 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +8 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/chefignore +110 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/cookbook_readmes/README.md +66 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/delivery-config.json +17 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/delivery-project.toml +34 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/gitignore +22 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/README.md +20 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +6 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/policyfiles/README.md +24 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/spec_helper.rb +2 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
- data/lib/chef-cli/skeletons/code_generator/metadata.rb +8 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/attribute.rb +11 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/build_cookbook.rb +175 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/cookbook.rb +167 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/cookbook_file.rb +23 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/helpers.rb +19 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/policyfile.rb +7 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/recipe.rb +50 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/repo.rb +71 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/resource.rb +12 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/template.rb +31 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/CHANGELOG.md.erb +11 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/README.md.erb +4 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/attribute.rb.erb +0 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +9 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/helpers.rb.erb +39 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +16 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen.yml.erb +38 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_dokken.yml.erb +36 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +32 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/metadata.rb.erb +20 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/recipe_spec.rb.erb +29 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/resource.rb.erb +1 -0
- data/lib/chef-cli/skeletons/code_generator/templates/default/template.erb +0 -0
- data/lib/chef-cli/ui.rb +57 -0
- data/lib/chef-cli/version.rb +20 -0
- data/lib/kitchen/provisioner/policyfile_zero.rb +195 -0
- data/spec/shared/a_file_generator.rb +125 -0
- data/spec/shared/a_generated_file.rb +12 -0
- data/spec/shared/command_with_ui_object.rb +11 -0
- data/spec/shared/custom_generator_cookbook.rb +136 -0
- data/spec/shared/fixture_cookbook_checksums.rb +46 -0
- data/spec/shared/setup_git_committer_config.rb +54 -0
- data/spec/shared/setup_git_cookbooks.rb +53 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/test_helpers.rb +84 -0
- data/spec/unit/chef_runner_spec.rb +139 -0
- data/spec/unit/chef_server_api_multi_spec.rb +120 -0
- data/spec/unit/cli_spec.rb +375 -0
- data/spec/unit/command/base_spec.rb +195 -0
- data/spec/unit/command/clean_policy_cookbooks_spec.rb +180 -0
- data/spec/unit/command/clean_policy_revisions_spec.rb +180 -0
- data/spec/unit/command/delete_policy_group_spec.rb +206 -0
- data/spec/unit/command/delete_policy_spec.rb +206 -0
- data/spec/unit/command/diff_spec.rb +311 -0
- data/spec/unit/command/env_spec.rb +86 -0
- data/spec/unit/command/exec_spec.rb +178 -0
- data/spec/unit/command/export_spec.rb +199 -0
- data/spec/unit/command/generate_spec.rb +142 -0
- data/spec/unit/command/generator_commands/attribute_spec.rb +31 -0
- data/spec/unit/command/generator_commands/base_spec.rb +180 -0
- data/spec/unit/command/generator_commands/build_cookbook_spec.rb +377 -0
- data/spec/unit/command/generator_commands/chef_exts/generator_desc_resource_spec.rb +77 -0
- data/spec/unit/command/generator_commands/chef_exts/recipe_dsl_ext_spec.rb +111 -0
- data/spec/unit/command/generator_commands/cookbook_file_spec.rb +31 -0
- data/spec/unit/command/generator_commands/cookbook_spec.rb +769 -0
- data/spec/unit/command/generator_commands/generator_generator_spec.rb +227 -0
- data/spec/unit/command/generator_commands/helpers_spec.rb +31 -0
- data/spec/unit/command/generator_commands/policyfile_spec.rb +223 -0
- data/spec/unit/command/generator_commands/recipe_spec.rb +37 -0
- data/spec/unit/command/generator_commands/repo_spec.rb +374 -0
- data/spec/unit/command/generator_commands/resource_spec.rb +31 -0
- data/spec/unit/command/generator_commands/template_spec.rb +31 -0
- data/spec/unit/command/install_spec.rb +179 -0
- data/spec/unit/command/push_archive_spec.rb +153 -0
- data/spec/unit/command/push_spec.rb +198 -0
- data/spec/unit/command/shell_init_spec.rb +339 -0
- data/spec/unit/command/show_policy_spec.rb +234 -0
- data/spec/unit/command/undelete_spec.rb +244 -0
- data/spec/unit/command/update_spec.rb +283 -0
- data/spec/unit/command/verify_spec.rb +341 -0
- data/spec/unit/commands_map_spec.rb +57 -0
- data/spec/unit/component_test_spec.rb +128 -0
- data/spec/unit/configurable_spec.rb +68 -0
- data/spec/unit/cookbook_metadata_spec.rb +96 -0
- data/spec/unit/cookbook_profiler/git_spec.rb +176 -0
- data/spec/unit/cookbook_profiler/identifiers_spec.rb +81 -0
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -0
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -0
- data/spec/unit/fixtures/command/cli_test_command.rb +26 -0
- data/spec/unit/fixtures/command/explicit_path_example.rb +7 -0
- data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -0
- data/spec/unit/fixtures/configurable/test_configurable.rb +10 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/kitchen.yml +16 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -0
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -0
- data/spec/unit/fixtures/cookbooks_api/chef_server_universe.json +56 -0
- data/spec/unit/fixtures/cookbooks_api/pruned_chef_server_universe.json +30 -0
- data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1322 -0
- data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -0
- data/spec/unit/fixtures/cookbooks_api/universe.json +1 -0
- data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +33 -0
- data/spec/unit/fixtures/dev_cookbooks/README.md +16 -0
- data/spec/unit/fixtures/dev_cookbooks/bar-cookbook.gitbundle +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/embedded/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_apps/embedded/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/apps/berkshelf/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/apps/test-kitchen/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/missing_component/embedded/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/bin/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef-dk/.keep +0 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -0
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/bin/.keep +0 -0
- data/spec/unit/fixtures/example_app/Policyfile.rb +0 -0
- data/spec/unit/fixtures/example_cookbook/.gitignore +17 -0
- data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -0
- data/spec/unit/fixtures/example_cookbook/Berksfile +3 -0
- data/spec/unit/fixtures/example_cookbook/README.md +4 -0
- data/spec/unit/fixtures/example_cookbook/chefignore +96 -0
- data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -0
- data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -0
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -0
- data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -0
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/extra/extra_file.txt +0 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -0
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -0
- data/spec/unit/generator_spec.rb +119 -0
- data/spec/unit/pager_spec.rb +117 -0
- data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -0
- data/spec/unit/policyfile/attribute_merge_checker_spec.rb +80 -0
- data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -0
- data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +55 -0
- data/spec/unit/policyfile/chef_server_lock_fetcher_spec.rb +161 -0
- data/spec/unit/policyfile/community_cookbook_source_spec.rb +83 -0
- data/spec/unit/policyfile/comparison_base_spec.rb +340 -0
- data/spec/unit/policyfile/cookbook_location_specification_spec.rb +347 -0
- data/spec/unit/policyfile/cookbook_locks_spec.rb +527 -0
- data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +129 -0
- data/spec/unit/policyfile/differ_spec.rb +686 -0
- data/spec/unit/policyfile/git_lock_fetcher_spec.rb +155 -0
- data/spec/unit/policyfile/included_policies_cookbook_source_spec.rb +242 -0
- data/spec/unit/policyfile/lister_spec.rb +268 -0
- data/spec/unit/policyfile/local_lock_fetcher_spec.rb +199 -0
- data/spec/unit/policyfile/lock_applier_spec.rb +100 -0
- data/spec/unit/policyfile/lock_fetcher_mixin_spec.rb +60 -0
- data/spec/unit/policyfile/null_cookbook_source_spec.rb +34 -0
- data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -0
- data/spec/unit/policyfile/remote_lock_fetcher_spec.rb +129 -0
- data/spec/unit/policyfile/reports/install_spec.rb +114 -0
- data/spec/unit/policyfile/reports/upload_spec.rb +94 -0
- data/spec/unit/policyfile/solution_dependencies_spec.rb +170 -0
- data/spec/unit/policyfile/source_uri_spec.rb +36 -0
- data/spec/unit/policyfile/storage_config_spec.rb +180 -0
- data/spec/unit/policyfile/undo_record_spec.rb +258 -0
- data/spec/unit/policyfile/undo_stack_spec.rb +265 -0
- data/spec/unit/policyfile/uploader_spec.rb +410 -0
- data/spec/unit/policyfile_demands_spec.rb +1197 -0
- data/spec/unit/policyfile_evaluation_spec.rb +628 -0
- data/spec/unit/policyfile_includes_dsl_spec.rb +220 -0
- data/spec/unit/policyfile_includes_spec.rb +720 -0
- data/spec/unit/policyfile_install_with_includes_spec.rb +232 -0
- data/spec/unit/policyfile_lock_build_spec.rb +1065 -0
- data/spec/unit/policyfile_lock_install_spec.rb +137 -0
- data/spec/unit/policyfile_lock_serialization_spec.rb +424 -0
- data/spec/unit/policyfile_lock_validation_spec.rb +608 -0
- data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -0
- data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +272 -0
- data/spec/unit/policyfile_services/export_repo_spec.rb +473 -0
- data/spec/unit/policyfile_services/install_spec.rb +209 -0
- data/spec/unit/policyfile_services/push_archive_spec.rb +359 -0
- data/spec/unit/policyfile_services/push_spec.rb +249 -0
- data/spec/unit/policyfile_services/rm_policy_group_spec.rb +237 -0
- data/spec/unit/policyfile_services/rm_policy_spec.rb +263 -0
- data/spec/unit/policyfile_services/show_policy_spec.rb +887 -0
- data/spec/unit/policyfile_services/undelete_spec.rb +302 -0
- data/spec/unit/policyfile_services/update_attributes_spec.rb +229 -0
- data/spec/unit/policyfile_services/update_spec.rb +162 -0
- data/spec/unit/service_exception_inspectors/base_spec.rb +41 -0
- data/spec/unit/service_exception_inspectors/http_spec.rb +138 -0
- data/spec/unit/shell_out_spec.rb +34 -0
- 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
|