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,155 @@
|
|
|
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 "../configurable"
|
|
21
|
+
require_relative "../policyfile_services/undelete"
|
|
22
|
+
require_relative "../dist"
|
|
23
|
+
|
|
24
|
+
module ChefCLI
|
|
25
|
+
module Command
|
|
26
|
+
|
|
27
|
+
class Undelete < Base
|
|
28
|
+
|
|
29
|
+
banner(<<~BANNER)
|
|
30
|
+
Usage: #{ChefCLI::Dist::EXEC} undelete [--list | --id ID] [options]
|
|
31
|
+
|
|
32
|
+
`#{ChefCLI::Dist::EXEC} undelete` helps you recover quickly if you've deleted a policy or policy
|
|
33
|
+
group in error. When run with no arguements, it lists the available undo
|
|
34
|
+
operations. To undo the last delete operation, use `chef undelete --last`.
|
|
35
|
+
|
|
36
|
+
CAVEATS:
|
|
37
|
+
`#{ChefCLI::Dist::EXEC} undelete` doesn't detect conflicts. If a deleted item has been recreated,
|
|
38
|
+
running `chef undelete` will overwrite it.
|
|
39
|
+
|
|
40
|
+
Undo information does not include cookbooks that might be referenced by
|
|
41
|
+
policies. If you have cleaned the policy cookbooks after the delete operation
|
|
42
|
+
you want to reverse, `chef undelete` may not be able to fully restore the
|
|
43
|
+
previous state.
|
|
44
|
+
|
|
45
|
+
The delete commands also do not store access control data, so you may have to
|
|
46
|
+
manually reapply any ACL customizations you have made.
|
|
47
|
+
|
|
48
|
+
See our detailed README for more information:
|
|
49
|
+
|
|
50
|
+
https://docs.chef.io/policyfile.html
|
|
51
|
+
|
|
52
|
+
Options:
|
|
53
|
+
|
|
54
|
+
BANNER
|
|
55
|
+
|
|
56
|
+
option :undo_last,
|
|
57
|
+
short: "-l",
|
|
58
|
+
long: "--last",
|
|
59
|
+
description: "Undo the most recent delete operation"
|
|
60
|
+
|
|
61
|
+
option :undo_record_id,
|
|
62
|
+
short: "-i ID",
|
|
63
|
+
long: "--id ID",
|
|
64
|
+
description: "Undo the delete operation with the given ID"
|
|
65
|
+
|
|
66
|
+
option :config_file,
|
|
67
|
+
short: "-c CONFIG_FILE",
|
|
68
|
+
long: "--config CONFIG_FILE",
|
|
69
|
+
description: "Path to configuration file"
|
|
70
|
+
|
|
71
|
+
option :debug,
|
|
72
|
+
short: "-D",
|
|
73
|
+
long: "--debug",
|
|
74
|
+
description: "Enable stacktraces and other debug output",
|
|
75
|
+
default: false
|
|
76
|
+
|
|
77
|
+
include Configurable
|
|
78
|
+
|
|
79
|
+
attr_accessor :ui
|
|
80
|
+
|
|
81
|
+
attr_reader :undo_record_id
|
|
82
|
+
|
|
83
|
+
def initialize(*args)
|
|
84
|
+
super
|
|
85
|
+
@list_undo_records = false
|
|
86
|
+
@undo_record_id = nil
|
|
87
|
+
@ui = UI.new
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def run(params)
|
|
91
|
+
return 1 unless apply_params!(params)
|
|
92
|
+
if list_undo_records?
|
|
93
|
+
undelete_service.list
|
|
94
|
+
else
|
|
95
|
+
undelete_service.run
|
|
96
|
+
end
|
|
97
|
+
0
|
|
98
|
+
rescue PolicyfileServiceError => e
|
|
99
|
+
handle_error(e)
|
|
100
|
+
1
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def undelete_service
|
|
104
|
+
@undelete_service ||=
|
|
105
|
+
PolicyfileServices::Undelete.new(config: chef_config,
|
|
106
|
+
ui: ui,
|
|
107
|
+
undo_record_id: undo_record_id)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def debug?
|
|
111
|
+
!!config[:debug]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def list_undo_records?
|
|
115
|
+
@list_undo_records
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def handle_error(error)
|
|
119
|
+
ui.err("Error: #{error.message}")
|
|
120
|
+
if error.respond_to?(:reason)
|
|
121
|
+
ui.err("Reason: #{error.reason}")
|
|
122
|
+
ui.err("")
|
|
123
|
+
ui.err(error.extended_error_info) if debug?
|
|
124
|
+
ui.err(error.cause.backtrace.join("\n")) if debug?
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def apply_params!(params)
|
|
129
|
+
remaining_args = parse_options(params)
|
|
130
|
+
|
|
131
|
+
if !remaining_args.empty?
|
|
132
|
+
ui.err("Too many arguments")
|
|
133
|
+
ui.err("")
|
|
134
|
+
ui.err(opt_parser)
|
|
135
|
+
false
|
|
136
|
+
elsif config[:undo_record_id].nil? && config[:undo_last].nil?
|
|
137
|
+
@list_undo_records = true
|
|
138
|
+
true
|
|
139
|
+
elsif config[:undo_record_id] && config[:undo_last]
|
|
140
|
+
ui.err("Error: options --last and --id cannot both be given.")
|
|
141
|
+
ui.err("")
|
|
142
|
+
ui.err(opt_parser)
|
|
143
|
+
false
|
|
144
|
+
elsif config[:undo_record_id]
|
|
145
|
+
@undo_record_id = config[:undo_record_id]
|
|
146
|
+
true
|
|
147
|
+
elsif config[:undo_last]
|
|
148
|
+
@undo_record_id = nil
|
|
149
|
+
true
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-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 "../policyfile_services/install"
|
|
21
|
+
require_relative "../policyfile_services/update_attributes"
|
|
22
|
+
require_relative "../configurable"
|
|
23
|
+
require_relative "../dist"
|
|
24
|
+
|
|
25
|
+
module ChefCLI
|
|
26
|
+
module Command
|
|
27
|
+
|
|
28
|
+
class Update < Base
|
|
29
|
+
|
|
30
|
+
include Configurable
|
|
31
|
+
|
|
32
|
+
banner(<<~BANNER)
|
|
33
|
+
Usage: #{ChefCLI::Dist::EXEC} update [ POLICY_FILE ] [options] [cookbook_1] [...]
|
|
34
|
+
|
|
35
|
+
`#{ChefCLI::Dist::EXEC} update` reads your `Policyfile.rb`, applies any changes, re-solves the
|
|
36
|
+
dependencies and emits an updated `Policyfile.lock.json`. The new locked policy
|
|
37
|
+
will reflect any changes to the `run_list` and pull in any cookbook updates
|
|
38
|
+
that are compatible with the version constraints stated in your `Policyfile.rb`.
|
|
39
|
+
|
|
40
|
+
Individual dependent cookbooks (and their dependencies) may be updated by
|
|
41
|
+
passing their names after the POLICY_FILE. The POLICY_FILE parameter is
|
|
42
|
+
mandatory if you want to update individual cookbooks.
|
|
43
|
+
|
|
44
|
+
See our detailed README for more information:
|
|
45
|
+
|
|
46
|
+
https://docs.chef.io/policyfile.html
|
|
47
|
+
|
|
48
|
+
Options:
|
|
49
|
+
|
|
50
|
+
BANNER
|
|
51
|
+
|
|
52
|
+
option :config_file,
|
|
53
|
+
short: "-c CONFIG_FILE",
|
|
54
|
+
long: "--config CONFIG_FILE",
|
|
55
|
+
description: "Path to configuration file"
|
|
56
|
+
|
|
57
|
+
option :debug,
|
|
58
|
+
short: "-D",
|
|
59
|
+
long: "--debug",
|
|
60
|
+
description: "Enable stacktraces and other debug output",
|
|
61
|
+
default: false,
|
|
62
|
+
boolean: true
|
|
63
|
+
|
|
64
|
+
option :update_attributes_only,
|
|
65
|
+
short: "-a",
|
|
66
|
+
long: "--attributes",
|
|
67
|
+
description: "Only update attributes (not cookbooks)",
|
|
68
|
+
default: false,
|
|
69
|
+
boolean: true
|
|
70
|
+
|
|
71
|
+
option :exclude_deps,
|
|
72
|
+
long: "--exclude-deps",
|
|
73
|
+
description: "Only update cookbooks explicitely mentioned on the command line",
|
|
74
|
+
boolean: true,
|
|
75
|
+
default: false
|
|
76
|
+
|
|
77
|
+
attr_reader :policyfile_relative_path
|
|
78
|
+
|
|
79
|
+
attr_accessor :ui
|
|
80
|
+
|
|
81
|
+
def initialize(*args)
|
|
82
|
+
super
|
|
83
|
+
@ui = UI.new
|
|
84
|
+
|
|
85
|
+
@policyfile_relative_path = nil
|
|
86
|
+
@installer = nil
|
|
87
|
+
@attributes_updater = nil
|
|
88
|
+
@cookbooks_to_update = []
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def run(params = [])
|
|
92
|
+
return 1 unless apply_params!(params)
|
|
93
|
+
attributes_updater.run
|
|
94
|
+
installer.run(@cookbooks_to_update, config[:exclude_deps]) unless update_attributes_only?
|
|
95
|
+
0
|
|
96
|
+
rescue PolicyfileServiceError => e
|
|
97
|
+
handle_error(e)
|
|
98
|
+
1
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def installer
|
|
102
|
+
@installer ||= PolicyfileServices::Install.new(policyfile: policyfile_relative_path, ui: ui, root_dir: Dir.pwd, config: chef_config, overwrite: true)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def attributes_updater
|
|
106
|
+
@attributes_updater ||=
|
|
107
|
+
PolicyfileServices::UpdateAttributes.new(policyfile: policyfile_relative_path, ui: ui, root_dir: Dir.pwd, chef_config: chef_config)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def debug?
|
|
111
|
+
!!config[:debug]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def config_path
|
|
115
|
+
config[:config_file]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def update_attributes_only?
|
|
119
|
+
!!config[:update_attributes_only]
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def handle_error(error)
|
|
123
|
+
ui.err("Error: #{error.message}")
|
|
124
|
+
if error.respond_to?(:reason)
|
|
125
|
+
ui.err("Reason: #{error.reason}")
|
|
126
|
+
ui.err("")
|
|
127
|
+
ui.err(error.extended_error_info) if debug?
|
|
128
|
+
ui.err(error.cause.backtrace.join("\n")) if debug?
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def apply_params!(params)
|
|
133
|
+
remaining_args = parse_options(params)
|
|
134
|
+
@policyfile_relative_path = remaining_args.shift
|
|
135
|
+
@cookbooks_to_update += remaining_args
|
|
136
|
+
true
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014-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 "../exceptions"
|
|
20
|
+
require_relative "../component_test"
|
|
21
|
+
require_relative "../dist"
|
|
22
|
+
|
|
23
|
+
module ChefCLI
|
|
24
|
+
module Command
|
|
25
|
+
class Verify < ChefCLI::Command::Base
|
|
26
|
+
# TODO 2019-07-05 mp - this gets a little odd, because
|
|
27
|
+
# this the commands that we verify here do not ship with
|
|
28
|
+
# the chef-cli component - they're only in Workstation and DK.
|
|
29
|
+
# This should continue to work in an installed Workstation package,
|
|
30
|
+
# but we will probably want to find some way of letting clients (Workstation)
|
|
31
|
+
# override this command so that it can report on all
|
|
32
|
+
# of the components it installs.
|
|
33
|
+
include ChefCLI::Helpers
|
|
34
|
+
|
|
35
|
+
banner "Usage: #{ChefCLI::Dist::EXEC} verify [component, ...] [options]"
|
|
36
|
+
|
|
37
|
+
option :omnibus_dir,
|
|
38
|
+
long: "--omnibus-dir OMNIBUS_DIR",
|
|
39
|
+
description: "Alternate path to omnibus install (used for testing)"
|
|
40
|
+
|
|
41
|
+
option :unit,
|
|
42
|
+
long: "--unit",
|
|
43
|
+
description: "Run bundled app unit tests (only smoke tests run by default)"
|
|
44
|
+
|
|
45
|
+
option :integration,
|
|
46
|
+
long: "--integration",
|
|
47
|
+
description: "Run integration tests. Possibly dangerous, for development systems only"
|
|
48
|
+
|
|
49
|
+
option :verbose,
|
|
50
|
+
long: "--verbose",
|
|
51
|
+
description: "Display all test output, not just failing tests"
|
|
52
|
+
|
|
53
|
+
class << self
|
|
54
|
+
def add_component(name, _delete_me = nil)
|
|
55
|
+
component = ComponentTest.new(name)
|
|
56
|
+
yield component if block_given? # delete this conditional
|
|
57
|
+
component_map[name] = component
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def component(name)
|
|
61
|
+
component_map[name]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def components
|
|
65
|
+
component_map.values
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def component_map
|
|
69
|
+
@component_map ||= {}
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def components
|
|
74
|
+
self.class.components
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
bundle_install_mutex = Mutex.new
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# Components included in Chef Development kit:
|
|
81
|
+
# :base_dir => Relative path of the component w.r.t. omnibus_apps_dir
|
|
82
|
+
# :gem_base_dir => Takes a gem name instead and uses first gem found
|
|
83
|
+
# :test_cmd => Test command to be launched for the component
|
|
84
|
+
#
|
|
85
|
+
add_component "berkshelf" do |c|
|
|
86
|
+
c.gem_base_dir = "berkshelf"
|
|
87
|
+
# For berks the real command to run is "#{embedded_bin("bundle")} exec thor spec:ci"
|
|
88
|
+
# We can't run it right now since graphviz specs are included in the
|
|
89
|
+
# test suite by default. We will be able to switch to that command when/if
|
|
90
|
+
# Graphviz is added to omnibus.
|
|
91
|
+
c.unit_test do
|
|
92
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
93
|
+
sh("#{embedded_bin("bundle")} exec #{embedded_bin("rspec")} --color --format progress spec/unit --tag ~graphviz")
|
|
94
|
+
end
|
|
95
|
+
c.integration_test do
|
|
96
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
97
|
+
sh("#{embedded_bin("bundle")} exec #{embedded_bin("cucumber")} --color --format progress --tags ~@no_run --tags ~@spawn --tags ~@graphviz --strict")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
c.smoke_test do
|
|
101
|
+
tmpdir do |cwd|
|
|
102
|
+
FileUtils.touch(File.join(cwd, "Berksfile"))
|
|
103
|
+
sh("#{bin("berks")} install", cwd: cwd)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
add_component "test-kitchen" do |c|
|
|
109
|
+
c.gem_base_dir = "test-kitchen"
|
|
110
|
+
c.unit_test do
|
|
111
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
112
|
+
sh("#{embedded_bin("bundle")} exec rake unit")
|
|
113
|
+
end
|
|
114
|
+
c.integration_test do
|
|
115
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
116
|
+
sh("#{embedded_bin("bundle")} exec rake features")
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# NOTE: By default, kitchen tries to be helpful and install a driver
|
|
120
|
+
# gem for you. This causes a race condition when running the tests
|
|
121
|
+
# concurrently, because rubygems breaks when there are partially
|
|
122
|
+
# installed gems in the gem repository. Instructing kitchen to create a
|
|
123
|
+
# gemfile instead avoids the gem installation.
|
|
124
|
+
c.smoke_test { run_in_tmpdir("kitchen init --create-gemfile") }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
add_component "tk-policyfile-provisioner" do |c|
|
|
128
|
+
|
|
129
|
+
c.gem_base_dir = "chef-cli"
|
|
130
|
+
|
|
131
|
+
c.smoke_test do
|
|
132
|
+
tmpdir do |cwd|
|
|
133
|
+
File.open(File.join(cwd, "kitchen.yml"), "w+") do |f|
|
|
134
|
+
f.print(<<~KITCHEN_YML)
|
|
135
|
+
---
|
|
136
|
+
driver:
|
|
137
|
+
name: dummy
|
|
138
|
+
network:
|
|
139
|
+
- ["forwarded_port", {guest: 80, host: 8080}]
|
|
140
|
+
|
|
141
|
+
provisioner:
|
|
142
|
+
name: policyfile_zero
|
|
143
|
+
require_chef_omnibus: 12.3.0
|
|
144
|
+
|
|
145
|
+
platforms:
|
|
146
|
+
- name: ubuntu-14.04
|
|
147
|
+
|
|
148
|
+
suites:
|
|
149
|
+
- name: default
|
|
150
|
+
run_list:
|
|
151
|
+
- recipe[aar::default]
|
|
152
|
+
attributes:
|
|
153
|
+
|
|
154
|
+
KITCHEN_YML
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
sh("kitchen list", cwd: cwd)
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
add_component "chef-client" do |c|
|
|
165
|
+
c.gem_base_dir = "chef"
|
|
166
|
+
c.unit_test do
|
|
167
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
168
|
+
sh("#{embedded_bin("bundle")} exec #{embedded_bin("rspec")} -fp -t '~volatile_from_verify' spec/unit")
|
|
169
|
+
end
|
|
170
|
+
c.integration_test do
|
|
171
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
172
|
+
sh("#{embedded_bin("bundle")} exec #{embedded_bin("rspec")} -fp spec/integration spec/functional")
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
c.smoke_test do
|
|
176
|
+
tmpdir do |cwd|
|
|
177
|
+
FileUtils.touch(File.join(cwd, "apply.rb"))
|
|
178
|
+
sh("#{bin("chef-apply")} apply.rb --chef-license 'accept-no-persist'", cwd: cwd)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
add_component "chef-cli" do |c|
|
|
184
|
+
c.gem_base_dir = "chef-cli"
|
|
185
|
+
c.unit_test do
|
|
186
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
187
|
+
sh("#{embedded_bin("bundle")} exec #{embedded_bin("rspec")}")
|
|
188
|
+
end
|
|
189
|
+
c.smoke_test do
|
|
190
|
+
run_in_tmpdir("#{bin("chef")} generate cookbook example")
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
add_component "chef-apply" do |c|
|
|
195
|
+
c.gem_base_dir = "chef-apply"
|
|
196
|
+
# c.unit_test do
|
|
197
|
+
# bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
198
|
+
# sh("#{embedded_bin("bundle")} exec rspec")
|
|
199
|
+
# end
|
|
200
|
+
c.smoke_test { sh("#{bin("chef-run")} -v") }
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
add_component "chefspec" do |c|
|
|
204
|
+
c.gem_base_dir = "chefspec"
|
|
205
|
+
c.unit_test do
|
|
206
|
+
bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
207
|
+
sh("#{embedded_bin("bundle")} exec #{embedded_bin("rake")} unit")
|
|
208
|
+
end
|
|
209
|
+
c.smoke_test do
|
|
210
|
+
tmpdir do |cwd|
|
|
211
|
+
FileUtils.mkdir(File.join(cwd, "spec"))
|
|
212
|
+
with_file(File.join(cwd, "spec", "spec_helper.rb")) do |f|
|
|
213
|
+
f.write <<~EOF
|
|
214
|
+
require 'chefspec'
|
|
215
|
+
require 'chefspec/berkshelf'
|
|
216
|
+
require 'chefspec/cacher'
|
|
217
|
+
|
|
218
|
+
RSpec.configure do |config|
|
|
219
|
+
config.expect_with(:rspec) { |c| c.syntax = :expect }
|
|
220
|
+
end
|
|
221
|
+
EOF
|
|
222
|
+
end
|
|
223
|
+
FileUtils.touch(File.join(cwd, "Berksfile"))
|
|
224
|
+
with_file(File.join(cwd, "spec", "foo_spec.rb")) do |f|
|
|
225
|
+
f.write <<~EOF
|
|
226
|
+
require 'spec_helper'
|
|
227
|
+
EOF
|
|
228
|
+
end
|
|
229
|
+
sh(embedded_bin("rspec"), cwd: cwd)
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
add_component "generated-cookbooks-pass-chefspec" do |c|
|
|
235
|
+
|
|
236
|
+
c.gem_base_dir = "chef-cli"
|
|
237
|
+
c.smoke_test do
|
|
238
|
+
tmpdir do |cwd|
|
|
239
|
+
sh("#{bin("chef")} generate cookbook example", cwd: cwd)
|
|
240
|
+
cb_cwd = File.join(cwd, "example")
|
|
241
|
+
sh(embedded_bin("rspec"), cwd: cb_cwd)
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
add_component "fauxhai" do |c|
|
|
247
|
+
c.gem_base_dir = "fauxhai"
|
|
248
|
+
c.smoke_test { sh("#{embedded_bin("gem")} list fauxhai") }
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
add_component "knife-spork" do |c|
|
|
252
|
+
c.gem_base_dir = "knife-spork"
|
|
253
|
+
c.smoke_test { sh("#{bin("knife")} spork info") }
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
add_component "kitchen-vagrant" do |c|
|
|
257
|
+
c.gem_base_dir = "kitchen-vagrant"
|
|
258
|
+
# The build is not passing in travis, so no tests
|
|
259
|
+
c.smoke_test { sh("#{embedded_bin("gem")} list kitchen-vagrant") }
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
add_component "package installation" do |c|
|
|
263
|
+
|
|
264
|
+
c.gem_base_dir = "chef-cli"
|
|
265
|
+
|
|
266
|
+
c.smoke_test do
|
|
267
|
+
|
|
268
|
+
if File.directory?(usr_bin_prefix)
|
|
269
|
+
sh!("#{usr_bin_path("berks")} -v")
|
|
270
|
+
sh!("#{usr_bin_path("chef")} -v")
|
|
271
|
+
sh!("#{usr_bin_path("chef-client")} -v")
|
|
272
|
+
sh!("#{usr_bin_path("chef-solo")} -v")
|
|
273
|
+
sh!("#{usr_bin_path("delivery")} -V") unless Chef::Platform.windows?
|
|
274
|
+
|
|
275
|
+
# In `knife`, `knife -v` follows a different code path that skips
|
|
276
|
+
# command/plugin loading; `knife -h` loads commands and plugins, but
|
|
277
|
+
# it exits with code 1, which is the same as a load error. Running
|
|
278
|
+
# `knife exec` forces command loading to happen and this command
|
|
279
|
+
# exits 0, which runs most of the code.
|
|
280
|
+
#
|
|
281
|
+
# See also: https://github.com/chef/chef-cli/issues/227
|
|
282
|
+
sh!("#{usr_bin_path("knife")} exec -E true")
|
|
283
|
+
|
|
284
|
+
tmpdir do |dir|
|
|
285
|
+
# Kitchen tries to create a .kitchen dir even when just running
|
|
286
|
+
# `kitchen -v`:
|
|
287
|
+
sh!("#{usr_bin_path("kitchen")} -v", cwd: dir)
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
sh!("#{usr_bin_path("ohai")} -v")
|
|
291
|
+
sh!("#{usr_bin_path("foodcritic")} -V")
|
|
292
|
+
sh!("#{usr_bin_path("inspec")} version")
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# Test blocks are expected to return a Mixlib::ShellOut compatible
|
|
296
|
+
# object:
|
|
297
|
+
ComponentTest::NullTestResult.new
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
add_component "openssl" do |c|
|
|
302
|
+
# https://github.com/chef/chef-cli/issues/420
|
|
303
|
+
c.gem_base_dir = "chef"
|
|
304
|
+
|
|
305
|
+
test = <<-EOF.gsub(/^\s+/, "")
|
|
306
|
+
require "net/http" unless defined?(Net::HTTP)
|
|
307
|
+
|
|
308
|
+
uris = %w{https://www.google.com https://chef.io/ https://ec2.amazonaws.com}
|
|
309
|
+
uris.each do |uri|
|
|
310
|
+
uri = URI(uri)
|
|
311
|
+
puts "Fetching \#{uri} for SSL check"
|
|
312
|
+
Net::HTTP.get uri
|
|
313
|
+
end
|
|
314
|
+
EOF
|
|
315
|
+
|
|
316
|
+
c.unit_test do
|
|
317
|
+
tmpdir do |cwd|
|
|
318
|
+
with_file(File.join(cwd, "openssl.rb")) do |f|
|
|
319
|
+
f.write test
|
|
320
|
+
end
|
|
321
|
+
sh!("#{Gem.ruby} openssl.rb", cwd: cwd)
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
add_component "inspec" do |c|
|
|
327
|
+
c.gem_base_dir = "inspec"
|
|
328
|
+
|
|
329
|
+
# Commenting out the unit and integration tests for now until we figure
|
|
330
|
+
# out the bundler error
|
|
331
|
+
# c.unit_test { sh("#{embedded_bin("bundle")} exec rake test:isolated") }
|
|
332
|
+
# This runs Test Kitchen (using kitchen-inspec) with some inspec tests
|
|
333
|
+
# c.integration_test { sh("#{embedded_bin("bundle")} exec rake test:vm") }
|
|
334
|
+
|
|
335
|
+
# It would be nice to use a chef generator to create these specs, but
|
|
336
|
+
# we dont have that yet. So we do it manually.
|
|
337
|
+
c.smoke_test do
|
|
338
|
+
tmpdir do |cwd|
|
|
339
|
+
File.open(File.join(cwd, "some_spec.rb"), "w+") do |f|
|
|
340
|
+
f.print <<-INSPEC_TEST
|
|
341
|
+
rule '01' do
|
|
342
|
+
impact 0.7
|
|
343
|
+
title 'Some Test'
|
|
344
|
+
desc 'Make sure inspec is installed and loading correct'
|
|
345
|
+
describe 1 do
|
|
346
|
+
it { should eq(1) }
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
INSPEC_TEST
|
|
350
|
+
end
|
|
351
|
+
# TODO when we appbundle inspec, no longer `chef exec`
|
|
352
|
+
sh("#{bin("chef")} exec #{embedded_bin("inspec")} exec .", cwd: cwd)
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
add_component "delivery-cli" do |c|
|
|
358
|
+
# We'll want to come back and revisit getting unit tests added -
|
|
359
|
+
# currently running the tests depends on cargo , which is not included
|
|
360
|
+
# in our package.
|
|
361
|
+
c.base_dir = "bin"
|
|
362
|
+
c.smoke_test do
|
|
363
|
+
tmpdir do |cwd|
|
|
364
|
+
sh!("delivery setup --user=shipit --server=delivery.shipit.io --ent=chef --org=squirrels", cwd: cwd)
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
if Chef::Platform.windows?
|
|
370
|
+
add_component "git" do |c|
|
|
371
|
+
c.base_dir = "embedded/bin"
|
|
372
|
+
c.smoke_test do
|
|
373
|
+
tmpdir do |cwd|
|
|
374
|
+
sh!("#{embedded_bin("git")} config -l")
|
|
375
|
+
sh!("#{embedded_bin("git")} clone https://github.com/chef/license-acceptance", cwd: cwd)
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
else
|
|
380
|
+
add_component "git" do |c|
|
|
381
|
+
c.base_dir = "gitbin"
|
|
382
|
+
c.smoke_test do
|
|
383
|
+
tmpdir do |cwd|
|
|
384
|
+
sh!("#{File.join(omnibus_root, "gitbin", "git")} config -l")
|
|
385
|
+
sh!("#{File.join(omnibus_root, "gitbin", "git")} clone https://github.com/chef/license-acceptance", cwd: cwd)
|
|
386
|
+
|
|
387
|
+
# If /usr/bin/git is a symlink, fail the test.
|
|
388
|
+
# Note that this test cannot go last because it does not return a
|
|
389
|
+
# Mixlib::Shellout object in the windows case, which will break the tests.
|
|
390
|
+
failure_str = "#{nix_platform_native_bin_dir}/git contains a symlink which might mean we accidentally overwrote system git via chefcli."
|
|
391
|
+
result = sh("readlink #{nix_platform_native_bin_dir}/git")
|
|
392
|
+
# if a symlink was found, test to see if it is in a chefcli install
|
|
393
|
+
if result.status.exitstatus == 0
|
|
394
|
+
raise failure_str if result.stdout =~ /chefcli/
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
# <chef_dk>/bin/ should not contain a git binary.
|
|
398
|
+
failure_str = "`<chef_dk>/bin/git --help` should fail as git should be installed in gitbin"
|
|
399
|
+
fail_if_exit_zero("#{bin("git")} --help", failure_str)
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
add_component "opscode-pushy-client" do |c|
|
|
406
|
+
c.gem_base_dir = "opscode-pushy-client"
|
|
407
|
+
# TODO the unit tests are currently failing in master
|
|
408
|
+
# c.unit_test do
|
|
409
|
+
# bundle_install_mutex.synchronize { sh("#{embedded_bin("bundle")} install") }
|
|
410
|
+
# sh("#{embedded_bin("bundle")} exec rake spec")
|
|
411
|
+
# end
|
|
412
|
+
|
|
413
|
+
c.smoke_test do
|
|
414
|
+
tmpdir do |cwd|
|
|
415
|
+
sh("#{bin("pushy-client")} -v", cwd: cwd)
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
# We try and use some chef-sugar code to make sure it loads correctly
|
|
421
|
+
add_component "chef-sugar" do |c|
|
|
422
|
+
c.gem_base_dir = "chef-sugar"
|
|
423
|
+
c.smoke_test do
|
|
424
|
+
tmpdir do |cwd|
|
|
425
|
+
with_file(File.join(cwd, "foo.rb")) do |f|
|
|
426
|
+
f.write <<~EOF
|
|
427
|
+
require 'chef/sugar'
|
|
428
|
+
log 'something' do
|
|
429
|
+
not_if { _64_bit? }
|
|
430
|
+
end
|
|
431
|
+
EOF
|
|
432
|
+
end
|
|
433
|
+
sh("#{bin("chef-apply")} foo.rb", cwd: cwd)
|
|
434
|
+
end
|
|
435
|
+
end
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
attr_reader :verification_threads
|
|
439
|
+
attr_reader :verification_results
|
|
440
|
+
attr_reader :verification_status
|
|
441
|
+
|
|
442
|
+
def initialize
|
|
443
|
+
super
|
|
444
|
+
@verification_threads = [ ]
|
|
445
|
+
@verification_results = [ ]
|
|
446
|
+
@verification_status = 0
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def run(params = [ ])
|
|
450
|
+
err("[WARN] This is an internal command used by the ChefCLI development team. If you are a ChefCLI user, please do not run it.")
|
|
451
|
+
@components_filter = parse_options(params)
|
|
452
|
+
|
|
453
|
+
validate_components!
|
|
454
|
+
invoke_tests
|
|
455
|
+
wait_for_tests
|
|
456
|
+
report_results
|
|
457
|
+
|
|
458
|
+
verification_status
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
def omnibus_root
|
|
462
|
+
config[:omnibus_dir] || super
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
def validate_components!
|
|
466
|
+
components.each do |component|
|
|
467
|
+
component.omnibus_root = omnibus_root
|
|
468
|
+
component.assert_present!
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
def components_to_test
|
|
473
|
+
if @components_filter.empty?
|
|
474
|
+
components
|
|
475
|
+
else
|
|
476
|
+
components.select do |component|
|
|
477
|
+
@components_filter.include?(component.name.to_s)
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def invoke_tests
|
|
483
|
+
components_to_test.each do |component|
|
|
484
|
+
# Run the component specs in parallel
|
|
485
|
+
verification_threads << Thread.new do
|
|
486
|
+
|
|
487
|
+
results = []
|
|
488
|
+
|
|
489
|
+
results << component.run_smoke_test
|
|
490
|
+
|
|
491
|
+
if config[:unit]
|
|
492
|
+
results << component.run_unit_test
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
if config[:integration]
|
|
496
|
+
results << component.run_integration_test
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
if results.any? { |r| r.exitstatus != 0 }
|
|
500
|
+
component_status = 1
|
|
501
|
+
@verification_status = 1
|
|
502
|
+
else
|
|
503
|
+
component_status = 0
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
{
|
|
507
|
+
component: component,
|
|
508
|
+
results: results,
|
|
509
|
+
component_status: component_status,
|
|
510
|
+
}
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
msg("Running verification for component '#{component.name}'")
|
|
514
|
+
end
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
def wait_for_tests
|
|
518
|
+
until verification_threads.empty?
|
|
519
|
+
verification_threads.each do |t|
|
|
520
|
+
if t.join(1)
|
|
521
|
+
verification_threads.delete t
|
|
522
|
+
verification_results << t.value
|
|
523
|
+
t.value[:results].each do |result|
|
|
524
|
+
if config[:verbose] || t.value[:component_status] != 0
|
|
525
|
+
msg("")
|
|
526
|
+
msg(result.stdout)
|
|
527
|
+
msg(result.stderr) if result.stderr
|
|
528
|
+
end
|
|
529
|
+
end
|
|
530
|
+
else
|
|
531
|
+
$stdout.write "."
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
end
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
def report_results
|
|
538
|
+
msg("")
|
|
539
|
+
msg("---------------------------------------------")
|
|
540
|
+
verification_results.each do |result|
|
|
541
|
+
message = result[:component_status] == 0 ? "succeeded" : "failed"
|
|
542
|
+
msg("Verification of component '#{result[:component].name}' #{message}.")
|
|
543
|
+
end
|
|
544
|
+
end
|
|
545
|
+
|
|
546
|
+
end
|
|
547
|
+
end
|
|
548
|
+
end
|