chef-dk 2.6.2 → 3.0.36
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 +4 -4
- data/Gemfile +126 -121
- data/Gemfile.lock +812 -807
- data/LICENSE +201 -201
- data/README.md +333 -333
- data/Rakefile +74 -74
- data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +27 -27
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +287 -287
- data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +52 -52
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +51 -51
- data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
- data/acceptance/Gemfile +21 -21
- data/acceptance/Gemfile.lock +334 -334
- data/acceptance/README.md +132 -132
- data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/trivial/.kitchen.yml +7 -7
- data/acceptance/trivial/test/integration/chefdk-current-install/inspec/chef_client_spec.rb +5 -5
- data/bin/chef +25 -25
- data/chef-dk.gemspec +60 -60
- data/lib/chef-dk.rb +19 -19
- data/lib/chef-dk/authenticated_http.rb +22 -22
- data/lib/chef-dk/builtin_commands.rb +59 -59
- data/lib/chef-dk/chef_runner.rb +114 -114
- data/lib/chef-dk/chef_server_api_multi.rb +73 -73
- data/lib/chef-dk/cli.rb +201 -201
- data/lib/chef-dk/command/base.rb +79 -79
- data/lib/chef-dk/command/clean_policy_cookbooks.rb +114 -114
- data/lib/chef-dk/command/clean_policy_revisions.rb +111 -111
- data/lib/chef-dk/command/delete_policy.rb +120 -120
- data/lib/chef-dk/command/delete_policy_group.rb +120 -120
- data/lib/chef-dk/command/diff.rb +315 -315
- data/lib/chef-dk/command/env.rb +89 -89
- data/lib/chef-dk/command/exec.rb +44 -44
- data/lib/chef-dk/command/export.rb +155 -155
- data/lib/chef-dk/command/gem.rb +47 -47
- data/lib/chef-dk/command/generate.rb +125 -125
- data/lib/chef-dk/command/generator_commands.rb +83 -83
- data/lib/chef-dk/command/generator_commands/app.rb +106 -106
- data/lib/chef-dk/command/generator_commands/attribute.rb +36 -36
- data/lib/chef-dk/command/generator_commands/base.rb +157 -157
- data/lib/chef-dk/command/generator_commands/build_cookbook.rb +125 -125
- data/lib/chef-dk/command/generator_commands/chef_exts/generator_desc_resource.rb +85 -85
- data/lib/chef-dk/command/generator_commands/chef_exts/quieter_doc_formatter.rb +38 -38
- data/lib/chef-dk/command/generator_commands/chef_exts/recipe_dsl_ext.rb +39 -39
- data/lib/chef-dk/command/generator_commands/cookbook.rb +241 -241
- data/lib/chef-dk/command/generator_commands/cookbook_code_file.rb +100 -100
- data/lib/chef-dk/command/generator_commands/cookbook_file.rb +45 -45
- data/lib/chef-dk/command/generator_commands/generator_generator.rb +174 -174
- data/lib/chef-dk/command/generator_commands/helpers.rb +36 -36
- data/lib/chef-dk/command/generator_commands/policyfile.rb +124 -126
- data/lib/chef-dk/command/generator_commands/recipe.rb +36 -36
- data/lib/chef-dk/command/generator_commands/repo.rb +123 -123
- data/lib/chef-dk/command/generator_commands/resource.rb +36 -36
- data/lib/chef-dk/command/generator_commands/template.rb +46 -46
- data/lib/chef-dk/command/install.rb +120 -120
- data/lib/chef-dk/command/provision.rb +436 -436
- data/lib/chef-dk/command/push.rb +117 -117
- data/lib/chef-dk/command/push_archive.rb +125 -125
- data/lib/chef-dk/command/shell_init.rb +179 -179
- data/lib/chef-dk/command/show_policy.rb +163 -163
- data/lib/chef-dk/command/undelete.rb +154 -154
- data/lib/chef-dk/command/update.rb +133 -133
- data/lib/chef-dk/command/verify.rb +629 -629
- data/lib/chef-dk/commands_map.rb +113 -113
- data/lib/chef-dk/completions/bash.sh.erb +5 -5
- data/lib/chef-dk/completions/chef.fish.erb +10 -10
- data/lib/chef-dk/completions/zsh.zsh.erb +21 -21
- data/lib/chef-dk/component_test.rb +227 -227
- data/lib/chef-dk/configurable.rb +88 -88
- data/lib/chef-dk/cookbook_metadata.rb +45 -45
- data/lib/chef-dk/cookbook_omnifetch.rb +32 -32
- data/lib/chef-dk/cookbook_profiler/git.rb +152 -151
- data/lib/chef-dk/cookbook_profiler/identifiers.rb +72 -72
- data/lib/chef-dk/cookbook_profiler/null_scm.rb +31 -31
- data/lib/chef-dk/exceptions.rb +151 -150
- data/lib/chef-dk/generator.rb +165 -165
- data/lib/chef-dk/helpers.rb +176 -176
- data/lib/chef-dk/pager.rb +104 -105
- data/lib/chef-dk/policyfile/artifactory_cookbook_source.rb +102 -102
- data/lib/chef-dk/policyfile/attribute_merge_checker.rb +110 -110
- data/lib/chef-dk/policyfile/chef_repo_cookbook_source.rb +138 -138
- data/lib/chef-dk/policyfile/chef_server_cookbook_source.rb +99 -99
- data/lib/chef-dk/policyfile/chef_server_lock_fetcher.rb +167 -164
- data/lib/chef-dk/policyfile/community_cookbook_source.rb +95 -95
- data/lib/chef-dk/policyfile/comparison_base.rb +123 -123
- data/lib/chef-dk/policyfile/cookbook_location_specification.rb +154 -154
- data/lib/chef-dk/policyfile/cookbook_locks.rb +466 -466
- data/lib/chef-dk/policyfile/cookbook_sources.rb +23 -23
- data/lib/chef-dk/policyfile/delivery_supermarket_source.rb +89 -89
- data/lib/chef-dk/policyfile/differ.rb +263 -263
- data/lib/chef-dk/policyfile/dsl.rb +288 -288
- data/lib/chef-dk/policyfile/git_lock_fetcher.rb +265 -0
- data/lib/chef-dk/policyfile/included_policies_cookbook_source.rb +156 -156
- data/lib/chef-dk/policyfile/lister.rb +229 -229
- data/lib/chef-dk/policyfile/local_lock_fetcher.rb +129 -123
- data/lib/chef-dk/policyfile/lock_applier.rb +80 -80
- data/lib/chef-dk/policyfile/null_cookbook_source.rb +49 -49
- data/lib/chef-dk/policyfile/policyfile_location_specification.rb +125 -122
- data/lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -124
- data/lib/chef-dk/policyfile/reports/install.rb +69 -69
- data/lib/chef-dk/policyfile/reports/table_printer.rb +57 -57
- data/lib/chef-dk/policyfile/reports/upload.rb +70 -70
- data/lib/chef-dk/policyfile/solution_dependencies.rb +311 -312
- data/lib/chef-dk/policyfile/source_uri.rb +57 -57
- data/lib/chef-dk/policyfile/storage_config.rb +112 -102
- data/lib/chef-dk/policyfile/undo_record.rb +139 -139
- data/lib/chef-dk/policyfile/undo_stack.rb +128 -128
- data/lib/chef-dk/policyfile/uploader.rb +213 -213
- data/lib/chef-dk/policyfile_compiler.rb +528 -528
- data/lib/chef-dk/policyfile_lock.rb +581 -581
- data/lib/chef-dk/policyfile_services/clean_policies.rb +95 -95
- data/lib/chef-dk/policyfile_services/clean_policy_cookbooks.rb +123 -123
- data/lib/chef-dk/policyfile_services/export_repo.rb +419 -420
- data/lib/chef-dk/policyfile_services/install.rb +162 -162
- data/lib/chef-dk/policyfile_services/push.rb +112 -112
- data/lib/chef-dk/policyfile_services/push_archive.rb +164 -200
- data/lib/chef-dk/policyfile_services/rm_policy.rb +141 -141
- data/lib/chef-dk/policyfile_services/rm_policy_group.rb +85 -85
- data/lib/chef-dk/policyfile_services/show_policy.rb +234 -236
- data/lib/chef-dk/policyfile_services/undelete.rb +108 -108
- data/lib/chef-dk/policyfile_services/update_attributes.rb +110 -110
- data/lib/chef-dk/service_exception_inspectors.rb +24 -24
- data/lib/chef-dk/service_exception_inspectors/base.rb +39 -39
- data/lib/chef-dk/service_exception_inspectors/http.rb +119 -119
- data/lib/chef-dk/service_exceptions.rb +142 -142
- data/lib/chef-dk/shell_out.rb +36 -36
- data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +4 -4
- data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/.kitchen.yml +21 -21
- data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/README.md +146 -146
- data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/chefignore +104 -107
- data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +66 -54
- data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +17 -17
- data/lib/chef-dk/skeletons/code_generator/files/default/delivery-project.toml +36 -36
- data/lib/chef-dk/skeletons/code_generator/files/default/gitignore +22 -22
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/README.md +24 -24
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -27
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +7 -7
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -56
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -6
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +12 -12
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/policies/README.md +24 -24
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +12 -12
- data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +3 -3
- data/lib/chef-dk/skeletons/code_generator/metadata.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +89 -89
- data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +13 -13
- data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +177 -177
- data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +158 -152
- data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +25 -25
- data/lib/chef-dk/skeletons/code_generator/recipes/helpers.rb +21 -21
- data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +9 -9
- data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +52 -52
- data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +68 -68
- data/lib/chef-dk/skeletons/code_generator/recipes/resource.rb +13 -13
- data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +32 -32
- data/lib/chef-dk/skeletons/code_generator/templates/default/CHANGELOG.md.erb +11 -0
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -3
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -201
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -339
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -674
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -21
- data/lib/chef-dk/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -25
- data/lib/chef-dk/skeletons/code_generator/templates/default/README.md.erb +4 -4
- data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -7
- data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -10
- data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +8 -8
- data/lib/chef-dk/skeletons/code_generator/templates/default/helpers.rb.erb +39 -39
- data/lib/chef-dk/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +18 -18
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen.yml.erb +26 -26
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +33 -33
- data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +20 -20
- data/lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb +5 -5
- data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +35 -35
- data/lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -128
- data/lib/chef-dk/skeletons/code_generator/templates/default/resource.rb.erb +1 -1
- data/lib/chef-dk/ui.rb +57 -57
- data/lib/chef-dk/version.rb +20 -20
- data/lib/kitchen/provisioner/policyfile_zero.rb +195 -195
- data/omnibus_overrides.rb +25 -25
- data/spec/shared/a_file_generator.rb +125 -125
- data/spec/shared/a_generated_file.rb +12 -12
- data/spec/shared/command_with_ui_object.rb +11 -11
- data/spec/shared/custom_generator_cookbook.rb +136 -136
- data/spec/shared/fixture_cookbook_checksums.rb +46 -46
- data/spec/shared/setup_git_committer_config.rb +54 -54
- data/spec/shared/setup_git_cookbooks.rb +53 -53
- data/spec/spec_helper.rb +51 -51
- data/spec/test_helpers.rb +84 -84
- data/spec/unit/chef_runner_spec.rb +139 -139
- data/spec/unit/chef_server_api_multi_spec.rb +120 -120
- data/spec/unit/cli_spec.rb +377 -377
- data/spec/unit/command/base_spec.rb +172 -172
- data/spec/unit/command/clean_policy_cookbooks_spec.rb +180 -180
- data/spec/unit/command/clean_policy_revisions_spec.rb +180 -180
- data/spec/unit/command/delete_policy_group_spec.rb +206 -206
- data/spec/unit/command/delete_policy_spec.rb +206 -206
- data/spec/unit/command/diff_spec.rb +311 -311
- data/spec/unit/command/env_spec.rb +52 -52
- data/spec/unit/command/exec_spec.rb +178 -178
- data/spec/unit/command/export_spec.rb +199 -199
- data/spec/unit/command/generate_spec.rb +142 -142
- data/spec/unit/command/generator_commands/app_spec.rb +166 -166
- data/spec/unit/command/generator_commands/attribute_spec.rb +31 -31
- data/spec/unit/command/generator_commands/base_spec.rb +181 -181
- data/spec/unit/command/generator_commands/build_cookbook_spec.rb +377 -377
- data/spec/unit/command/generator_commands/chef_exts/generator_desc_resource_spec.rb +97 -97
- data/spec/unit/command/generator_commands/chef_exts/recipe_dsl_ext_spec.rb +111 -111
- data/spec/unit/command/generator_commands/cookbook_file_spec.rb +31 -31
- data/spec/unit/command/generator_commands/cookbook_spec.rb +765 -756
- data/spec/unit/command/generator_commands/generator_generator_spec.rb +227 -227
- data/spec/unit/command/generator_commands/helpers_spec.rb +31 -31
- data/spec/unit/command/generator_commands/policyfile_spec.rb +223 -223
- data/spec/unit/command/generator_commands/recipe_spec.rb +37 -37
- data/spec/unit/command/generator_commands/repo_spec.rb +374 -374
- data/spec/unit/command/generator_commands/resource_spec.rb +31 -31
- data/spec/unit/command/generator_commands/template_spec.rb +31 -31
- data/spec/unit/command/install_spec.rb +179 -179
- data/spec/unit/command/provision_spec.rb +589 -589
- data/spec/unit/command/push_archive_spec.rb +153 -153
- data/spec/unit/command/push_spec.rb +198 -198
- data/spec/unit/command/shell_init_spec.rb +339 -339
- data/spec/unit/command/show_policy_spec.rb +234 -234
- data/spec/unit/command/undelete_spec.rb +244 -244
- data/spec/unit/command/update_spec.rb +283 -283
- data/spec/unit/command/verify_spec.rb +341 -341
- data/spec/unit/commands_map_spec.rb +57 -57
- data/spec/unit/component_test_spec.rb +128 -128
- data/spec/unit/configurable_spec.rb +68 -68
- data/spec/unit/cookbook_metadata_spec.rb +96 -96
- data/spec/unit/cookbook_profiler/git_spec.rb +176 -176
- data/spec/unit/cookbook_profiler/identifiers_spec.rb +81 -81
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -9
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -9
- data/spec/unit/fixtures/command/cli_test_command.rb +26 -26
- data/spec/unit/fixtures/command/explicit_path_example.rb +7 -7
- data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -5
- data/spec/unit/fixtures/configurable/test_configurable.rb +10 -10
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbooks_api/chef_server_universe.json +56 -56
- data/spec/unit/fixtures/cookbooks_api/pruned_chef_server_universe.json +30 -30
- data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1321 -1321
- data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -2987
- data/spec/unit/fixtures/cookbooks_api/universe.json +1 -1
- data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +33 -33
- data/spec/unit/fixtures/dev_cookbooks/README.md +16 -16
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -2
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -5
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -3
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -2
- data/spec/unit/fixtures/example_cookbook/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -5
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -8
- data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -3
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -9
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -16
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -3
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -2
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
- data/spec/unit/generator_spec.rb +119 -119
- data/spec/unit/pager_spec.rb +117 -117
- data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -59
- data/spec/unit/policyfile/attribute_merge_checker_spec.rb +80 -80
- data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -93
- data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +55 -55
- data/spec/unit/policyfile/chef_server_lock_fetcher_spec.rb +161 -161
- data/spec/unit/policyfile/community_cookbook_source_spec.rb +83 -83
- data/spec/unit/policyfile/comparison_base_spec.rb +340 -340
- data/spec/unit/policyfile/cookbook_location_specification_spec.rb +347 -347
- data/spec/unit/policyfile/cookbook_locks_spec.rb +527 -527
- data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +129 -129
- data/spec/unit/policyfile/differ_spec.rb +686 -686
- data/spec/unit/policyfile/git_lock_fetcher_spec.rb +155 -0
- data/spec/unit/policyfile/included_policies_cookbook_source_spec.rb +242 -242
- data/spec/unit/policyfile/lister_spec.rb +268 -268
- data/spec/unit/policyfile/local_lock_fetcher_spec.rb +173 -173
- data/spec/unit/policyfile/lock_applier_spec.rb +100 -100
- data/spec/unit/policyfile/null_cookbook_source_spec.rb +34 -34
- data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -92
- data/spec/unit/policyfile/reports/install_spec.rb +114 -114
- data/spec/unit/policyfile/reports/upload_spec.rb +94 -94
- data/spec/unit/policyfile/solution_dependencies_spec.rb +170 -170
- data/spec/unit/policyfile/source_uri_spec.rb +36 -36
- data/spec/unit/policyfile/storage_config_spec.rb +180 -180
- data/spec/unit/policyfile/undo_record_spec.rb +258 -258
- data/spec/unit/policyfile/undo_stack_spec.rb +265 -265
- data/spec/unit/policyfile/uploader_spec.rb +409 -409
- data/spec/unit/policyfile_demands_spec.rb +1197 -1197
- data/spec/unit/policyfile_evaluation_spec.rb +628 -638
- data/spec/unit/policyfile_includes_dsl_spec.rb +159 -159
- data/spec/unit/policyfile_includes_spec.rb +720 -720
- data/spec/unit/policyfile_install_with_includes_spec.rb +232 -232
- data/spec/unit/policyfile_lock_build_spec.rb +1065 -1065
- data/spec/unit/policyfile_lock_install_spec.rb +137 -137
- data/spec/unit/policyfile_lock_serialization_spec.rb +424 -424
- data/spec/unit/policyfile_lock_validation_spec.rb +608 -608
- data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -236
- data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +272 -272
- data/spec/unit/policyfile_services/export_repo_spec.rb +473 -478
- data/spec/unit/policyfile_services/install_spec.rb +209 -209
- data/spec/unit/policyfile_services/push_archive_spec.rb +359 -374
- data/spec/unit/policyfile_services/push_spec.rb +249 -249
- data/spec/unit/policyfile_services/rm_policy_group_spec.rb +237 -237
- data/spec/unit/policyfile_services/rm_policy_spec.rb +263 -263
- data/spec/unit/policyfile_services/show_policy_spec.rb +887 -887
- data/spec/unit/policyfile_services/undelete_spec.rb +302 -302
- data/spec/unit/policyfile_services/update_attributes_spec.rb +229 -229
- data/spec/unit/policyfile_services/update_spec.rb +140 -140
- data/spec/unit/service_exception_inspectors/base_spec.rb +41 -41
- data/spec/unit/service_exception_inspectors/http_spec.rb +138 -138
- data/spec/unit/shell_out_spec.rb +34 -34
- data/tasks/announce.rb +57 -57
- data/tasks/bin/bundle-platform.bat +2 -2
- data/tasks/dependencies.rb +89 -89
- data/tasks/templates/prerelease.md.erb +35 -35
- data/tasks/templates/release.md.erb +34 -34
- data/warning.txt +9 -9
- metadata +9 -5
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2014 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-dk/policyfile/null_cookbook_source"
|
|
19
|
-
require "chef-dk/policyfile/community_cookbook_source"
|
|
20
|
-
require "chef-dk/policyfile/chef_server_cookbook_source"
|
|
21
|
-
require "chef-dk/policyfile/chef_repo_cookbook_source"
|
|
22
|
-
require "chef-dk/policyfile/delivery_supermarket_source"
|
|
23
|
-
require "chef-dk/policyfile/artifactory_cookbook_source"
|
|
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-dk/policyfile/null_cookbook_source"
|
|
19
|
+
require "chef-dk/policyfile/community_cookbook_source"
|
|
20
|
+
require "chef-dk/policyfile/chef_server_cookbook_source"
|
|
21
|
+
require "chef-dk/policyfile/chef_repo_cookbook_source"
|
|
22
|
+
require "chef-dk/policyfile/delivery_supermarket_source"
|
|
23
|
+
require "chef-dk/policyfile/artifactory_cookbook_source"
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2014 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 "forwardable"
|
|
19
|
-
|
|
20
|
-
require "semverse"
|
|
21
|
-
|
|
22
|
-
require "chef-dk/policyfile/community_cookbook_source"
|
|
23
|
-
|
|
24
|
-
module ChefDK
|
|
25
|
-
module Policyfile
|
|
26
|
-
|
|
27
|
-
# Fetches cookbooks from a supermarket, similar to CommunityCookbookSource
|
|
28
|
-
# (which it delegates to), except that only the latest versions of any
|
|
29
|
-
# cookbook can be used.
|
|
30
|
-
#
|
|
31
|
-
# This is intended to be used in an environment where the team wants to
|
|
32
|
-
# make only the newest version of a given cookbook available in order to
|
|
33
|
-
# force developers to integrate continuously at the component artifact
|
|
34
|
-
# (cookbook) level. To achieve this goal, two constraints must be imposed:
|
|
35
|
-
#
|
|
36
|
-
# * Cookbook changes pass through a Ci pipeline and are ultimately uploaded
|
|
37
|
-
# to a private supermarket (or equivalent, i.e. mini-mart) after final
|
|
38
|
-
# approval (which can be automated or not)
|
|
39
|
-
# * Version numbers for cookbooks that pass through the Ci pipeline always
|
|
40
|
-
# increase over time (so that largest version number == newest)
|
|
41
|
-
#
|
|
42
|
-
# In the future, alternative approaches may be persued to achieve the goal
|
|
43
|
-
# of continuously integrating at the cookbook level without imposing those
|
|
44
|
-
# constraints.
|
|
45
|
-
#
|
|
46
|
-
class DeliverySupermarketSource
|
|
47
|
-
|
|
48
|
-
extend Forwardable
|
|
49
|
-
|
|
50
|
-
def_delegator :@community_source, :uri
|
|
51
|
-
def_delegator :@community_source, :source_options_for
|
|
52
|
-
def_delegator :@community_source, :null?
|
|
53
|
-
def_delegator :@community_source, :preferred_cookbooks
|
|
54
|
-
def_delegator :@community_source, :preferred_source_for?
|
|
55
|
-
def_delegator :@community_source, :preferred_for
|
|
56
|
-
|
|
57
|
-
def initialize(uri)
|
|
58
|
-
@community_source = CommunityCookbookSource.new(uri)
|
|
59
|
-
yield self if block_given?
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def ==(other)
|
|
63
|
-
other.kind_of?(self.class) && other.uri == uri
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def default_source_args
|
|
67
|
-
[:delivery_supermarket, uri]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def universe_graph
|
|
71
|
-
@universe_graph ||= begin
|
|
72
|
-
@community_source.universe_graph.inject({}) do |truncated, (cookbook_name, version_and_deps_list)|
|
|
73
|
-
sorted_versions = version_and_deps_list.keys.sort_by do |version_string|
|
|
74
|
-
Semverse::Version.new(version_string)
|
|
75
|
-
end
|
|
76
|
-
greatest_version = sorted_versions.last
|
|
77
|
-
truncated[cookbook_name] = { greatest_version => version_and_deps_list[greatest_version] }
|
|
78
|
-
truncated
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def desc
|
|
84
|
-
"delivery_supermarket(#{uri})"
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
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 "forwardable"
|
|
19
|
+
|
|
20
|
+
require "semverse"
|
|
21
|
+
|
|
22
|
+
require "chef-dk/policyfile/community_cookbook_source"
|
|
23
|
+
|
|
24
|
+
module ChefDK
|
|
25
|
+
module Policyfile
|
|
26
|
+
|
|
27
|
+
# Fetches cookbooks from a supermarket, similar to CommunityCookbookSource
|
|
28
|
+
# (which it delegates to), except that only the latest versions of any
|
|
29
|
+
# cookbook can be used.
|
|
30
|
+
#
|
|
31
|
+
# This is intended to be used in an environment where the team wants to
|
|
32
|
+
# make only the newest version of a given cookbook available in order to
|
|
33
|
+
# force developers to integrate continuously at the component artifact
|
|
34
|
+
# (cookbook) level. To achieve this goal, two constraints must be imposed:
|
|
35
|
+
#
|
|
36
|
+
# * Cookbook changes pass through a Ci pipeline and are ultimately uploaded
|
|
37
|
+
# to a private supermarket (or equivalent, i.e. mini-mart) after final
|
|
38
|
+
# approval (which can be automated or not)
|
|
39
|
+
# * Version numbers for cookbooks that pass through the Ci pipeline always
|
|
40
|
+
# increase over time (so that largest version number == newest)
|
|
41
|
+
#
|
|
42
|
+
# In the future, alternative approaches may be persued to achieve the goal
|
|
43
|
+
# of continuously integrating at the cookbook level without imposing those
|
|
44
|
+
# constraints.
|
|
45
|
+
#
|
|
46
|
+
class DeliverySupermarketSource
|
|
47
|
+
|
|
48
|
+
extend Forwardable
|
|
49
|
+
|
|
50
|
+
def_delegator :@community_source, :uri
|
|
51
|
+
def_delegator :@community_source, :source_options_for
|
|
52
|
+
def_delegator :@community_source, :null?
|
|
53
|
+
def_delegator :@community_source, :preferred_cookbooks
|
|
54
|
+
def_delegator :@community_source, :preferred_source_for?
|
|
55
|
+
def_delegator :@community_source, :preferred_for
|
|
56
|
+
|
|
57
|
+
def initialize(uri)
|
|
58
|
+
@community_source = CommunityCookbookSource.new(uri)
|
|
59
|
+
yield self if block_given?
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def ==(other)
|
|
63
|
+
other.kind_of?(self.class) && other.uri == uri
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def default_source_args
|
|
67
|
+
[:delivery_supermarket, uri]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def universe_graph
|
|
71
|
+
@universe_graph ||= begin
|
|
72
|
+
@community_source.universe_graph.inject({}) do |truncated, (cookbook_name, version_and_deps_list)|
|
|
73
|
+
sorted_versions = version_and_deps_list.keys.sort_by do |version_string|
|
|
74
|
+
Semverse::Version.new(version_string)
|
|
75
|
+
end
|
|
76
|
+
greatest_version = sorted_versions.last
|
|
77
|
+
truncated[cookbook_name] = { greatest_version => version_and_deps_list[greatest_version] }
|
|
78
|
+
truncated
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def desc
|
|
84
|
+
"delivery_supermarket(#{uri})"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -1,263 +1,263 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2015 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 "diff/lcs"
|
|
19
|
-
require "diff/lcs/hunk"
|
|
20
|
-
require "paint"
|
|
21
|
-
require "ffi_yajl"
|
|
22
|
-
|
|
23
|
-
module ChefDK
|
|
24
|
-
module Policyfile
|
|
25
|
-
class Differ
|
|
26
|
-
|
|
27
|
-
POLICY_SECTIONS = %w{ revision_id run_list named_run_lists cookbook_locks default_attributes override_attributes }.freeze
|
|
28
|
-
LINES_OF_CONTEXT = 3
|
|
29
|
-
INITIAL_FILE_LENGTH_DIFFERENCE = 0
|
|
30
|
-
FORMAT = :unified
|
|
31
|
-
|
|
32
|
-
attr_reader :old_lock
|
|
33
|
-
attr_reader :old_name
|
|
34
|
-
attr_reader :new_lock
|
|
35
|
-
attr_reader :new_name
|
|
36
|
-
attr_reader :ui
|
|
37
|
-
|
|
38
|
-
def initialize(old_name: nil, old_lock: nil, new_name: nil, new_lock: nil, ui: nil)
|
|
39
|
-
@old_lock = old_lock
|
|
40
|
-
@new_lock = new_lock
|
|
41
|
-
@old_name = old_name
|
|
42
|
-
@new_name = new_name
|
|
43
|
-
@ui = ui
|
|
44
|
-
|
|
45
|
-
@added_cookbooks = nil
|
|
46
|
-
@removed_cookbooks = nil
|
|
47
|
-
@modified_cookbooks = nil
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def lock_name
|
|
51
|
-
old_lock["name"]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def old_cookbook_locks
|
|
55
|
-
old_lock["cookbook_locks"]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def new_cookbook_locks
|
|
59
|
-
new_lock["cookbook_locks"]
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def updated_sections
|
|
63
|
-
@updated_sections ||= POLICY_SECTIONS.select do |key|
|
|
64
|
-
old_lock[key] != new_lock[key]
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def different?
|
|
69
|
-
!updated_sections.empty?
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def run_report
|
|
73
|
-
unless different?
|
|
74
|
-
ui.err("No changes for policy lock '#{lock_name}' between '#{old_name}' and '#{new_name}'")
|
|
75
|
-
return true
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
ui.print("Policy lock '#{lock_name}' differs between '#{old_name}' and '#{new_name}':\n\n")
|
|
79
|
-
|
|
80
|
-
report_rev_id_changes
|
|
81
|
-
report_run_list_changes
|
|
82
|
-
report_added_cookbooks
|
|
83
|
-
report_removed_cookbooks
|
|
84
|
-
report_modified_cookbooks
|
|
85
|
-
report_default_attribute_changes
|
|
86
|
-
report_override_attribute_changes
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def report_rev_id_changes
|
|
90
|
-
h1("REVISION ID CHANGED")
|
|
91
|
-
old_rev = old_lock["revision_id"]
|
|
92
|
-
new_rev = new_lock["revision_id"]
|
|
93
|
-
diff_lines([ old_rev ], [ new_rev ])
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def report_run_list_changes
|
|
97
|
-
return nil unless updated_sections.include?("run_list")
|
|
98
|
-
h1("RUN LIST CHANGED")
|
|
99
|
-
|
|
100
|
-
old_run_list = old_lock["run_list"]
|
|
101
|
-
new_run_list = new_lock["run_list"]
|
|
102
|
-
|
|
103
|
-
diff_lines(old_run_list, new_run_list)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def report_removed_cookbooks
|
|
107
|
-
return nil if removed_cookbooks.empty?
|
|
108
|
-
h1("REMOVED COOKBOOKS")
|
|
109
|
-
removed_cookbooks.each do |cb_name|
|
|
110
|
-
ui.print("\n")
|
|
111
|
-
old_lock = pretty_json(old_cookbook_locks[cb_name])
|
|
112
|
-
new_lock = []
|
|
113
|
-
h2(cb_name)
|
|
114
|
-
diff_lines(old_lock, new_lock)
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
def report_added_cookbooks
|
|
119
|
-
return nil if added_cookbooks.empty?
|
|
120
|
-
h1("ADDED COOKBOOKS")
|
|
121
|
-
added_cookbooks.each do |cb_name|
|
|
122
|
-
ui.print("\n")
|
|
123
|
-
old_lock = []
|
|
124
|
-
new_lock = pretty_json(new_cookbook_locks[cb_name])
|
|
125
|
-
h2(cb_name)
|
|
126
|
-
diff_lines(old_lock, new_lock)
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def report_modified_cookbooks
|
|
131
|
-
return nil if modified_cookbooks.empty?
|
|
132
|
-
h1("MODIFIED COOKBOOKS")
|
|
133
|
-
modified_cookbooks.each do |cb_name|
|
|
134
|
-
ui.print("\n")
|
|
135
|
-
old_lock = pretty_json(old_cookbook_locks[cb_name])
|
|
136
|
-
new_lock = pretty_json(new_cookbook_locks[cb_name])
|
|
137
|
-
h2(cb_name)
|
|
138
|
-
diff_lines(old_lock, new_lock)
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
def report_default_attribute_changes
|
|
143
|
-
return nil unless updated_sections.include?("default_attributes")
|
|
144
|
-
|
|
145
|
-
h1("DEFAULT ATTRIBUTES CHANGED")
|
|
146
|
-
|
|
147
|
-
old_default = pretty_json(old_lock["default_attributes"])
|
|
148
|
-
new_default = pretty_json(new_lock["default_attributes"])
|
|
149
|
-
diff_lines(old_default, new_default)
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def report_override_attribute_changes
|
|
153
|
-
return nil unless updated_sections.include?("override_attributes")
|
|
154
|
-
|
|
155
|
-
h1("OVERRIDE ATTRIBUTES CHANGED")
|
|
156
|
-
|
|
157
|
-
old_override = pretty_json(old_lock["override_attributes"])
|
|
158
|
-
new_override = pretty_json(new_lock["override_attributes"])
|
|
159
|
-
diff_lines(old_override, new_override)
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def added_cookbooks
|
|
163
|
-
detect_cookbook_changes if @added_cookbooks.nil?
|
|
164
|
-
@added_cookbooks
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def removed_cookbooks
|
|
168
|
-
detect_cookbook_changes if @removed_cookbooks.nil?
|
|
169
|
-
@removed_cookbooks
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def modified_cookbooks
|
|
173
|
-
detect_cookbook_changes if @modified_cookbooks.nil?
|
|
174
|
-
@modified_cookbooks
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
private
|
|
178
|
-
|
|
179
|
-
def h1(str)
|
|
180
|
-
ui.msg(str)
|
|
181
|
-
ui.msg("=" * str.size)
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
def h2(str)
|
|
185
|
-
ui.msg(str)
|
|
186
|
-
ui.msg("-" * str.size)
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
def diff_lines(old_lines, new_lines)
|
|
190
|
-
file_length_difference = INITIAL_FILE_LENGTH_DIFFERENCE
|
|
191
|
-
|
|
192
|
-
previous_hunk = nil
|
|
193
|
-
|
|
194
|
-
diffs = Diff::LCS.diff(old_lines, new_lines)
|
|
195
|
-
|
|
196
|
-
ui.print("\n")
|
|
197
|
-
|
|
198
|
-
diffs.each do |piece|
|
|
199
|
-
hunk = Diff::LCS::Hunk.new(old_lines, new_lines, piece, LINES_OF_CONTEXT, file_length_difference)
|
|
200
|
-
|
|
201
|
-
file_length_difference = hunk.file_length_difference
|
|
202
|
-
|
|
203
|
-
maybe_contiguous_hunks = (previous_hunk.nil? || hunk.merge(previous_hunk))
|
|
204
|
-
|
|
205
|
-
if !maybe_contiguous_hunks
|
|
206
|
-
print_color_diff("#{previous_hunk.diff(FORMAT)}\n")
|
|
207
|
-
end
|
|
208
|
-
previous_hunk = hunk
|
|
209
|
-
end
|
|
210
|
-
print_color_diff("#{previous_hunk.diff(FORMAT)}\n") unless previous_hunk.nil?
|
|
211
|
-
ui.print("\n")
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def print_color_diff(hunk)
|
|
215
|
-
hunk.to_s.each_line do |line|
|
|
216
|
-
ui.print(Paint[line, color_for_line(line)])
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
def color_for_line(line)
|
|
221
|
-
case line[0].chr
|
|
222
|
-
when "+"
|
|
223
|
-
:green
|
|
224
|
-
when "-"
|
|
225
|
-
:red
|
|
226
|
-
when "@"
|
|
227
|
-
line[1].chr == "@" ? :blue : nil
|
|
228
|
-
else
|
|
229
|
-
nil
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
def pretty_json(data)
|
|
234
|
-
FFI_Yajl::Encoder.encode(data, pretty: true).lines.map { |l| l.chomp }
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
def detect_cookbook_changes
|
|
238
|
-
all_locked_cookbooks = old_cookbook_locks.keys | new_cookbook_locks.keys
|
|
239
|
-
|
|
240
|
-
@added_cookbooks = []
|
|
241
|
-
@removed_cookbooks = []
|
|
242
|
-
@modified_cookbooks = []
|
|
243
|
-
|
|
244
|
-
all_locked_cookbooks.each do |cb_name|
|
|
245
|
-
if old_cookbook_locks.key?(cb_name) && new_cookbook_locks.key?(cb_name)
|
|
246
|
-
old_cb_lock = old_cookbook_locks[cb_name]
|
|
247
|
-
new_cb_lock = new_cookbook_locks[cb_name]
|
|
248
|
-
if old_cb_lock != new_cb_lock
|
|
249
|
-
@modified_cookbooks << cb_name
|
|
250
|
-
end
|
|
251
|
-
elsif old_cookbook_locks.key?(cb_name)
|
|
252
|
-
@removed_cookbooks << cb_name
|
|
253
|
-
elsif new_cookbook_locks.key?(cb_name)
|
|
254
|
-
@added_cookbooks << cb_name
|
|
255
|
-
else
|
|
256
|
-
raise "Bug: cookbook lock #{cb_name} cannot be determined as new/removed/modified/unmodified"
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
end
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2015 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 "diff/lcs"
|
|
19
|
+
require "diff/lcs/hunk"
|
|
20
|
+
require "paint"
|
|
21
|
+
require "ffi_yajl"
|
|
22
|
+
|
|
23
|
+
module ChefDK
|
|
24
|
+
module Policyfile
|
|
25
|
+
class Differ
|
|
26
|
+
|
|
27
|
+
POLICY_SECTIONS = %w{ revision_id run_list named_run_lists cookbook_locks default_attributes override_attributes }.freeze
|
|
28
|
+
LINES_OF_CONTEXT = 3
|
|
29
|
+
INITIAL_FILE_LENGTH_DIFFERENCE = 0
|
|
30
|
+
FORMAT = :unified
|
|
31
|
+
|
|
32
|
+
attr_reader :old_lock
|
|
33
|
+
attr_reader :old_name
|
|
34
|
+
attr_reader :new_lock
|
|
35
|
+
attr_reader :new_name
|
|
36
|
+
attr_reader :ui
|
|
37
|
+
|
|
38
|
+
def initialize(old_name: nil, old_lock: nil, new_name: nil, new_lock: nil, ui: nil)
|
|
39
|
+
@old_lock = old_lock
|
|
40
|
+
@new_lock = new_lock
|
|
41
|
+
@old_name = old_name
|
|
42
|
+
@new_name = new_name
|
|
43
|
+
@ui = ui
|
|
44
|
+
|
|
45
|
+
@added_cookbooks = nil
|
|
46
|
+
@removed_cookbooks = nil
|
|
47
|
+
@modified_cookbooks = nil
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def lock_name
|
|
51
|
+
old_lock["name"]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def old_cookbook_locks
|
|
55
|
+
old_lock["cookbook_locks"]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def new_cookbook_locks
|
|
59
|
+
new_lock["cookbook_locks"]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def updated_sections
|
|
63
|
+
@updated_sections ||= POLICY_SECTIONS.select do |key|
|
|
64
|
+
old_lock[key] != new_lock[key]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def different?
|
|
69
|
+
!updated_sections.empty?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def run_report
|
|
73
|
+
unless different?
|
|
74
|
+
ui.err("No changes for policy lock '#{lock_name}' between '#{old_name}' and '#{new_name}'")
|
|
75
|
+
return true
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
ui.print("Policy lock '#{lock_name}' differs between '#{old_name}' and '#{new_name}':\n\n")
|
|
79
|
+
|
|
80
|
+
report_rev_id_changes
|
|
81
|
+
report_run_list_changes
|
|
82
|
+
report_added_cookbooks
|
|
83
|
+
report_removed_cookbooks
|
|
84
|
+
report_modified_cookbooks
|
|
85
|
+
report_default_attribute_changes
|
|
86
|
+
report_override_attribute_changes
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def report_rev_id_changes
|
|
90
|
+
h1("REVISION ID CHANGED")
|
|
91
|
+
old_rev = old_lock["revision_id"]
|
|
92
|
+
new_rev = new_lock["revision_id"]
|
|
93
|
+
diff_lines([ old_rev ], [ new_rev ])
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def report_run_list_changes
|
|
97
|
+
return nil unless updated_sections.include?("run_list")
|
|
98
|
+
h1("RUN LIST CHANGED")
|
|
99
|
+
|
|
100
|
+
old_run_list = old_lock["run_list"]
|
|
101
|
+
new_run_list = new_lock["run_list"]
|
|
102
|
+
|
|
103
|
+
diff_lines(old_run_list, new_run_list)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def report_removed_cookbooks
|
|
107
|
+
return nil if removed_cookbooks.empty?
|
|
108
|
+
h1("REMOVED COOKBOOKS")
|
|
109
|
+
removed_cookbooks.each do |cb_name|
|
|
110
|
+
ui.print("\n")
|
|
111
|
+
old_lock = pretty_json(old_cookbook_locks[cb_name])
|
|
112
|
+
new_lock = []
|
|
113
|
+
h2(cb_name)
|
|
114
|
+
diff_lines(old_lock, new_lock)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def report_added_cookbooks
|
|
119
|
+
return nil if added_cookbooks.empty?
|
|
120
|
+
h1("ADDED COOKBOOKS")
|
|
121
|
+
added_cookbooks.each do |cb_name|
|
|
122
|
+
ui.print("\n")
|
|
123
|
+
old_lock = []
|
|
124
|
+
new_lock = pretty_json(new_cookbook_locks[cb_name])
|
|
125
|
+
h2(cb_name)
|
|
126
|
+
diff_lines(old_lock, new_lock)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def report_modified_cookbooks
|
|
131
|
+
return nil if modified_cookbooks.empty?
|
|
132
|
+
h1("MODIFIED COOKBOOKS")
|
|
133
|
+
modified_cookbooks.each do |cb_name|
|
|
134
|
+
ui.print("\n")
|
|
135
|
+
old_lock = pretty_json(old_cookbook_locks[cb_name])
|
|
136
|
+
new_lock = pretty_json(new_cookbook_locks[cb_name])
|
|
137
|
+
h2(cb_name)
|
|
138
|
+
diff_lines(old_lock, new_lock)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def report_default_attribute_changes
|
|
143
|
+
return nil unless updated_sections.include?("default_attributes")
|
|
144
|
+
|
|
145
|
+
h1("DEFAULT ATTRIBUTES CHANGED")
|
|
146
|
+
|
|
147
|
+
old_default = pretty_json(old_lock["default_attributes"])
|
|
148
|
+
new_default = pretty_json(new_lock["default_attributes"])
|
|
149
|
+
diff_lines(old_default, new_default)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def report_override_attribute_changes
|
|
153
|
+
return nil unless updated_sections.include?("override_attributes")
|
|
154
|
+
|
|
155
|
+
h1("OVERRIDE ATTRIBUTES CHANGED")
|
|
156
|
+
|
|
157
|
+
old_override = pretty_json(old_lock["override_attributes"])
|
|
158
|
+
new_override = pretty_json(new_lock["override_attributes"])
|
|
159
|
+
diff_lines(old_override, new_override)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def added_cookbooks
|
|
163
|
+
detect_cookbook_changes if @added_cookbooks.nil?
|
|
164
|
+
@added_cookbooks
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def removed_cookbooks
|
|
168
|
+
detect_cookbook_changes if @removed_cookbooks.nil?
|
|
169
|
+
@removed_cookbooks
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def modified_cookbooks
|
|
173
|
+
detect_cookbook_changes if @modified_cookbooks.nil?
|
|
174
|
+
@modified_cookbooks
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
private
|
|
178
|
+
|
|
179
|
+
def h1(str)
|
|
180
|
+
ui.msg(str)
|
|
181
|
+
ui.msg("=" * str.size)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def h2(str)
|
|
185
|
+
ui.msg(str)
|
|
186
|
+
ui.msg("-" * str.size)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def diff_lines(old_lines, new_lines)
|
|
190
|
+
file_length_difference = INITIAL_FILE_LENGTH_DIFFERENCE
|
|
191
|
+
|
|
192
|
+
previous_hunk = nil
|
|
193
|
+
|
|
194
|
+
diffs = Diff::LCS.diff(old_lines, new_lines)
|
|
195
|
+
|
|
196
|
+
ui.print("\n")
|
|
197
|
+
|
|
198
|
+
diffs.each do |piece|
|
|
199
|
+
hunk = Diff::LCS::Hunk.new(old_lines, new_lines, piece, LINES_OF_CONTEXT, file_length_difference)
|
|
200
|
+
|
|
201
|
+
file_length_difference = hunk.file_length_difference
|
|
202
|
+
|
|
203
|
+
maybe_contiguous_hunks = (previous_hunk.nil? || hunk.merge(previous_hunk))
|
|
204
|
+
|
|
205
|
+
if !maybe_contiguous_hunks
|
|
206
|
+
print_color_diff("#{previous_hunk.diff(FORMAT)}\n")
|
|
207
|
+
end
|
|
208
|
+
previous_hunk = hunk
|
|
209
|
+
end
|
|
210
|
+
print_color_diff("#{previous_hunk.diff(FORMAT)}\n") unless previous_hunk.nil?
|
|
211
|
+
ui.print("\n")
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def print_color_diff(hunk)
|
|
215
|
+
hunk.to_s.each_line do |line|
|
|
216
|
+
ui.print(Paint[line, color_for_line(line)])
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def color_for_line(line)
|
|
221
|
+
case line[0].chr
|
|
222
|
+
when "+"
|
|
223
|
+
:green
|
|
224
|
+
when "-"
|
|
225
|
+
:red
|
|
226
|
+
when "@"
|
|
227
|
+
line[1].chr == "@" ? :blue : nil
|
|
228
|
+
else
|
|
229
|
+
nil
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def pretty_json(data)
|
|
234
|
+
FFI_Yajl::Encoder.encode(data, pretty: true).lines.map { |l| l.chomp }
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def detect_cookbook_changes
|
|
238
|
+
all_locked_cookbooks = old_cookbook_locks.keys | new_cookbook_locks.keys
|
|
239
|
+
|
|
240
|
+
@added_cookbooks = []
|
|
241
|
+
@removed_cookbooks = []
|
|
242
|
+
@modified_cookbooks = []
|
|
243
|
+
|
|
244
|
+
all_locked_cookbooks.each do |cb_name|
|
|
245
|
+
if old_cookbook_locks.key?(cb_name) && new_cookbook_locks.key?(cb_name)
|
|
246
|
+
old_cb_lock = old_cookbook_locks[cb_name]
|
|
247
|
+
new_cb_lock = new_cookbook_locks[cb_name]
|
|
248
|
+
if old_cb_lock != new_cb_lock
|
|
249
|
+
@modified_cookbooks << cb_name
|
|
250
|
+
end
|
|
251
|
+
elsif old_cookbook_locks.key?(cb_name)
|
|
252
|
+
@removed_cookbooks << cb_name
|
|
253
|
+
elsif new_cookbook_locks.key?(cb_name)
|
|
254
|
+
@added_cookbooks << cb_name
|
|
255
|
+
else
|
|
256
|
+
raise "Bug: cookbook lock #{cb_name} cannot be determined as new/removed/modified/unmodified"
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
end
|