chef 10.34.6 → 11.0.0.beta.0
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.
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +4 -12
- data/bin/chef-apply +25 -0
- data/bin/chef-shell +34 -0
- data/bin/shef +6 -5
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/chef-expander.8.html +4 -4
- data/distro/common/html/chef-expanderctl.8.html +4 -4
- data/distro/common/html/chef-server-webui.8.html +4 -4
- data/distro/common/html/chef-server.8.html +4 -4
- data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
- data/distro/common/html/chef-solo.8.html +18 -12
- data/distro/common/html/chef-solr.8.html +4 -4
- data/distro/common/html/knife-bootstrap.1.html +4 -4
- data/distro/common/html/knife-client.1.html +4 -4
- data/distro/common/html/knife-configure.1.html +4 -4
- data/distro/common/html/knife-cookbook-site.1.html +4 -4
- data/distro/common/html/knife-cookbook.1.html +10 -7
- data/distro/common/html/knife-data-bag.1.html +10 -7
- data/distro/common/html/knife-environment.1.html +8 -6
- data/distro/common/html/knife-exec.1.html +9 -9
- data/distro/common/html/knife-index.1.html +4 -4
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/html/knife-role.1.html +4 -4
- data/distro/common/html/knife-search.1.html +4 -4
- data/distro/common/html/knife-ssh.1.html +4 -4
- data/distro/common/html/knife-status.1.html +4 -4
- data/distro/common/html/knife-tag.1.html +4 -4
- data/distro/common/html/knife.1.html +8 -13
- data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +1 -1
- data/distro/common/man/man1/knife-configure.1 +1 -1
- data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
- data/distro/common/man/man1/knife-cookbook.1 +15 -2
- data/distro/common/man/man1/knife-data-bag.1 +15 -2
- data/distro/common/man/man1/knife-environment.1 +12 -2
- data/distro/common/man/man1/knife-exec.1 +4 -7
- data/distro/common/man/man1/knife-index.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +1 -1
- data/distro/common/man/man1/knife-search.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife.1 +3 -6
- data/distro/common/man/man8/chef-client.8 +1 -1
- data/distro/common/man/man8/chef-expander.8 +1 -1
- data/distro/common/man/man8/chef-expanderctl.8 +1 -1
- data/distro/common/man/man8/chef-server-webui.8 +1 -1
- data/distro/common/man/man8/chef-server.8 +1 -1
- data/distro/common/man/man8/chef-solo.8 +36 -4
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
- data/distro/common/markdown/man1/knife-exec.mkd +11 -6
- data/distro/common/markdown/man1/knife.mkd +4 -9
- data/distro/debian/etc/default/chef-client +0 -1
- data/distro/debian/etc/init.d/chef-client +2 -2
- data/lib/chef.rb +2 -5
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +71 -14
- data/lib/chef/application/apply.rb +160 -0
- data/lib/chef/application/client.rb +25 -18
- data/lib/chef/application/knife.rb +0 -2
- data/lib/chef/application/solo.rb +23 -8
- data/lib/chef/application/windows_service.rb +5 -2
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +11 -0
- data/lib/chef/chef_fs/command_line.rb +232 -0
- data/lib/chef/chef_fs/file_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +358 -0
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
- data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
- data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
- data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
- data/lib/chef/chef_fs/knife.rb +77 -0
- data/lib/chef/chef_fs/path_utils.rb +64 -0
- data/lib/chef/client.rb +44 -21
- data/lib/chef/config.rb +52 -43
- data/lib/chef/cookbook/synchronizer.rb +6 -8
- data/lib/chef/cookbook/syntax_check.rb +61 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +17 -19
- data/lib/chef/cookbook_version.rb +3 -302
- data/lib/chef/daemon.rb +3 -18
- data/lib/chef/data_bag.rb +4 -97
- data/lib/chef/data_bag_item.rb +2 -65
- data/lib/chef/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +66 -0
- data/lib/chef/dsl/include_attribute.rb +60 -0
- data/lib/chef/dsl/include_recipe.rb +42 -0
- data/lib/chef/dsl/platform_introspection.rb +213 -0
- data/lib/chef/dsl/recipe.rb +84 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +74 -19
- data/lib/chef/environment.rb +9 -180
- data/lib/chef/exceptions.rb +87 -14
- data/lib/chef/formatters/base.rb +4 -1
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
- data/lib/chef/json_compat.rb +1 -97
- data/lib/chef/knife.rb +90 -41
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
- data/lib/chef/knife/configure.rb +1 -2
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +3 -2
- data/lib/chef/knife/cookbook_upload.rb +12 -7
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +26 -13
- data/lib/chef/knife/core/node_editor.rb +36 -16
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +15 -9
- data/lib/chef/knife/delete.rb +39 -0
- data/lib/chef/knife/diff.rb +46 -0
- data/lib/chef/knife/download.rb +50 -0
- data/lib/chef/knife/environment_show.rb +7 -0
- data/lib/chef/knife/exec.rb +5 -5
- data/lib/chef/knife/help_topics.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +91 -7
- data/lib/chef/knife/list.rb +109 -0
- data/lib/chef/knife/raw.rb +108 -0
- data/lib/chef/knife/search.rb +40 -22
- data/lib/chef/knife/show.rb +32 -0
- data/lib/chef/knife/ssh.rb +6 -2
- data/lib/chef/knife/upload.rb +50 -0
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +55 -197
- data/lib/chef/mixin/language.rb +9 -222
- data/lib/chef/mixin/language_include_attribute.rb +6 -38
- data/lib/chef/mixin/language_include_recipe.rb +3 -35
- data/lib/chef/mixin/params_validate.rb +6 -19
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +40 -0
- data/lib/chef/mixins.rb +0 -4
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/node.rb +133 -309
- data/lib/chef/node/attribute.rb +333 -473
- data/lib/chef/node/attribute_collections.rb +199 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +7 -22
- data/lib/chef/provider.rb +2 -49
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +5 -33
- data/lib/chef/provider/deploy.rb +2 -1
- data/lib/chef/provider/directory.rb +14 -17
- data/lib/chef/provider/file.rb +19 -52
- data/lib/chef/provider/group.rb +31 -51
- data/lib/chef/provider/group/dscl.rb +13 -53
- data/lib/chef/provider/group/gpasswd.rb +19 -14
- data/lib/chef/provider/group/groupadd.rb +1 -41
- data/lib/chef/provider/group/groupmod.rb +36 -46
- data/lib/chef/provider/group/pw.rb +16 -59
- data/lib/chef/provider/group/suse.rb +13 -16
- data/lib/chef/provider/group/usermod.rb +18 -40
- data/lib/chef/provider/group/windows.rb +6 -13
- data/lib/chef/provider/http_request.rb +25 -42
- data/lib/chef/provider/link.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +150 -0
- data/lib/chef/provider/package/portage.rb +4 -9
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +9 -41
- data/lib/chef/provider/package/yum.rb +12 -19
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +2 -0
- data/lib/chef/provider/remote_file.rb +21 -12
- data/lib/chef/provider/ruby_block.rb +5 -2
- data/lib/chef/provider/service.rb +15 -0
- data/lib/chef/provider/service/init.rb +9 -7
- data/lib/chef/provider/service/macosx.rb +15 -73
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +3 -3
- data/lib/chef/provider/template.rb +22 -25
- data/lib/chef/provider/template_finder.rb +61 -0
- data/lib/chef/provider/user.rb +0 -1
- data/lib/chef/provider/user/dscl.rb +175 -568
- data/lib/chef/provider/user/useradd.rb +30 -47
- data/lib/chef/providers.rb +3 -2
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +13 -154
- data/lib/chef/resource/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/lwrp_base.rb +127 -0
- data/lib/chef/resource/mount.rb +10 -11
- data/lib/chef/resource/registry_key.rb +86 -0
- data/lib/chef/resource/remote_directory.rb +6 -5
- data/lib/chef/resource/remote_file.rb +22 -31
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource_collection.rb +25 -21
- data/lib/chef/resources.rb +2 -1
- data/lib/chef/rest.rb +50 -131
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +2 -7
- data/lib/chef/role.rb +1 -97
- data/lib/chef/run_context.rb +108 -130
- data/lib/chef/run_context/cookbook_compiler.rb +280 -0
- data/lib/chef/run_list.rb +0 -2
- data/lib/chef/run_list/run_list_expansion.rb +0 -15
- data/lib/chef/run_lock.rb +90 -0
- data/lib/chef/runner.rb +28 -5
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +2 -4
- data/lib/chef/shef/ext.rb +3 -575
- data/lib/chef/{shef.rb → shell.rb} +35 -40
- data/lib/chef/shell/ext.rb +593 -0
- data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
- data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
- data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/util/windows/net_group.rb +1 -5
- data/lib/chef/version.rb +3 -3
- data/lib/chef/win32/api/process.rb +0 -1
- data/lib/chef/win32/handle.rb +1 -8
- data/lib/chef/win32/registry.rb +371 -0
- data/spec/data/big_json.json +1 -2
- data/spec/data/big_json_plus_one.json +1 -2
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
- data/spec/data/nodes/default.rb +3 -3
- data/spec/data/nodes/test.example.com.rb +3 -3
- data/spec/data/nodes/test.rb +3 -3
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
- data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
- data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
- data/spec/data/shef-config.rb +7 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +2 -2
- data/spec/functional/knife/ssh_spec.rb +5 -1
- data/spec/functional/resource/cookbook_file_spec.rb +7 -19
- data/spec/functional/resource/directory_spec.rb +4 -0
- data/spec/functional/resource/file_spec.rb +56 -22
- data/spec/functional/resource/link_spec.rb +2 -0
- data/spec/functional/resource/registry_spec.rb +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +142 -36
- data/spec/functional/resource/remote_file_spec.rb +18 -0
- data/spec/functional/resource/template_spec.rb +23 -2
- data/spec/functional/run_lock_spec.rb +106 -0
- data/spec/functional/shell_spec.rb +100 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/spec_helper.rb +5 -29
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +0 -2
- data/spec/support/platform_helpers.rb +8 -15
- data/spec/support/shared/functional/directory_resource.rb +84 -22
- data/spec/support/shared/functional/file_resource.rb +169 -71
- data/spec/support/shared/functional/securable_resource.rb +143 -119
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
- data/spec/support/shared/unit/file_system_support.rb +110 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/unit/api_client/registration_spec.rb +175 -0
- data/spec/unit/api_client_spec.rb +78 -156
- data/spec/unit/application/apply.rb +84 -0
- data/spec/unit/application/client_spec.rb +1 -37
- data/spec/unit/application/knife_spec.rb +5 -0
- data/spec/unit/application_spec.rb +57 -2
- data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
- data/spec/unit/chef_fs/diff_spec.rb +328 -0
- data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
- data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
- data/spec/unit/chef_fs/file_system_spec.rb +136 -0
- data/spec/unit/client_spec.rb +124 -33
- data/spec/unit/config_spec.rb +46 -13
- data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
- data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
- data/spec/unit/cookbook_loader_spec.rb +153 -91
- data/spec/unit/cookbook_manifest_spec.rb +81 -81
- data/spec/unit/cookbook_spec.rb +3 -20
- data/spec/unit/cookbook_version_spec.rb +23 -122
- data/spec/unit/daemon_spec.rb +3 -24
- data/spec/unit/data_bag_spec.rb +6 -4
- data/spec/unit/digester_spec.rb +50 -0
- data/spec/unit/dsl/data_query_spec.rb +66 -0
- data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
- data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
- data/spec/unit/environment_spec.rb +0 -130
- data/spec/unit/exceptions_spec.rb +2 -3
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
- data/spec/unit/json_compat_spec.rb +15 -7
- data/spec/unit/knife/bootstrap_spec.rb +2 -0
- data/spec/unit/knife/configure_spec.rb +20 -14
- data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
- data/spec/unit/knife/cookbook_test_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
- data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +156 -125
- data/spec/unit/knife/data_bag_create_spec.rb +9 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
- data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
- data/spec/unit/knife/data_bag_show_spec.rb +11 -4
- data/spec/unit/knife/index_rebuild_spec.rb +96 -33
- data/spec/unit/knife/knife_help.rb +7 -7
- data/spec/unit/knife/node_edit_spec.rb +6 -33
- data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife_spec.rb +53 -0
- data/spec/unit/lwrp_spec.rb +59 -42
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +101 -799
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -37
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +119 -0
- data/spec/unit/node/attribute_spec.rb +195 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +366 -370
- data/spec/unit/platform_spec.rb +9 -10
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file_spec.rb +4 -8
- data/spec/unit/provider/directory_spec.rb +96 -64
- data/spec/unit/provider/env_spec.rb +2 -2
- data/spec/unit/provider/file_spec.rb +48 -39
- data/spec/unit/provider/group/dscl_spec.rb +0 -36
- data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
- data/spec/unit/provider/group/groupadd_spec.rb +4 -3
- data/spec/unit/provider/group/groupmod_spec.rb +1 -0
- data/spec/unit/provider/group/pw_spec.rb +15 -12
- data/spec/unit/provider/group/usermod_spec.rb +6 -21
- data/spec/unit/provider/group/windows_spec.rb +8 -0
- data/spec/unit/provider/group_spec.rb +6 -28
- data/spec/unit/provider/http_request_spec.rb +28 -69
- data/spec/unit/provider/ifconfig_spec.rb +2 -2
- data/spec/unit/provider/ohai_spec.rb +4 -4
- data/spec/unit/provider/package/apt_spec.rb +0 -1
- data/spec/unit/provider/package/ips_spec.rb +0 -1
- data/spec/unit/provider/package/portage_spec.rb +0 -44
- data/spec/unit/provider/package/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -44
- data/spec/unit/provider/package/yum_spec.rb +39 -36
- data/spec/unit/provider/package_spec.rb +7 -5
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -3
- data/spec/unit/provider/remote_file_spec.rb +36 -0
- data/spec/unit/provider/route_spec.rb +4 -3
- data/spec/unit/provider/ruby_block_spec.rb +8 -0
- data/spec/unit/provider/service/arch_service_spec.rb +5 -5
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
- data/spec/unit/provider/service/init_service_spec.rb +27 -4
- data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
- data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +11 -66
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/simple_service_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template_spec.rb +35 -11
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/useradd_spec.rb +1 -22
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +374 -0
- data/spec/unit/resource/mount_spec.rb +0 -11
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +21 -23
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource_spec.rb +4 -19
- data/spec/unit/rest/auth_credentials_spec.rb +2 -19
- data/spec/unit/rest_spec.rb +130 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
- data/spec/unit/run_context_spec.rb +18 -4
- data/spec/unit/run_list_spec.rb +0 -209
- data/spec/unit/run_lock_spec.rb +37 -0
- data/spec/unit/runner_spec.rb +101 -2
- data/spec/unit/scan_access_control_spec.rb +4 -4
- data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
- data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
- data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- metadata +275 -234
- checksums.yaml +0 -15
- data/README.rdoc +0 -177
- data/distro/common/html/knife-recipe.1.html +0 -92
- data/lib/chef/certificate.rb +0 -161
- data/lib/chef/checksum.rb +0 -167
- data/lib/chef/checksum_cache.rb +0 -190
- data/lib/chef/cookbook_version_selector.rb +0 -168
- data/lib/chef/couchdb.rb +0 -246
- data/lib/chef/index_queue/amqp_client.rb +0 -116
- data/lib/chef/index_queue/consumer.rb +0 -76
- data/lib/chef/index_queue/indexable.rb +0 -109
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
- data/lib/chef/monkey_patches/moneta.rb +0 -50
- data/lib/chef/monkey_patches/uri.rb +0 -70
- data/lib/chef/openid_registration.rb +0 -187
- data/lib/chef/provider/user/solaris.rb +0 -90
- data/lib/chef/solr_query.rb +0 -187
- data/lib/chef/solr_query/lucene.treetop +0 -150
- data/lib/chef/solr_query/lucene_nodes.rb +0 -285
- data/lib/chef/solr_query/query_transform.rb +0 -65
- data/lib/chef/solr_query/solr_http_request.rb +0 -132
- data/lib/chef/webui_user.rb +0 -231
- data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
- data/spec/data/mac_users/10.7-8.plist.xml +0 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
- data/spec/data/mac_users/10.7.plist.xml +0 -559
- data/spec/data/mac_users/10.7.shadow.xml +0 -11
- data/spec/data/mac_users/10.8.plist.xml +0 -559
- data/spec/data/mac_users/10.8.shadow.xml +0 -21
- data/spec/data/mac_users/10.9.plist.xml +0 -560
- data/spec/data/mac_users/10.9.shadow.xml +0 -21
- data/spec/functional/resource/base.rb +0 -40
- data/spec/functional/resource/group_spec.rb +0 -343
- data/spec/functional/resource/user/dscl_spec.rb +0 -199
- data/spec/unit/certificate_spec.rb +0 -76
- data/spec/unit/checksum_cache_spec.rb +0 -209
- data/spec/unit/checksum_spec.rb +0 -94
- data/spec/unit/couchdb_spec.rb +0 -274
- data/spec/unit/index_queue_spec.rb +0 -391
- data/spec/unit/mixin/language_spec.rb +0 -305
- data/spec/unit/openid_registration_spec.rb +0 -153
- data/spec/unit/provider/user/solaris_spec.rb +0 -414
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
- data/spec/unit/solr_query/query_transform_spec.rb +0 -454
- data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
- data/spec/unit/solr_query_spec.rb +0 -203
- data/spec/unit/webui_user_spec.rb +0 -238
|
@@ -20,6 +20,7 @@ require 'base64'
|
|
|
20
20
|
require 'openssl'
|
|
21
21
|
require 'chef/data_bag_item'
|
|
22
22
|
require 'yaml'
|
|
23
|
+
require 'yajl'
|
|
23
24
|
require 'open-uri'
|
|
24
25
|
|
|
25
26
|
# An EncryptedDataBagItem represents a read-only data bag item where
|
|
@@ -59,6 +60,78 @@ class Chef::EncryptedDataBagItem
|
|
|
59
60
|
class UnsupportedCipher < StandardError
|
|
60
61
|
end
|
|
61
62
|
|
|
63
|
+
# Implementation class for converting plaintext data bag item values to an
|
|
64
|
+
# encrypted value, including any necessary wrappers and metadata.
|
|
65
|
+
class Encryptor
|
|
66
|
+
|
|
67
|
+
attr_reader :key
|
|
68
|
+
attr_reader :plaintext_data
|
|
69
|
+
|
|
70
|
+
# Create a new Encryptor for +data+, which will be encrypted with the given
|
|
71
|
+
# +key+.
|
|
72
|
+
#
|
|
73
|
+
# === Arguments:
|
|
74
|
+
# * data: An object of any type that can be serialized to json
|
|
75
|
+
# * key: A String representing the desired passphrase
|
|
76
|
+
# * iv: The optional +iv+ parameter is intended for testing use only. When
|
|
77
|
+
# *not* supplied, Encryptor will use OpenSSL to generate a secure random
|
|
78
|
+
# IV, which is what you want.
|
|
79
|
+
def initialize(plaintext_data, key, iv=nil)
|
|
80
|
+
@plaintext_data = plaintext_data
|
|
81
|
+
@key = key
|
|
82
|
+
@iv = iv && Base64.decode64(iv)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Returns a wrapped and encrypted version of +plaintext_data+ suitable for
|
|
86
|
+
# using as the value in an encrypted data bag item.
|
|
87
|
+
def for_encrypted_item
|
|
88
|
+
{
|
|
89
|
+
"encrypted_data" => encrypted_data,
|
|
90
|
+
"iv" => Base64.encode64(iv),
|
|
91
|
+
"version" => 1,
|
|
92
|
+
"cipher" => ALGORITHM
|
|
93
|
+
}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Generates or returns the IV.
|
|
97
|
+
def iv
|
|
98
|
+
# Generated IV comes from OpenSSL::Cipher::Cipher#random_iv
|
|
99
|
+
# This gets generated when +openssl_encryptor+ gets created.
|
|
100
|
+
openssl_encryptor if @iv.nil?
|
|
101
|
+
@iv
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Generates (and memoizes) an OpenSSL::Cipher::Cipher object and configures
|
|
105
|
+
# it for the specified iv and encryption key.
|
|
106
|
+
def openssl_encryptor
|
|
107
|
+
@openssl_encryptor ||= begin
|
|
108
|
+
encryptor = OpenSSL::Cipher::Cipher.new(ALGORITHM)
|
|
109
|
+
encryptor.encrypt
|
|
110
|
+
@iv ||= encryptor.random_iv
|
|
111
|
+
encryptor.iv = @iv
|
|
112
|
+
encryptor.key = Digest::SHA256.digest(key)
|
|
113
|
+
encryptor
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Encrypts and Base64 encodes +serialized_data+
|
|
118
|
+
def encrypted_data
|
|
119
|
+
@encrypted_data ||= begin
|
|
120
|
+
enc_data = openssl_encryptor.update(serialized_data)
|
|
121
|
+
enc_data << openssl_encryptor.final
|
|
122
|
+
Base64.encode64(enc_data)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Wraps the data in a single key Hash (JSON Object) and converts to JSON.
|
|
127
|
+
# The wrapper is required because we accept values (such as Integers or
|
|
128
|
+
# Strings) that do not produce valid JSON when serialized without the
|
|
129
|
+
# wrapper.
|
|
130
|
+
def serialized_data
|
|
131
|
+
Yajl::Encoder.encode(:json_wrapper => plaintext_data)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
62
135
|
#=== Decryptor
|
|
63
136
|
# For backwards compatibility, Chef implements decryption/deserialization for
|
|
64
137
|
# older encrypted data bag item formats in addition to the current version.
|
|
@@ -206,14 +279,10 @@ class Chef::EncryptedDataBagItem
|
|
|
206
279
|
@enc_hash.keys.inject({}) { |hash, key| hash[key] = self[key]; hash }
|
|
207
280
|
end
|
|
208
281
|
|
|
209
|
-
def self.from_plain_hash(plain_hash, secret)
|
|
210
|
-
self.new(self.encrypt_data_bag_item(plain_hash, secret), secret)
|
|
211
|
-
end
|
|
212
|
-
|
|
213
282
|
def self.encrypt_data_bag_item(plain_hash, secret)
|
|
214
283
|
plain_hash.inject({}) do |h, (key, val)|
|
|
215
284
|
h[key] = if key != "id"
|
|
216
|
-
|
|
285
|
+
Encryptor.new(val, secret).for_encrypted_item
|
|
217
286
|
else
|
|
218
287
|
val
|
|
219
288
|
end
|
|
@@ -227,10 +296,6 @@ class Chef::EncryptedDataBagItem
|
|
|
227
296
|
self.new(raw_hash, secret)
|
|
228
297
|
end
|
|
229
298
|
|
|
230
|
-
def self.encrypt_value(value, key)
|
|
231
|
-
Base64.encode64(self.cipher(:encrypt, value.to_yaml, key))
|
|
232
|
-
end
|
|
233
|
-
|
|
234
299
|
def self.load_secret(path=nil)
|
|
235
300
|
path = path || Chef::Config[:encrypted_data_bag_secret] || DEFAULT_SECRET_FILE
|
|
236
301
|
secret = case path
|
|
@@ -255,14 +320,4 @@ class Chef::EncryptedDataBagItem
|
|
|
255
320
|
secret
|
|
256
321
|
end
|
|
257
322
|
|
|
258
|
-
protected
|
|
259
|
-
|
|
260
|
-
def self.cipher(direction, data, key)
|
|
261
|
-
cipher = OpenSSL::Cipher::Cipher.new(ALGORITHM)
|
|
262
|
-
cipher.send(direction)
|
|
263
|
-
cipher.pkcs5_keyivgen(key)
|
|
264
|
-
ans = cipher.update(data)
|
|
265
|
-
ans << cipher.final
|
|
266
|
-
ans
|
|
267
|
-
end
|
|
268
323
|
end
|
data/lib/chef/environment.rb
CHANGED
|
@@ -22,8 +22,6 @@ require 'chef/config'
|
|
|
22
22
|
require 'chef/mash'
|
|
23
23
|
require 'chef/mixin/params_validate'
|
|
24
24
|
require 'chef/mixin/from_file'
|
|
25
|
-
require 'chef/couchdb'
|
|
26
|
-
require 'chef/index_queue'
|
|
27
25
|
require 'chef/version_constraint'
|
|
28
26
|
|
|
29
27
|
class Chef
|
|
@@ -33,52 +31,15 @@ class Chef
|
|
|
33
31
|
|
|
34
32
|
include Chef::Mixin::ParamsValidate
|
|
35
33
|
include Chef::Mixin::FromFile
|
|
36
|
-
include Chef::IndexQueue::Indexable
|
|
37
34
|
|
|
38
35
|
COMBINED_COOKBOOK_CONSTRAINT = /(.+)(?:[\s]+)((?:#{Chef::VersionConstraint::OPS.join('|')})(?:[\s]+).+)$/.freeze
|
|
39
36
|
|
|
40
|
-
|
|
41
|
-
attr_reader :couchdb_id
|
|
42
|
-
|
|
43
|
-
DESIGN_DOCUMENT = {
|
|
44
|
-
"version" => 1,
|
|
45
|
-
"language" => "javascript",
|
|
46
|
-
"views" => {
|
|
47
|
-
"all" => {
|
|
48
|
-
"map" => <<-EOJS
|
|
49
|
-
function(doc) {
|
|
50
|
-
if (doc.chef_type == "environment") {
|
|
51
|
-
emit(doc.name, doc);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
EOJS
|
|
55
|
-
},
|
|
56
|
-
"all_id" => {
|
|
57
|
-
"map" => <<-EOJS
|
|
58
|
-
function(doc) {
|
|
59
|
-
if (doc.chef_type == "environment") {
|
|
60
|
-
emit(doc.name, doc.name);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
EOJS
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
def initialize(couchdb=nil)
|
|
37
|
+
def initialize
|
|
69
38
|
@name = ''
|
|
70
39
|
@description = ''
|
|
71
40
|
@default_attributes = Mash.new
|
|
72
41
|
@override_attributes = Mash.new
|
|
73
42
|
@cookbook_versions = Hash.new
|
|
74
|
-
@couchdb_rev = nil
|
|
75
|
-
@couchdb_id = nil
|
|
76
|
-
@couchdb = couchdb || Chef::CouchDB.new
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def couchdb_id=(value)
|
|
80
|
-
@couchdb_id = value
|
|
81
|
-
self.index_id = value
|
|
82
43
|
end
|
|
83
44
|
|
|
84
45
|
def chef_server_rest
|
|
@@ -113,6 +74,10 @@ class Chef
|
|
|
113
74
|
)
|
|
114
75
|
end
|
|
115
76
|
|
|
77
|
+
def default_attributes=(attrs)
|
|
78
|
+
default_attributes(attrs)
|
|
79
|
+
end
|
|
80
|
+
|
|
116
81
|
def override_attributes(arg=nil)
|
|
117
82
|
set_or_return(
|
|
118
83
|
:override_attributes,
|
|
@@ -121,6 +86,10 @@ class Chef
|
|
|
121
86
|
)
|
|
122
87
|
end
|
|
123
88
|
|
|
89
|
+
def override_attributes=(attrs)
|
|
90
|
+
override_attributes(attrs)
|
|
91
|
+
end
|
|
92
|
+
|
|
124
93
|
def cookbook_versions(arg=nil)
|
|
125
94
|
set_or_return(
|
|
126
95
|
:cookbook_versions,
|
|
@@ -155,7 +124,6 @@ class Chef
|
|
|
155
124
|
"default_attributes" => @default_attributes,
|
|
156
125
|
"override_attributes" => @override_attributes
|
|
157
126
|
}
|
|
158
|
-
result["_rev"] = couchdb_rev if couchdb_rev
|
|
159
127
|
result
|
|
160
128
|
end
|
|
161
129
|
|
|
@@ -252,17 +220,9 @@ class Chef
|
|
|
252
220
|
environment.cookbook_versions(o["cookbook_versions"])
|
|
253
221
|
environment.default_attributes(o["default_attributes"])
|
|
254
222
|
environment.override_attributes(o["override_attributes"])
|
|
255
|
-
environment.couchdb_rev = o["_rev"] if o.has_key?("_rev")
|
|
256
|
-
environment.couchdb_id = o["_id"] if o.has_key?("_id")
|
|
257
223
|
environment
|
|
258
224
|
end
|
|
259
225
|
|
|
260
|
-
def self.cdb_list(inflate=false, couchdb=nil)
|
|
261
|
-
es = (couchdb || Chef::CouchDB.new).list("environments", inflate)
|
|
262
|
-
lookup = (inflate ? "value" : "key")
|
|
263
|
-
es["rows"].collect { |e| e[lookup] }
|
|
264
|
-
end
|
|
265
|
-
|
|
266
226
|
def self.list(inflate=false)
|
|
267
227
|
if inflate
|
|
268
228
|
response = Hash.new
|
|
@@ -275,34 +235,14 @@ class Chef
|
|
|
275
235
|
end
|
|
276
236
|
end
|
|
277
237
|
|
|
278
|
-
def self.cdb_load(name, couchdb=nil)
|
|
279
|
-
(couchdb || Chef::CouchDB.new).load("environment", name)
|
|
280
|
-
end
|
|
281
|
-
|
|
282
238
|
def self.load(name)
|
|
283
239
|
chef_server_rest.get_rest("environments/#{name}")
|
|
284
240
|
end
|
|
285
241
|
|
|
286
|
-
def self.exists?(name, couchdb)
|
|
287
|
-
begin
|
|
288
|
-
self.cdb_load(name, couchdb)
|
|
289
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
|
290
|
-
nil
|
|
291
|
-
end
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
def cdb_destroy
|
|
295
|
-
couchdb.delete("environment", @name, couchdb_rev)
|
|
296
|
-
end
|
|
297
|
-
|
|
298
242
|
def destroy
|
|
299
243
|
chef_server_rest.delete_rest("environments/#{@name}")
|
|
300
244
|
end
|
|
301
245
|
|
|
302
|
-
def cdb_save
|
|
303
|
-
self.couchdb_rev = couchdb.store("environment", @name, self)["rev"]
|
|
304
|
-
end
|
|
305
|
-
|
|
306
246
|
def save
|
|
307
247
|
begin
|
|
308
248
|
chef_server_rest.put_rest("environments/#{@name}", self)
|
|
@@ -318,106 +258,6 @@ class Chef
|
|
|
318
258
|
self
|
|
319
259
|
end
|
|
320
260
|
|
|
321
|
-
# Set up our CouchDB design document
|
|
322
|
-
def self.create_design_document(couchdb=nil)
|
|
323
|
-
(couchdb || Chef::CouchDB.new).create_design_document("environments", DESIGN_DOCUMENT)
|
|
324
|
-
end
|
|
325
|
-
|
|
326
|
-
# Loads the set of Chef::CookbookVersion objects available to a given environment
|
|
327
|
-
# === Returns
|
|
328
|
-
# Hash
|
|
329
|
-
# i.e.
|
|
330
|
-
# {
|
|
331
|
-
# "cookbook_name" => [ Chef::CookbookVersion ... ] ## the array of CookbookVersions is sorted highest to lowest
|
|
332
|
-
# }
|
|
333
|
-
#
|
|
334
|
-
# There will be a key for every cookbook. If no CookbookVersions
|
|
335
|
-
# are available for the specified environment the value will be an
|
|
336
|
-
# empty list.
|
|
337
|
-
#
|
|
338
|
-
def self.cdb_load_filtered_cookbook_versions(name, couchdb=nil)
|
|
339
|
-
version_constraints = cdb_load(name, couchdb).cookbook_versions.inject({}) {|res, (k,v)| res[k] = Chef::VersionConstraint.new(v); res}
|
|
340
|
-
|
|
341
|
-
# inject all cookbooks into the hash while filtering out restricted versions, then sort the individual arrays
|
|
342
|
-
cookbook_list = Chef::CookbookVersion.cdb_list(true, couchdb)
|
|
343
|
-
|
|
344
|
-
filtered_list = cookbook_list.inject({}) do |res, cookbook|
|
|
345
|
-
# FIXME: should cookbook.version return a Chef::Version?
|
|
346
|
-
version = Chef::Version.new(cookbook.version)
|
|
347
|
-
requirement_satisfied = version_constraints.has_key?(cookbook.name) ? version_constraints[cookbook.name].include?(version) : true
|
|
348
|
-
# we want a key for every cookbook, even if no versions are available
|
|
349
|
-
res[cookbook.name] ||= []
|
|
350
|
-
res[cookbook.name] << cookbook if requirement_satisfied
|
|
351
|
-
res
|
|
352
|
-
end
|
|
353
|
-
|
|
354
|
-
sorted_list = filtered_list.inject({}) do |res, (cookbook_name, versions)|
|
|
355
|
-
res[cookbook_name] = versions.sort.reverse
|
|
356
|
-
res
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
sorted_list
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
# Like +cdb_load_filtered_cookbook_versions+, loads the set of
|
|
363
|
-
# cookbooks available in a given environment. The difference is that
|
|
364
|
-
# this method will load Chef::MinimalCookbookVersion objects that
|
|
365
|
-
# contain only the information necessary for solving a cookbook
|
|
366
|
-
# collection for a given run list. The user of this method must call
|
|
367
|
-
# Chef::MinimalCookbookVersion.load_full_versions_of() after solving
|
|
368
|
-
# the cookbook collection to get the full objects.
|
|
369
|
-
# === Returns
|
|
370
|
-
# Hash
|
|
371
|
-
# i.e.
|
|
372
|
-
# {
|
|
373
|
-
# "cookbook_name" => [ Chef::CookbookVersion ... ] ## the array of CookbookVersions is sorted highest to lowest
|
|
374
|
-
# }
|
|
375
|
-
#
|
|
376
|
-
# There will be a key for every cookbook. If no CookbookVersions
|
|
377
|
-
# are available for the specified environment the value will be an
|
|
378
|
-
# empty list.
|
|
379
|
-
def self.cdb_minimal_filtered_versions(name, couchdb=nil)
|
|
380
|
-
version_constraints = cdb_load(name, couchdb).cookbook_versions.inject({}) {|res, (k,v)| res[k] = Chef::VersionConstraint.new(v); res}
|
|
381
|
-
|
|
382
|
-
# inject all cookbooks into the hash while filtering out restricted versions, then sort the individual arrays
|
|
383
|
-
cookbook_list = Chef::MinimalCookbookVersion.load_all(couchdb)
|
|
384
|
-
|
|
385
|
-
filtered_list = cookbook_list.inject({}) do |res, cookbook|
|
|
386
|
-
# FIXME: should cookbook.version return a Chef::Version?
|
|
387
|
-
version = Chef::Version.new(cookbook.version)
|
|
388
|
-
requirement_satisfied = version_constraints.has_key?(cookbook.name) ? version_constraints[cookbook.name].include?(version) : true
|
|
389
|
-
# we want a key for every cookbook, even if no versions are available
|
|
390
|
-
res[cookbook.name] ||= []
|
|
391
|
-
res[cookbook.name] << cookbook if requirement_satisfied
|
|
392
|
-
res
|
|
393
|
-
end
|
|
394
|
-
|
|
395
|
-
sorted_list = filtered_list.inject({}) do |res, (cookbook_name, versions)|
|
|
396
|
-
res[cookbook_name] = versions.sort.reverse
|
|
397
|
-
res
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
sorted_list
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
def self.cdb_load_filtered_recipe_list(name, couchdb=nil)
|
|
404
|
-
cdb_load_filtered_cookbook_versions(name, couchdb).map do |cb_name, cb|
|
|
405
|
-
if cb.empty? # no available versions
|
|
406
|
-
[] # empty list elided with flatten
|
|
407
|
-
else
|
|
408
|
-
latest_version = cb.first
|
|
409
|
-
latest_version.recipe_filenames_by_name.keys.map do |recipe|
|
|
410
|
-
case recipe
|
|
411
|
-
when DEFAULT
|
|
412
|
-
cb_name
|
|
413
|
-
else
|
|
414
|
-
"#{cb_name}::#{recipe}"
|
|
415
|
-
end
|
|
416
|
-
end
|
|
417
|
-
end
|
|
418
|
-
end.flatten
|
|
419
|
-
end
|
|
420
|
-
|
|
421
261
|
def self.load_filtered_recipe_list(environment)
|
|
422
262
|
chef_server_rest.get_rest("environments/#{environment}/recipes")
|
|
423
263
|
end
|
|
@@ -443,16 +283,5 @@ class Chef
|
|
|
443
283
|
end
|
|
444
284
|
end
|
|
445
285
|
|
|
446
|
-
def self.create_default_environment(couchdb=nil)
|
|
447
|
-
couchdb = couchdb || Chef::CouchDB.new
|
|
448
|
-
begin
|
|
449
|
-
Chef::Environment.cdb_load('_default', couchdb)
|
|
450
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
|
451
|
-
env = Chef::Environment.new(couchdb)
|
|
452
|
-
env.name '_default'
|
|
453
|
-
env.description 'The default Chef environment'
|
|
454
|
-
env.cdb_save
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
286
|
end
|
|
458
287
|
end
|
data/lib/chef/exceptions.rb
CHANGED
|
@@ -21,6 +21,21 @@ class Chef
|
|
|
21
21
|
# Chef's custom exceptions are all contained within the Chef::Exceptions
|
|
22
22
|
# namespace.
|
|
23
23
|
class Exceptions
|
|
24
|
+
|
|
25
|
+
# Backcompat with Chef::ShellOut code:
|
|
26
|
+
require 'mixlib/shellout/exceptions'
|
|
27
|
+
|
|
28
|
+
def self.const_missing(const_name)
|
|
29
|
+
if const_name == :ShellCommandFailed
|
|
30
|
+
Chef::Log.warn("Chef::Exceptions::ShellCommandFailed is deprecated, use Mixlib::ShellOut::ShellCommandFailed")
|
|
31
|
+
called_from = caller[0..3].inject("Called from:\n") {|msg, trace_line| msg << " #{trace_line}\n" }
|
|
32
|
+
Chef::Log.warn(called_from)
|
|
33
|
+
Mixlib::ShellOut::ShellCommandFailed
|
|
34
|
+
else
|
|
35
|
+
super
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
24
39
|
class Application < RuntimeError; end
|
|
25
40
|
class Cron < RuntimeError; end
|
|
26
41
|
class Env < RuntimeError; end
|
|
@@ -39,7 +54,6 @@ class Chef
|
|
|
39
54
|
class Group < RuntimeError; end
|
|
40
55
|
class Link < RuntimeError; end
|
|
41
56
|
class Mount < RuntimeError; end
|
|
42
|
-
class CouchDBNotFound < RuntimeError; end
|
|
43
57
|
class PrivateKeyMissing < RuntimeError; end
|
|
44
58
|
class CannotWritePrivateKey < RuntimeError; end
|
|
45
59
|
class RoleNotFound < RuntimeError; end
|
|
@@ -60,10 +74,8 @@ class Chef
|
|
|
60
74
|
class RequestedUIDUnavailable < RuntimeError; end
|
|
61
75
|
class InvalidHomeDirectory < ArgumentError; end
|
|
62
76
|
class DsclCommandFailed < RuntimeError; end
|
|
63
|
-
class PlistUtilCommandFailed < RuntimeError; end
|
|
64
77
|
class UserIDNotFound < ArgumentError; end
|
|
65
78
|
class GroupIDNotFound < ArgumentError; end
|
|
66
|
-
class ConflictingMembersInGroup < ArgumentError; end
|
|
67
79
|
class InvalidResourceReference < RuntimeError; end
|
|
68
80
|
class ResourceNotFound < RuntimeError; end
|
|
69
81
|
class InvalidResourceSpecification < ArgumentError; end
|
|
@@ -82,7 +94,8 @@ class Chef
|
|
|
82
94
|
# Thrown when Win32 API layer binds to non-existent Win32 function. Occurs
|
|
83
95
|
# when older versions of Windows don't support newer Win32 API functions.
|
|
84
96
|
class Win32APIFunctionNotImplemented < NotImplementedError; end
|
|
85
|
-
|
|
97
|
+
# Attempting to run windows code on a not-windows node
|
|
98
|
+
class Win32NotWindows < RuntimeError; end
|
|
86
99
|
class ObsoleteDependencySyntax < ArgumentError; end
|
|
87
100
|
class InvalidDataBagPath < ArgumentError; end
|
|
88
101
|
|
|
@@ -99,13 +112,35 @@ class Chef
|
|
|
99
112
|
|
|
100
113
|
# File operation attempted but no permissions to perform it
|
|
101
114
|
class InsufficientPermissions < RuntimeError; end
|
|
102
|
-
|
|
115
|
+
|
|
103
116
|
# Ifconfig failed
|
|
104
117
|
class Ifconfig < RuntimeError; end
|
|
105
118
|
|
|
106
|
-
#
|
|
107
|
-
|
|
108
|
-
|
|
119
|
+
# Invalid "source" parameter to a remote_file resource
|
|
120
|
+
class InvalidRemoteFileURI < ArgumentError; end
|
|
121
|
+
|
|
122
|
+
# Node::Attribute computes the merged version of of attributes
|
|
123
|
+
# and makes it read-only. Attempting to modify a read-only
|
|
124
|
+
# attribute will cause this error.
|
|
125
|
+
class ImmutableAttributeModification < NoMethodError; end
|
|
126
|
+
|
|
127
|
+
# Merged node attributes are invalidated when the component
|
|
128
|
+
# attributes are updated. Attempting to read from a stale copy
|
|
129
|
+
# of merged attributes will trigger this error.
|
|
130
|
+
class StaleAttributeRead < StandardError; end
|
|
131
|
+
|
|
132
|
+
#Registry Helper throws the following errors
|
|
133
|
+
class Win32RegArchitectureIncorrect < RuntimeError; end
|
|
134
|
+
class Win32RegHiveMissing < ArgumentError; end
|
|
135
|
+
class Win32RegKeyMissing < RuntimeError; end
|
|
136
|
+
class Win32RegValueMissing < RuntimeError; end
|
|
137
|
+
class Win32RegDataMissing < RuntimeError; end
|
|
138
|
+
class Win32RegValueExists < RuntimeError; end
|
|
139
|
+
class Win32RegNoRecursive < ArgumentError; end
|
|
140
|
+
class Win32RegTypeDoesNotExist < ArgumentError; end
|
|
141
|
+
class Win32RegBadType < ArgumentError; end
|
|
142
|
+
class Win32RegBadValueSize < ArgumentError; end
|
|
143
|
+
class Win32RegTypesMismatch < ArgumentError; end
|
|
109
144
|
|
|
110
145
|
class MissingRole < RuntimeError
|
|
111
146
|
NULL = Object.new
|
|
@@ -128,6 +163,49 @@ class Chef
|
|
|
128
163
|
|
|
129
164
|
|
|
130
165
|
end
|
|
166
|
+
# Exception class for collecting multiple failures. Used when running
|
|
167
|
+
# delayed notifications so that chef can process each delayed
|
|
168
|
+
# notification even if chef client or other notifications fail.
|
|
169
|
+
class MultipleFailures < StandardError
|
|
170
|
+
def initialize(*args)
|
|
171
|
+
super
|
|
172
|
+
@all_failures = []
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def message
|
|
176
|
+
base = "Multiple failures occurred:\n"
|
|
177
|
+
@all_failures.inject(base) do |message, (location, error)|
|
|
178
|
+
message << "* #{error.class} occurred in #{location}: #{error.message}\n"
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def client_run_failure(exception)
|
|
183
|
+
set_backtrace(exception.backtrace)
|
|
184
|
+
@all_failures << [ "chef run", exception ]
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def notification_failure(exception)
|
|
188
|
+
@all_failures << [ "delayed notification", exception ]
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def raise!
|
|
192
|
+
unless empty?
|
|
193
|
+
raise self.for_raise
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def empty?
|
|
198
|
+
@all_failures.empty?
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def for_raise
|
|
202
|
+
if @all_failures.size == 1
|
|
203
|
+
@all_failures[0][1]
|
|
204
|
+
else
|
|
205
|
+
self
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
131
209
|
|
|
132
210
|
class CookbookVersionSelection
|
|
133
211
|
|
|
@@ -189,13 +267,8 @@ class Chef
|
|
|
189
267
|
result.to_json(*a)
|
|
190
268
|
end
|
|
191
269
|
end
|
|
192
|
-
end # CookbookVersionSelection
|
|
193
270
|
|
|
194
|
-
#
|
|
195
|
-
# not follow it with a method other than GET or HEAD, unless a specific
|
|
196
|
-
# action is taken by the user. A redirect received as response to a
|
|
197
|
-
# non-GET and non-HEAD request will thus raise an InvalidRedirect.
|
|
198
|
-
class InvalidRedirect < StandardError; end
|
|
271
|
+
end # CookbookVersionSelection
|
|
199
272
|
|
|
200
273
|
end
|
|
201
274
|
end
|