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,46 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "chef-cli/helpers"
|
|
19
|
+
|
|
20
|
+
RSpec.shared_context "fixture cookbooks checksums" do
|
|
21
|
+
|
|
22
|
+
def id_to_dotted(sha1_id)
|
|
23
|
+
major = sha1_id[0...14]
|
|
24
|
+
minor = sha1_id[14...28]
|
|
25
|
+
patch = sha1_id[28..40]
|
|
26
|
+
decimal_integers = [major, minor, patch].map { |hex| hex.to_i(16) }
|
|
27
|
+
decimal_integers.join(".")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
let(:cookbook_foo_cksum) { "f24326bbf81d67fcab6a5615c75092d1c6da81cc" }
|
|
31
|
+
|
|
32
|
+
let(:cookbook_foo_cksum_dotted) { id_to_dotted(cookbook_foo_cksum) }
|
|
33
|
+
|
|
34
|
+
let(:cookbook_bar_cksum) { "4c538def500b75e744a3af05df66afd04dc3b3c5" }
|
|
35
|
+
|
|
36
|
+
let(:cookbook_bar_cksum_dotted) { id_to_dotted(cookbook_bar_cksum) }
|
|
37
|
+
|
|
38
|
+
let(:cookbook_baz_cksum) { "5c9063efbc5b5d8acc37024d7383f7dd010ae728" }
|
|
39
|
+
|
|
40
|
+
let(:cookbook_baz_cksum_dotted) { id_to_dotted(cookbook_baz_cksum) }
|
|
41
|
+
|
|
42
|
+
let(:cookbook_dep_of_bar_cksum) { "a4a6a5e4c6d95a580d291f6415d55b010669feac" }
|
|
43
|
+
|
|
44
|
+
let(:cookbook_dep_of_bar_cksum_dotted) { id_to_dotted(cookbook_dep_of_bar_cksum) }
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2016 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 "mixlib/shellout"
|
|
19
|
+
|
|
20
|
+
RSpec.shared_context("setup_git_committer_config") do
|
|
21
|
+
|
|
22
|
+
def _have_git_config_key?(key)
|
|
23
|
+
cmd = Mixlib::ShellOut.new("git config --global #{key}", returns: [0, 1])
|
|
24
|
+
cmd.run_command
|
|
25
|
+
cmd.error!
|
|
26
|
+
cmd.status.success?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def _git_config(subcommand_args)
|
|
30
|
+
cmd = Mixlib::ShellOut.new("git config --global #{subcommand_args}")
|
|
31
|
+
cmd.run_command
|
|
32
|
+
cmd.error!
|
|
33
|
+
cmd
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
before(:all) do
|
|
37
|
+
unless _have_git_config_key?("user.name")
|
|
38
|
+
_git_config("user.name \"chefcli_rspec_user\"")
|
|
39
|
+
end
|
|
40
|
+
unless _have_git_config_key?("user.email")
|
|
41
|
+
_git_config("user.email \"chefcli_rspec_user@example.com\"")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
after(:all) do
|
|
46
|
+
if _git_config("user.name").stdout.include?("chefcli_rspec_user")
|
|
47
|
+
_git_config("--unset user.name")
|
|
48
|
+
end
|
|
49
|
+
if _git_config("user.email").stdout.include?("chefcli_rspec_user")
|
|
50
|
+
_git_config("--unset user.email")
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "chef-cli/helpers"
|
|
19
|
+
|
|
20
|
+
RSpec.shared_context "setup git cookbooks" do
|
|
21
|
+
|
|
22
|
+
include ChefCLI::Helpers
|
|
23
|
+
|
|
24
|
+
let(:cookbook_pristine_path) do
|
|
25
|
+
File.expand_path("spec/unit/fixtures/dev_cookbooks/bar-cookbook.gitbundle", project_root)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
let(:cookbook_path) { File.join(tempdir, "bar") }
|
|
29
|
+
|
|
30
|
+
let(:current_rev) { "dfc68070c47cbf4267be14ea87f80680cb5dafb3" }
|
|
31
|
+
|
|
32
|
+
before do
|
|
33
|
+
reset_tempdir
|
|
34
|
+
system_command("git clone #{cookbook_pristine_path} #{cookbook_path}").error!
|
|
35
|
+
system_command("git reset --hard #{current_rev}", cwd: cookbook_path).error!
|
|
36
|
+
system_command("git remote remove origin", cwd: cookbook_path).error!
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
after do
|
|
40
|
+
clear_tempdir
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
RSpec.shared_context "setup git cookbook remote" do
|
|
46
|
+
let(:remote_url) { "file://#{tempdir}/bar-cookbook.git" }
|
|
47
|
+
|
|
48
|
+
before do
|
|
49
|
+
system_command("git init --bare #{tempdir}/bar-cookbook.git").error!
|
|
50
|
+
system_command("git remote add origin #{remote_url}", cwd: cookbook_path).error!
|
|
51
|
+
system_command("git push -u origin master", cwd: cookbook_path).error!
|
|
52
|
+
end
|
|
53
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "rubygems"
|
|
19
|
+
require "rspec/mocks"
|
|
20
|
+
require "test_helpers"
|
|
21
|
+
|
|
22
|
+
# needed since we stub it for every test
|
|
23
|
+
require "chef/workstation_config_loader"
|
|
24
|
+
require "chef/config"
|
|
25
|
+
|
|
26
|
+
RSpec.configure do |c|
|
|
27
|
+
running_on_windows = (RUBY_PLATFORM =~ /mswin|mingw|windows/)
|
|
28
|
+
|
|
29
|
+
c.include ChefCLI
|
|
30
|
+
c.include TestHelpers
|
|
31
|
+
|
|
32
|
+
# Avoid loading config.rb/knife.rb unintentionally
|
|
33
|
+
c.before(:each) do
|
|
34
|
+
Chef::Config.reset
|
|
35
|
+
Chef::Config.treat_deprecation_warnings_as_errors(true)
|
|
36
|
+
allow_any_instance_of(Chef::WorkstationConfigLoader).to receive(:load)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
c.after(:all) { clear_tempdir }
|
|
40
|
+
|
|
41
|
+
c.filter_run focus: true
|
|
42
|
+
c.run_all_when_everything_filtered = true
|
|
43
|
+
# Tests that randomly fail, but may have value.
|
|
44
|
+
c.filter_run_excluding volatile: true
|
|
45
|
+
c.filter_run_excluding skip_on_windows: true if running_on_windows
|
|
46
|
+
|
|
47
|
+
c.mock_with(:rspec) do |mocks|
|
|
48
|
+
mocks.verify_partial_doubles = true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "fileutils"
|
|
19
|
+
require "tmpdir"
|
|
20
|
+
|
|
21
|
+
module TestHelpers
|
|
22
|
+
|
|
23
|
+
# A globally accessible place where we can put some state to verify that a
|
|
24
|
+
# test performed a certain operation.
|
|
25
|
+
def self.test_state
|
|
26
|
+
@test_state ||= {}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.reset!
|
|
30
|
+
@test_state = nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_state
|
|
34
|
+
TestHelpers.test_state
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def fixtures_path
|
|
38
|
+
File.expand_path(File.dirname(__FILE__) + "/unit/fixtures/")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def project_root
|
|
42
|
+
File.expand_path("../..", __FILE__)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def reset_tempdir
|
|
46
|
+
clear_tempdir
|
|
47
|
+
FileUtils.mkdir_p(tempdir)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def clear_tempdir
|
|
51
|
+
FileUtils.rm_rf(tempdir)
|
|
52
|
+
@tmpdir = nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def tempdir
|
|
56
|
+
@tmpdir ||= Dir.mktmpdir("chef-cli")
|
|
57
|
+
File.realpath(@tmpdir)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class TestUI
|
|
61
|
+
|
|
62
|
+
attr_reader :output_stream
|
|
63
|
+
|
|
64
|
+
def initialize
|
|
65
|
+
@output_stream = StringIO.new
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def err(message)
|
|
69
|
+
@output_stream.puts(message)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def msg(message)
|
|
73
|
+
@output_stream.puts(message)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def print(message)
|
|
77
|
+
@output_stream.print(message)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def output
|
|
81
|
+
@output_stream.string
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-2018 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 "spec_helper"
|
|
19
|
+
require "stringio"
|
|
20
|
+
require "chef-cli/chef_runner"
|
|
21
|
+
|
|
22
|
+
describe ChefCLI::ChefRunner do
|
|
23
|
+
|
|
24
|
+
let(:stdout_io) { StringIO.new }
|
|
25
|
+
|
|
26
|
+
let(:stderr_io) { StringIO.new }
|
|
27
|
+
|
|
28
|
+
let(:default_cookbook_path) do
|
|
29
|
+
File.expand_path("chef-runner-cookbooks", fixtures_path)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
let(:run_list) { [ "recipe[test_cookbook::recipe_one]", "recipe[test_cookbook::recipe_two]" ] }
|
|
33
|
+
|
|
34
|
+
subject(:chef_runner) do
|
|
35
|
+
r = ChefCLI::ChefRunner.new(default_cookbook_path, run_list)
|
|
36
|
+
allow(r).to receive(:stdout).and_return(stdout_io)
|
|
37
|
+
allow(r).to receive(:stderr).and_return(stderr_io)
|
|
38
|
+
r
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "sets up Chef::Config" do
|
|
42
|
+
chef_runner.configure
|
|
43
|
+
expect(Chef::Config.solo_legacy_mode).to be true
|
|
44
|
+
expect(Chef::Config.cookbook_path).to eq(default_cookbook_path)
|
|
45
|
+
expect(Chef::Config.color).to be true
|
|
46
|
+
expect(Chef::Config.diff_disabled).to be true
|
|
47
|
+
expect(Chef::Config.file_staging_uses_destdir).to be true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "disables atomic file updates on Windows" do
|
|
51
|
+
allow(Chef::Platform).to receive(:windows?) { true }
|
|
52
|
+
chef_runner.configure
|
|
53
|
+
expect(Chef::Config.file_atomic_update).to be false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "configures a formatter for the chef run" do
|
|
57
|
+
expect(chef_runner.event_dispatcher).to be_a(Chef::EventDispatch::Dispatcher)
|
|
58
|
+
|
|
59
|
+
subscribers = chef_runner.event_dispatcher.subscribers
|
|
60
|
+
|
|
61
|
+
expect(subscribers.size).to eq(1)
|
|
62
|
+
expect(subscribers.first).to be_a(ChefCLI::QuieterDocFormatter)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "extends the recipe DSL with ChefCLI's extensions" do
|
|
66
|
+
expect(Chef::DSL::Recipe.included_modules).to include(ChefCLI::RecipeDSLExt)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "detects the platform with ohai" do
|
|
70
|
+
expect(chef_runner.ohai).to be_a(Ohai::System)
|
|
71
|
+
expect(chef_runner.ohai.data["platform"]).to_not be_nil
|
|
72
|
+
expect(chef_runner.ohai.data["platform_version"]).to_not be_nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "sets up chef policy" do
|
|
76
|
+
chef_runner.configure
|
|
77
|
+
expect(chef_runner.policy.node.run_list).to eq(run_list)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "runs a chef converge" do
|
|
81
|
+
chef_runner.converge
|
|
82
|
+
expect(test_state[:loaded_recipes]).to eq(%w{recipe_one recipe_two})
|
|
83
|
+
expect(test_state[:converged_recipes]).to eq(%w{recipe_one recipe_two})
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "when policyfile options are set in the workstation config" do
|
|
87
|
+
|
|
88
|
+
before do
|
|
89
|
+
Chef::Config.use_policyfile true
|
|
90
|
+
Chef::Config.policy_name "workstation"
|
|
91
|
+
Chef::Config.policy_group "test"
|
|
92
|
+
|
|
93
|
+
# chef-client ignores `deployment_group` unless
|
|
94
|
+
# `policy_document_native_api` is set to false
|
|
95
|
+
Chef::Config.deployment_group "workstation-test"
|
|
96
|
+
Chef::Config.policy_document_native_api false
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "unsets the options" do
|
|
100
|
+
chef_runner.configure
|
|
101
|
+
|
|
102
|
+
expect(Chef::Config.use_policyfile).to be(false)
|
|
103
|
+
expect(Chef::Config.policy_name).to be_nil
|
|
104
|
+
expect(Chef::Config.policy_group).to be_nil
|
|
105
|
+
expect(Chef::Config.deployment_group).to be_nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "converges successfully" do
|
|
109
|
+
expect { chef_runner.converge }.to_not raise_error
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context "when the embedded chef run fails" do
|
|
115
|
+
|
|
116
|
+
let(:embedded_runner) { instance_double("Chef::Runner") }
|
|
117
|
+
|
|
118
|
+
before do
|
|
119
|
+
allow(Chef::Runner).to receive(:new).and_return(embedded_runner)
|
|
120
|
+
allow(embedded_runner).to receive(:converge).and_raise("oops")
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "wraps the exception in a ChefConvergeError" do
|
|
124
|
+
expect { chef_runner.converge }.to raise_error(ChefCLI::ChefConvergeError)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context "when cookbook_path is relative" do
|
|
130
|
+
|
|
131
|
+
let(:default_cookbook_path) { "~/heres_some_cookbooks" }
|
|
132
|
+
|
|
133
|
+
it "expands the path" do
|
|
134
|
+
expect(chef_runner.cookbook_path).to eq(File.expand_path(default_cookbook_path))
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2017 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 "spec_helper"
|
|
19
|
+
require "chef-cli/chef_server_api_multi"
|
|
20
|
+
|
|
21
|
+
describe ChefCLI::ChefServerAPIMulti do
|
|
22
|
+
|
|
23
|
+
let(:url) { "https://chef.example/organizations/myorg" }
|
|
24
|
+
|
|
25
|
+
let(:opts) do
|
|
26
|
+
{
|
|
27
|
+
signing_key_filename: "/path/to/key.pem",
|
|
28
|
+
client_name: "example-user",
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
let(:expected_server_api_opts) do
|
|
33
|
+
{
|
|
34
|
+
signing_key_filename: "/path/to/key.pem",
|
|
35
|
+
client_name: "example-user",
|
|
36
|
+
keepalives: true,
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
let(:chef_server_api) { instance_double("Chef::ServerAPI") }
|
|
41
|
+
|
|
42
|
+
subject(:server_api_multi) { described_class.new(url, opts) }
|
|
43
|
+
|
|
44
|
+
before do
|
|
45
|
+
# clean out thread local storage or else `chef_server_api` instance double
|
|
46
|
+
# will get re-used across test examples and rspec will complain:
|
|
47
|
+
Thread.current[:chef_server_api_multi] = nil
|
|
48
|
+
allow(Chef::ServerAPI).to receive(:new).with(url, expected_server_api_opts).and_return(chef_server_api)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "has a url" do
|
|
52
|
+
expect(server_api_multi.url).to eq(url)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "has an options hash for Chef::ServerAPI, with `keepalives: true` added" do
|
|
56
|
+
expect(server_api_multi.opts).to eq(expected_server_api_opts)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "creates a thread-local Chef::ServerAPI object for requests" do
|
|
60
|
+
server_api_multi.client_for_thread # force `||=` to run
|
|
61
|
+
expect(server_api_multi.client_for_thread).to eq(Thread.current[:chef_server_api_multi])
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe "when keepalives are disabled" do
|
|
65
|
+
|
|
66
|
+
let(:opts) do
|
|
67
|
+
{
|
|
68
|
+
signing_key_filename: "/path/to/key.pem",
|
|
69
|
+
client_name: "example-user",
|
|
70
|
+
keepalives: false,
|
|
71
|
+
}
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it "does not override disabling them" do
|
|
75
|
+
expect(server_api_multi.opts[:keepalives]).to be(false)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe "delegating request methods to thread-local ServerAPI object" do
|
|
81
|
+
|
|
82
|
+
it "delegates #head" do
|
|
83
|
+
expect(chef_server_api).to receive(:head).with("/foo")
|
|
84
|
+
server_api_multi.head("/foo")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "delegates #get" do
|
|
88
|
+
expect(chef_server_api).to receive(:get).with("/foo")
|
|
89
|
+
server_api_multi.get("/foo")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "delegates #put" do
|
|
93
|
+
expect(chef_server_api).to receive(:put).with("/foo", "data")
|
|
94
|
+
server_api_multi.put("/foo", "data")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "delegates #post" do
|
|
98
|
+
expect(chef_server_api).to receive(:post).with("/foo", "data")
|
|
99
|
+
server_api_multi.post("/foo", "data")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "delegates #delete" do
|
|
103
|
+
expect(chef_server_api).to receive(:delete).with("/foo")
|
|
104
|
+
server_api_multi.delete("/foo")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "delegates #streaming_request" do
|
|
108
|
+
expect(chef_server_api).to receive(:streaming_request).with("/foo")
|
|
109
|
+
server_api_multi.streaming_request("/foo")
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "passes a block argument to #streaming_request" do
|
|
113
|
+
expect(chef_server_api).to receive(:streaming_request).with("/foo").and_yield
|
|
114
|
+
x = 0
|
|
115
|
+
server_api_multi.streaming_request("/foo") { x = 5 }
|
|
116
|
+
expect(x).to eq(5)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
end
|