chef-dk 2.4.17 → 2.5.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 +5 -5
- data/Gemfile +121 -119
- data/Gemfile.lock +802 -817
- 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 -20
- 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 +126 -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 +151 -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 +150 -150
- data/lib/chef-dk/generator.rb +165 -165
- data/lib/chef-dk/helpers.rb +176 -176
- data/lib/chef-dk/pager.rb +105 -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 +164 -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/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 +123 -122
- 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 +122 -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 +312 -312
- data/lib/chef-dk/policyfile/source_uri.rb +57 -57
- data/lib/chef-dk/policyfile/storage_config.rb +102 -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 +420 -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 +200 -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 +236 -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 +107 -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 +54 -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 +152 -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/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 +22 -22
- 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 +756 -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/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 -161
- 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 +638 -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 +478 -478
- data/spec/unit/policyfile_services/install_spec.rb +209 -209
- data/spec/unit/policyfile_services/push_archive_spec.rb +374 -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 +5 -5
|
@@ -1,156 +1,156 @@
|
|
|
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/ui"
|
|
19
|
-
|
|
20
|
-
module ChefDK
|
|
21
|
-
module Policyfile
|
|
22
|
-
class IncludedPoliciesCookbookSource
|
|
23
|
-
|
|
24
|
-
class ConflictingCookbookVersions < StandardError
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
class ConflictingCookbookDependencies < StandardError
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
class ConflictingCookbookSources < StandardError
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# Why do we need this class?
|
|
34
|
-
# If we rely on default sources, we may not have the the universe of cookbooks
|
|
35
|
-
# provided in the included policies
|
|
36
|
-
#
|
|
37
|
-
# This is not meant to be used from the DSL
|
|
38
|
-
|
|
39
|
-
# A list of included policies
|
|
40
|
-
attr_reader :included_policy_location_specs
|
|
41
|
-
# UI object for output
|
|
42
|
-
attr_accessor :ui
|
|
43
|
-
|
|
44
|
-
# Constructor
|
|
45
|
-
#
|
|
46
|
-
def initialize(included_policy_location_specs)
|
|
47
|
-
@included_policy_location_specs = included_policy_location_specs
|
|
48
|
-
@ui = UI.new
|
|
49
|
-
@preferred_cookbooks = []
|
|
50
|
-
yield self if block_given?
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def default_source_args
|
|
54
|
-
[:included_policies, []]
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def check_for_conflicts!
|
|
58
|
-
source_options
|
|
59
|
-
universe_graph
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# All are preferred here
|
|
63
|
-
def preferred_source_for?(cookbook_name)
|
|
64
|
-
universe_graph.include?(cookbook_name)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def preferred_cookbooks
|
|
68
|
-
universe_graph.keys
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def ==(other)
|
|
72
|
-
other.kind_of?(self.class) && other.included_policy_location_specs == included_policy_location_specs
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Calls the slurp_metadata! helper once to calculate the @universe_graph
|
|
76
|
-
# and @cookbook_version_paths metadata. Returns the @universe_graph.
|
|
77
|
-
#
|
|
78
|
-
# @return [Hash] universe_graph
|
|
79
|
-
def universe_graph
|
|
80
|
-
@universe_graph ||= build_universe
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Returns the metadata (path and version) for an individual cookbook
|
|
84
|
-
#
|
|
85
|
-
# @return [Hash] metadata for a single cookbook version
|
|
86
|
-
def source_options_for(cookbook_name, cookbook_version)
|
|
87
|
-
source_options[cookbook_name][cookbook_version]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def null?
|
|
91
|
-
false
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def desc
|
|
95
|
-
"included_policies()"
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
private
|
|
99
|
-
|
|
100
|
-
def build_universe
|
|
101
|
-
included_policy_location_specs.inject({}) do |acc, policy_spec|
|
|
102
|
-
lock = policy_spec.policyfile_lock
|
|
103
|
-
cookbook_dependencies = lock.solution_dependencies.cookbook_dependencies
|
|
104
|
-
cookbook_dependencies.each do |(cookbook, deps)|
|
|
105
|
-
name = cookbook.name
|
|
106
|
-
version = cookbook.version
|
|
107
|
-
mapped_deps = deps.map do |dep|
|
|
108
|
-
[dep[0], dep[1].to_s]
|
|
109
|
-
end
|
|
110
|
-
if acc[name]
|
|
111
|
-
if acc[name][version]
|
|
112
|
-
if acc[name][version] != mapped_deps
|
|
113
|
-
raise ConflictingCookbookDependencies.new("Conflicting dependencies provided for cookbook #{name}")
|
|
114
|
-
end
|
|
115
|
-
else
|
|
116
|
-
raise ConflictingCookbookVersions.new("Multiple versions provided for cookbook #{name}")
|
|
117
|
-
end
|
|
118
|
-
else
|
|
119
|
-
acc[name] = {}
|
|
120
|
-
acc[name][version] = mapped_deps
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
acc
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def source_options
|
|
128
|
-
@source_options ||= build_source_options
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
## Collect all the source options
|
|
132
|
-
def build_source_options
|
|
133
|
-
included_policy_location_specs.inject({}) do |acc, policy_spec|
|
|
134
|
-
lock = policy_spec.policyfile_lock
|
|
135
|
-
lock.cookbook_locks.each do |(name, cookbook_lock)|
|
|
136
|
-
version = cookbook_lock.version
|
|
137
|
-
if acc[name]
|
|
138
|
-
if acc[name][version]
|
|
139
|
-
if acc[name][version] != cookbook_lock.source_options
|
|
140
|
-
raise ConflictingCookbookSources.new("Conflicting sources provided for cookbook #{name}")
|
|
141
|
-
end
|
|
142
|
-
else
|
|
143
|
-
raise ConflictingCookbookVersions.new("Multiple sources provided for cookbook #{name}")
|
|
144
|
-
end
|
|
145
|
-
else
|
|
146
|
-
acc[name] = {}
|
|
147
|
-
acc[name][version] = cookbook_lock.source_options
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
acc
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
end
|
|
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/ui"
|
|
19
|
+
|
|
20
|
+
module ChefDK
|
|
21
|
+
module Policyfile
|
|
22
|
+
class IncludedPoliciesCookbookSource
|
|
23
|
+
|
|
24
|
+
class ConflictingCookbookVersions < StandardError
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class ConflictingCookbookDependencies < StandardError
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class ConflictingCookbookSources < StandardError
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Why do we need this class?
|
|
34
|
+
# If we rely on default sources, we may not have the the universe of cookbooks
|
|
35
|
+
# provided in the included policies
|
|
36
|
+
#
|
|
37
|
+
# This is not meant to be used from the DSL
|
|
38
|
+
|
|
39
|
+
# A list of included policies
|
|
40
|
+
attr_reader :included_policy_location_specs
|
|
41
|
+
# UI object for output
|
|
42
|
+
attr_accessor :ui
|
|
43
|
+
|
|
44
|
+
# Constructor
|
|
45
|
+
#
|
|
46
|
+
def initialize(included_policy_location_specs)
|
|
47
|
+
@included_policy_location_specs = included_policy_location_specs
|
|
48
|
+
@ui = UI.new
|
|
49
|
+
@preferred_cookbooks = []
|
|
50
|
+
yield self if block_given?
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def default_source_args
|
|
54
|
+
[:included_policies, []]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def check_for_conflicts!
|
|
58
|
+
source_options
|
|
59
|
+
universe_graph
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# All are preferred here
|
|
63
|
+
def preferred_source_for?(cookbook_name)
|
|
64
|
+
universe_graph.include?(cookbook_name)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def preferred_cookbooks
|
|
68
|
+
universe_graph.keys
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ==(other)
|
|
72
|
+
other.kind_of?(self.class) && other.included_policy_location_specs == included_policy_location_specs
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Calls the slurp_metadata! helper once to calculate the @universe_graph
|
|
76
|
+
# and @cookbook_version_paths metadata. Returns the @universe_graph.
|
|
77
|
+
#
|
|
78
|
+
# @return [Hash] universe_graph
|
|
79
|
+
def universe_graph
|
|
80
|
+
@universe_graph ||= build_universe
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Returns the metadata (path and version) for an individual cookbook
|
|
84
|
+
#
|
|
85
|
+
# @return [Hash] metadata for a single cookbook version
|
|
86
|
+
def source_options_for(cookbook_name, cookbook_version)
|
|
87
|
+
source_options[cookbook_name][cookbook_version]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def null?
|
|
91
|
+
false
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def desc
|
|
95
|
+
"included_policies()"
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
private
|
|
99
|
+
|
|
100
|
+
def build_universe
|
|
101
|
+
included_policy_location_specs.inject({}) do |acc, policy_spec|
|
|
102
|
+
lock = policy_spec.policyfile_lock
|
|
103
|
+
cookbook_dependencies = lock.solution_dependencies.cookbook_dependencies
|
|
104
|
+
cookbook_dependencies.each do |(cookbook, deps)|
|
|
105
|
+
name = cookbook.name
|
|
106
|
+
version = cookbook.version
|
|
107
|
+
mapped_deps = deps.map do |dep|
|
|
108
|
+
[dep[0], dep[1].to_s]
|
|
109
|
+
end
|
|
110
|
+
if acc[name]
|
|
111
|
+
if acc[name][version]
|
|
112
|
+
if acc[name][version] != mapped_deps
|
|
113
|
+
raise ConflictingCookbookDependencies.new("Conflicting dependencies provided for cookbook #{name}")
|
|
114
|
+
end
|
|
115
|
+
else
|
|
116
|
+
raise ConflictingCookbookVersions.new("Multiple versions provided for cookbook #{name}")
|
|
117
|
+
end
|
|
118
|
+
else
|
|
119
|
+
acc[name] = {}
|
|
120
|
+
acc[name][version] = mapped_deps
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
acc
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def source_options
|
|
128
|
+
@source_options ||= build_source_options
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
## Collect all the source options
|
|
132
|
+
def build_source_options
|
|
133
|
+
included_policy_location_specs.inject({}) do |acc, policy_spec|
|
|
134
|
+
lock = policy_spec.policyfile_lock
|
|
135
|
+
lock.cookbook_locks.each do |(name, cookbook_lock)|
|
|
136
|
+
version = cookbook_lock.version
|
|
137
|
+
if acc[name]
|
|
138
|
+
if acc[name][version]
|
|
139
|
+
if acc[name][version] != cookbook_lock.source_options
|
|
140
|
+
raise ConflictingCookbookSources.new("Conflicting sources provided for cookbook #{name}")
|
|
141
|
+
end
|
|
142
|
+
else
|
|
143
|
+
raise ConflictingCookbookVersions.new("Multiple sources provided for cookbook #{name}")
|
|
144
|
+
end
|
|
145
|
+
else
|
|
146
|
+
acc[name] = {}
|
|
147
|
+
acc[name][version] = cookbook_lock.source_options
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
acc
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
@@ -1,229 +1,229 @@
|
|
|
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 "set"
|
|
19
|
-
|
|
20
|
-
require "chef/server_api"
|
|
21
|
-
require "chef-dk/service_exceptions"
|
|
22
|
-
|
|
23
|
-
module ChefDK
|
|
24
|
-
module Policyfile
|
|
25
|
-
|
|
26
|
-
class RevIDLockDataMap
|
|
27
|
-
|
|
28
|
-
attr_reader :policy_name
|
|
29
|
-
attr_reader :lock_info_by_rev_id
|
|
30
|
-
|
|
31
|
-
def initialize(policy_name, lock_info_by_rev_id)
|
|
32
|
-
@policy_name = policy_name
|
|
33
|
-
@lock_info_by_rev_id = lock_info_by_rev_id
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def cb_info_for(rev_id, cookbook_name)
|
|
37
|
-
lock = lock_info_by_rev_id[rev_id]
|
|
38
|
-
cookbook_lock = lock["cookbook_locks"][cookbook_name]
|
|
39
|
-
|
|
40
|
-
if cookbook_lock
|
|
41
|
-
[cookbook_lock["version"], cookbook_lock["identifier"] ]
|
|
42
|
-
else
|
|
43
|
-
nil
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def cbs_with_differing_ids
|
|
48
|
-
cbs_with_differing_ids = Set.new
|
|
49
|
-
all_cookbook_names.each do |cookbook_name|
|
|
50
|
-
all_identifiers = lock_info_by_rev_id.inject(Set.new) do |id_set, (_rev_id, rev_info)|
|
|
51
|
-
cookbook_lock = rev_info["cookbook_locks"][cookbook_name]
|
|
52
|
-
identifier = cookbook_lock && cookbook_lock["identifier"]
|
|
53
|
-
id_set << identifier
|
|
54
|
-
end
|
|
55
|
-
cbs_with_differing_ids << cookbook_name if all_identifiers.size > 1
|
|
56
|
-
end
|
|
57
|
-
cbs_with_differing_ids
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def all_cookbook_names
|
|
61
|
-
lock_info_by_rev_id.inject(Set.new) do |cb_set, (_rev_id, rev_info)|
|
|
62
|
-
cb_set.merge(rev_info["cookbook_locks"].keys)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
class PolicyGroupRevIDMap
|
|
68
|
-
|
|
69
|
-
include Enumerable
|
|
70
|
-
|
|
71
|
-
attr_reader :policy_name
|
|
72
|
-
attr_reader :revision_ids_by_group
|
|
73
|
-
|
|
74
|
-
def initialize(policy_name, revision_ids_by_group)
|
|
75
|
-
@policy_name = policy_name
|
|
76
|
-
@revision_ids_by_group = revision_ids_by_group
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def unique_revision_ids
|
|
80
|
-
revision_ids_by_group.values.uniq
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def policy_group_names
|
|
84
|
-
revision_ids_by_group.keys
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def max_group_name_length
|
|
88
|
-
policy_group_names.map(&:size).max
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def format_revision_ids
|
|
92
|
-
revision_ids_by_group.inject({}) do |map, (group_name, rev_id)|
|
|
93
|
-
map[group_name] = yield rev_id
|
|
94
|
-
map
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def empty?
|
|
99
|
-
policy_group_names.empty?
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def each
|
|
103
|
-
revision_ids_by_group.each do |group_name, rev_id|
|
|
104
|
-
yield group_name, rev_id
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
class Lister
|
|
110
|
-
|
|
111
|
-
attr_accessor :policy_lock_content
|
|
112
|
-
|
|
113
|
-
attr_reader :config
|
|
114
|
-
|
|
115
|
-
def initialize(config: nil)
|
|
116
|
-
@config = config
|
|
117
|
-
@policies_by_name = nil
|
|
118
|
-
@policies_by_group = nil
|
|
119
|
-
@policy_lock_content = {}
|
|
120
|
-
@active_revisions = nil
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# A Hash with the following format
|
|
124
|
-
# {
|
|
125
|
-
# "appserver" => {
|
|
126
|
-
# "1111111111111111111111111111111111111111111111111111111111111111" => {},
|
|
127
|
-
# "2222222222222222222222222222222222222222222222222222222222222222" => {}
|
|
128
|
-
# },
|
|
129
|
-
def policies_by_name
|
|
130
|
-
@policies_by_name || fetch_policy_lists
|
|
131
|
-
@policies_by_name
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# A Hash with the following format:
|
|
135
|
-
# "dev" => {
|
|
136
|
-
# "appserver" => "1111111111111111111111111111111111111111111111111111111111111111",
|
|
137
|
-
# "load-balancer" => "5555555555555555555555555555555555555555555555555555555555555555",
|
|
138
|
-
# "db" => "9999999999999999999999999999999999999999999999999999999999999999"
|
|
139
|
-
# }
|
|
140
|
-
def policies_by_group
|
|
141
|
-
@policies_by_group || fetch_policy_lists
|
|
142
|
-
@policies_by_group
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def revision_info_for(policy_name, _revision_id_list)
|
|
146
|
-
RevIDLockDataMap.new(policy_name, policy_lock_content[policy_name])
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def revision_ids_by_group_for_each_policy
|
|
150
|
-
policies_by_name.each do |policy_name, _policies|
|
|
151
|
-
rev_id_by_group = revision_ids_by_group_for(policy_name)
|
|
152
|
-
yield policy_name, rev_id_by_group
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def revision_ids_by_group_for(policy_name)
|
|
157
|
-
map = policies_by_group.inject({}) do |rev_id_map, (group_name, rev_id_map_for_group)|
|
|
158
|
-
rev_id_map[group_name] = rev_id_map_for_group[policy_name]
|
|
159
|
-
rev_id_map
|
|
160
|
-
end
|
|
161
|
-
PolicyGroupRevIDMap.new(policy_name, map)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def orphaned_revisions(policy_name)
|
|
165
|
-
orphans = []
|
|
166
|
-
policies_by_name[policy_name].each do |rev_id, _data|
|
|
167
|
-
orphans << rev_id unless active_revisions.include?(rev_id)
|
|
168
|
-
end
|
|
169
|
-
orphans
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def active_revisions
|
|
173
|
-
@active_revisions ||= policies_by_group.inject(Set.new) do |set, (_group, policy_name_rev_id_map)|
|
|
174
|
-
policy_name_rev_id_map.each do |policy_name, rev_id|
|
|
175
|
-
set << rev_id
|
|
176
|
-
end
|
|
177
|
-
set
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def empty?
|
|
182
|
-
policies_by_name.empty? && policies_by_group.empty?
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
def http_client
|
|
186
|
-
@http_client ||= Chef::ServerAPI.new(config.chef_server_url,
|
|
187
|
-
signing_key_filename: config.client_key,
|
|
188
|
-
client_name: config.node_name)
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
# @api private
|
|
192
|
-
# Sets internal copy of policyfile data to policies_by_name and
|
|
193
|
-
# policies_by_group. Used for internal testing.
|
|
194
|
-
def set!(policies_by_name, policies_by_group)
|
|
195
|
-
@policies_by_name = policies_by_name
|
|
196
|
-
@policies_by_group = policies_by_group
|
|
197
|
-
@active_revisions = nil
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
private
|
|
201
|
-
|
|
202
|
-
def fetch_policy_lists
|
|
203
|
-
policy_list_data = http_client.get("policies")
|
|
204
|
-
set_policies_by_name_from_api(policy_list_data)
|
|
205
|
-
|
|
206
|
-
policy_group_data = http_client.get("policy_groups")
|
|
207
|
-
set_policies_by_group_from_api(policy_group_data)
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
def set_policies_by_name_from_api(policy_list_data)
|
|
211
|
-
@policies_by_name = policy_list_data.inject({}) do |map, (policy_name, policy_info)|
|
|
212
|
-
map[policy_name] = policy_info["revisions"]
|
|
213
|
-
map
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def set_policies_by_group_from_api(policy_group_data)
|
|
218
|
-
@policies_by_group = policy_group_data.inject({}) do |map, (policy_group, policy_info)|
|
|
219
|
-
map[policy_group] = (policy_info["policies"] || []).inject({}) do |rev_map, (policy_name, rev_info)|
|
|
220
|
-
rev_map[policy_name] = rev_info["revision_id"]; rev_map
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
map
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
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 "set"
|
|
19
|
+
|
|
20
|
+
require "chef/server_api"
|
|
21
|
+
require "chef-dk/service_exceptions"
|
|
22
|
+
|
|
23
|
+
module ChefDK
|
|
24
|
+
module Policyfile
|
|
25
|
+
|
|
26
|
+
class RevIDLockDataMap
|
|
27
|
+
|
|
28
|
+
attr_reader :policy_name
|
|
29
|
+
attr_reader :lock_info_by_rev_id
|
|
30
|
+
|
|
31
|
+
def initialize(policy_name, lock_info_by_rev_id)
|
|
32
|
+
@policy_name = policy_name
|
|
33
|
+
@lock_info_by_rev_id = lock_info_by_rev_id
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def cb_info_for(rev_id, cookbook_name)
|
|
37
|
+
lock = lock_info_by_rev_id[rev_id]
|
|
38
|
+
cookbook_lock = lock["cookbook_locks"][cookbook_name]
|
|
39
|
+
|
|
40
|
+
if cookbook_lock
|
|
41
|
+
[cookbook_lock["version"], cookbook_lock["identifier"] ]
|
|
42
|
+
else
|
|
43
|
+
nil
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def cbs_with_differing_ids
|
|
48
|
+
cbs_with_differing_ids = Set.new
|
|
49
|
+
all_cookbook_names.each do |cookbook_name|
|
|
50
|
+
all_identifiers = lock_info_by_rev_id.inject(Set.new) do |id_set, (_rev_id, rev_info)|
|
|
51
|
+
cookbook_lock = rev_info["cookbook_locks"][cookbook_name]
|
|
52
|
+
identifier = cookbook_lock && cookbook_lock["identifier"]
|
|
53
|
+
id_set << identifier
|
|
54
|
+
end
|
|
55
|
+
cbs_with_differing_ids << cookbook_name if all_identifiers.size > 1
|
|
56
|
+
end
|
|
57
|
+
cbs_with_differing_ids
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def all_cookbook_names
|
|
61
|
+
lock_info_by_rev_id.inject(Set.new) do |cb_set, (_rev_id, rev_info)|
|
|
62
|
+
cb_set.merge(rev_info["cookbook_locks"].keys)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
class PolicyGroupRevIDMap
|
|
68
|
+
|
|
69
|
+
include Enumerable
|
|
70
|
+
|
|
71
|
+
attr_reader :policy_name
|
|
72
|
+
attr_reader :revision_ids_by_group
|
|
73
|
+
|
|
74
|
+
def initialize(policy_name, revision_ids_by_group)
|
|
75
|
+
@policy_name = policy_name
|
|
76
|
+
@revision_ids_by_group = revision_ids_by_group
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def unique_revision_ids
|
|
80
|
+
revision_ids_by_group.values.uniq
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def policy_group_names
|
|
84
|
+
revision_ids_by_group.keys
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def max_group_name_length
|
|
88
|
+
policy_group_names.map(&:size).max
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def format_revision_ids
|
|
92
|
+
revision_ids_by_group.inject({}) do |map, (group_name, rev_id)|
|
|
93
|
+
map[group_name] = yield rev_id
|
|
94
|
+
map
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def empty?
|
|
99
|
+
policy_group_names.empty?
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def each
|
|
103
|
+
revision_ids_by_group.each do |group_name, rev_id|
|
|
104
|
+
yield group_name, rev_id
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class Lister
|
|
110
|
+
|
|
111
|
+
attr_accessor :policy_lock_content
|
|
112
|
+
|
|
113
|
+
attr_reader :config
|
|
114
|
+
|
|
115
|
+
def initialize(config: nil)
|
|
116
|
+
@config = config
|
|
117
|
+
@policies_by_name = nil
|
|
118
|
+
@policies_by_group = nil
|
|
119
|
+
@policy_lock_content = {}
|
|
120
|
+
@active_revisions = nil
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# A Hash with the following format
|
|
124
|
+
# {
|
|
125
|
+
# "appserver" => {
|
|
126
|
+
# "1111111111111111111111111111111111111111111111111111111111111111" => {},
|
|
127
|
+
# "2222222222222222222222222222222222222222222222222222222222222222" => {}
|
|
128
|
+
# },
|
|
129
|
+
def policies_by_name
|
|
130
|
+
@policies_by_name || fetch_policy_lists
|
|
131
|
+
@policies_by_name
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# A Hash with the following format:
|
|
135
|
+
# "dev" => {
|
|
136
|
+
# "appserver" => "1111111111111111111111111111111111111111111111111111111111111111",
|
|
137
|
+
# "load-balancer" => "5555555555555555555555555555555555555555555555555555555555555555",
|
|
138
|
+
# "db" => "9999999999999999999999999999999999999999999999999999999999999999"
|
|
139
|
+
# }
|
|
140
|
+
def policies_by_group
|
|
141
|
+
@policies_by_group || fetch_policy_lists
|
|
142
|
+
@policies_by_group
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def revision_info_for(policy_name, _revision_id_list)
|
|
146
|
+
RevIDLockDataMap.new(policy_name, policy_lock_content[policy_name])
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def revision_ids_by_group_for_each_policy
|
|
150
|
+
policies_by_name.each do |policy_name, _policies|
|
|
151
|
+
rev_id_by_group = revision_ids_by_group_for(policy_name)
|
|
152
|
+
yield policy_name, rev_id_by_group
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def revision_ids_by_group_for(policy_name)
|
|
157
|
+
map = policies_by_group.inject({}) do |rev_id_map, (group_name, rev_id_map_for_group)|
|
|
158
|
+
rev_id_map[group_name] = rev_id_map_for_group[policy_name]
|
|
159
|
+
rev_id_map
|
|
160
|
+
end
|
|
161
|
+
PolicyGroupRevIDMap.new(policy_name, map)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def orphaned_revisions(policy_name)
|
|
165
|
+
orphans = []
|
|
166
|
+
policies_by_name[policy_name].each do |rev_id, _data|
|
|
167
|
+
orphans << rev_id unless active_revisions.include?(rev_id)
|
|
168
|
+
end
|
|
169
|
+
orphans
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def active_revisions
|
|
173
|
+
@active_revisions ||= policies_by_group.inject(Set.new) do |set, (_group, policy_name_rev_id_map)|
|
|
174
|
+
policy_name_rev_id_map.each do |policy_name, rev_id|
|
|
175
|
+
set << rev_id
|
|
176
|
+
end
|
|
177
|
+
set
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def empty?
|
|
182
|
+
policies_by_name.empty? && policies_by_group.empty?
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def http_client
|
|
186
|
+
@http_client ||= Chef::ServerAPI.new(config.chef_server_url,
|
|
187
|
+
signing_key_filename: config.client_key,
|
|
188
|
+
client_name: config.node_name)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# @api private
|
|
192
|
+
# Sets internal copy of policyfile data to policies_by_name and
|
|
193
|
+
# policies_by_group. Used for internal testing.
|
|
194
|
+
def set!(policies_by_name, policies_by_group)
|
|
195
|
+
@policies_by_name = policies_by_name
|
|
196
|
+
@policies_by_group = policies_by_group
|
|
197
|
+
@active_revisions = nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
private
|
|
201
|
+
|
|
202
|
+
def fetch_policy_lists
|
|
203
|
+
policy_list_data = http_client.get("policies")
|
|
204
|
+
set_policies_by_name_from_api(policy_list_data)
|
|
205
|
+
|
|
206
|
+
policy_group_data = http_client.get("policy_groups")
|
|
207
|
+
set_policies_by_group_from_api(policy_group_data)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def set_policies_by_name_from_api(policy_list_data)
|
|
211
|
+
@policies_by_name = policy_list_data.inject({}) do |map, (policy_name, policy_info)|
|
|
212
|
+
map[policy_name] = policy_info["revisions"]
|
|
213
|
+
map
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def set_policies_by_group_from_api(policy_group_data)
|
|
218
|
+
@policies_by_group = policy_group_data.inject({}) do |map, (policy_group, policy_info)|
|
|
219
|
+
map[policy_group] = (policy_info["policies"] || []).inject({}) do |rev_map, (policy_name, rev_info)|
|
|
220
|
+
rev_map[policy_name] = rev_info["revision_id"]; rev_map
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
map
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|