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
data/spec/unit/daemon_spec.rb
CHANGED
|
@@ -150,32 +150,11 @@ describe Chef::Daemon do
|
|
|
150
150
|
File.stub!(:exists?).with("/var/run/chef/chef-client.pid").and_return(true)
|
|
151
151
|
end
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
File.stub!(:read).with("/var/run/chef/chef-client.pid").and_return("#$$\n")
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "should remove the file" do
|
|
160
|
-
FileUtils.should_receive(:rm).with("/var/run/chef/chef-client.pid")
|
|
161
|
-
Chef::Daemon.remove_pid_file
|
|
162
|
-
end
|
|
163
|
-
|
|
153
|
+
it "should remove the file" do
|
|
154
|
+
FileUtils.should_receive(:rm).with("/var/run/chef/chef-client.pid")
|
|
155
|
+
Chef::Daemon.remove_pid_file
|
|
164
156
|
end
|
|
165
157
|
|
|
166
|
-
describe "and contains a different pid" do
|
|
167
|
-
|
|
168
|
-
before do
|
|
169
|
-
other_pid = Process.pid + 1
|
|
170
|
-
File.stub!(:read).with("/var/run/chef/chef-client.pid").and_return("#{other_pid}\n")
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
it "should not remove the file" do
|
|
174
|
-
FileUtils.should_not_receive(:rm)
|
|
175
|
-
Chef::Daemon.remove_pid_file
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
end
|
|
179
158
|
|
|
180
159
|
end
|
|
181
160
|
|
data/spec/unit/data_bag_spec.rb
CHANGED
|
@@ -76,13 +76,14 @@ describe Chef::DataBag do
|
|
|
76
76
|
Chef::REST.stub!(:new).and_return(@rest)
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
it "should
|
|
80
|
-
|
|
81
|
-
@rest.should_receive(:post_rest).and_raise(Net::HTTPServerException.new("foo", exception))
|
|
79
|
+
it "should update the data bag when it already exists" do
|
|
80
|
+
@rest.should_receive(:put_rest).with("data/piggly_wiggly", @data_bag)
|
|
82
81
|
@data_bag.save
|
|
83
82
|
end
|
|
84
83
|
|
|
85
|
-
it "should create the data bag" do
|
|
84
|
+
it "should create the data bag when it is not found" do
|
|
85
|
+
exception = mock("404 error", :code => "404")
|
|
86
|
+
@rest.should_receive(:put_rest).and_raise(Net::HTTPServerException.new("foo", exception))
|
|
86
87
|
@rest.should_receive(:post_rest).with("data", @data_bag)
|
|
87
88
|
@data_bag.save
|
|
88
89
|
end
|
|
@@ -95,6 +96,7 @@ describe Chef::DataBag do
|
|
|
95
96
|
Chef::Config[:why_run] = false
|
|
96
97
|
end
|
|
97
98
|
it "should not save" do
|
|
99
|
+
@rest.should_not_receive(:put_rest)
|
|
98
100
|
@rest.should_not_receive(:post_rest)
|
|
99
101
|
@data_bag.save
|
|
100
102
|
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Jacob (<adam@opscode.com>)
|
|
3
|
+
# Author:: Daniel DeLeo (<dan@kallistec.com>)
|
|
4
|
+
# Copyright:: Copyright (c) 2009 Opscode, Inc.
|
|
5
|
+
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
|
6
|
+
# License:: Apache License, Version 2.0
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
require 'spec_helper'
|
|
22
|
+
|
|
23
|
+
describe Chef::Digester do
|
|
24
|
+
before(:each) do
|
|
25
|
+
@cache = Chef::Digester.instance
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "when computing checksums of cookbook files and templates" do
|
|
29
|
+
|
|
30
|
+
it "proxies the class method checksum_for_file to the instance" do
|
|
31
|
+
@cache.should_receive(:checksum_for_file).with("a_file_or_a_fail")
|
|
32
|
+
Chef::Digester.checksum_for_file("a_file_or_a_fail")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "computes a checksum of a file" do
|
|
36
|
+
fixture_file = CHEF_SPEC_DATA + "/checksum/random.txt"
|
|
37
|
+
expected = "09ee9c8cc70501763563bcf9c218d71b2fbf4186bf8e1e0da07f0f42c80a3394"
|
|
38
|
+
@cache.checksum_for_file(fixture_file).should == expected
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "generates a checksum from a non-file IO object" do
|
|
42
|
+
io = StringIO.new("riseofthemachines\nriseofthechefs\n")
|
|
43
|
+
expected_md5 = '0e157ac1e2dd73191b76067fb6b4bceb'
|
|
44
|
+
@cache.generate_md5_checksum(io).should == expected_md5
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
require 'chef/dsl/data_query'
|
|
21
|
+
|
|
22
|
+
class DataQueryDSLTester
|
|
23
|
+
include Chef::DSL::DataQuery
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe Chef::DSL::DataQuery do
|
|
27
|
+
before(:each) do
|
|
28
|
+
@language = DataQueryDSLTester.new
|
|
29
|
+
@node = Hash.new
|
|
30
|
+
@language.stub!(:node).and_return(@node)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "when loading data bags and items" do
|
|
34
|
+
it "lists the items in a data bag" do
|
|
35
|
+
Chef::DataBag.should_receive(:load).with("bag_name").and_return("item_1" => "http://url_for/item_1", "item_2" => "http://url_for/item_2")
|
|
36
|
+
@language.data_bag("bag_name").sort.should == %w[item_1 item_2]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "validates the name of the data bag you're trying to load" do
|
|
40
|
+
lambda {@language.data_bag("!# %^&& ")}.should raise_error(Chef::Exceptions::InvalidDataBagName)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "fetches a data bag item" do
|
|
44
|
+
@item = Chef::DataBagItem.new
|
|
45
|
+
@item.data_bag("bag_name")
|
|
46
|
+
@item.raw_data = {"id" => "item_name", "FUU" => "FUU"}
|
|
47
|
+
Chef::DataBagItem.should_receive(:load).with("bag_name", "item_name").and_return(@item)
|
|
48
|
+
@language.data_bag_item("bag_name", "item_name").should == @item
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "validates the name of the data bag you're trying to load an item from" do
|
|
52
|
+
lambda {@language.data_bag_item(" %%^& ", "item_name")}.should raise_error(Chef::Exceptions::InvalidDataBagName)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "validates the id of the data bag item you're trying to load" do
|
|
56
|
+
lambda {@language.data_bag_item("bag_name", " 987 (*&()")}.should raise_error(Chef::Exceptions::InvalidDataBagItemID)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "validates that the id of the data bag item is not nil" do
|
|
60
|
+
lambda {@language.data_bag_item("bag_name", nil)}.should raise_error(Chef::Exceptions::InvalidDataBagItemID)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
require 'chef/dsl/platform_introspection'
|
|
21
|
+
|
|
22
|
+
class LanguageTester
|
|
23
|
+
attr_reader :node
|
|
24
|
+
def initialize(node)
|
|
25
|
+
@node = node
|
|
26
|
+
end
|
|
27
|
+
include Chef::DSL::PlatformIntrospection
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "PlatformIntrospection implementors" do
|
|
31
|
+
|
|
32
|
+
let(:node) { Chef::Node.new }
|
|
33
|
+
let(:platform_introspector) { LanguageTester.new(node) }
|
|
34
|
+
|
|
35
|
+
it_behaves_like "a platform introspector"
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe Chef::DSL::PlatformIntrospection::PlatformDependentValue do
|
|
40
|
+
before do
|
|
41
|
+
platform_hash = {
|
|
42
|
+
:openbsd => {:default => 'free, functional, secure'},
|
|
43
|
+
[:redhat, :centos, :fedora, :scientific] => {:default => '"stable"'},
|
|
44
|
+
:ubuntu => {'10.04' => 'using upstart more', :default => 'using init more'},
|
|
45
|
+
:default => 'bork da bork'
|
|
46
|
+
}
|
|
47
|
+
@platform_specific_value = Chef::DSL::PlatformIntrospection::PlatformDependentValue.new(platform_hash)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "returns the default value when the platform doesn't match" do
|
|
51
|
+
@platform_specific_value.value_for_node(:platform => :dos).should == 'bork da bork'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "returns a value for a platform set as a group" do
|
|
55
|
+
@platform_specific_value.value_for_node(:platform => :centos).should == '"stable"'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "returns a value for the platform when it was set as a symbol but fetched as a string" do
|
|
59
|
+
@platform_specific_value.value_for_node(:platform => "centos").should == '"stable"'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "returns a value for a specific platform version" do
|
|
63
|
+
node = {:platform => 'ubuntu', :platform_version => '10.04'}
|
|
64
|
+
@platform_specific_value.value_for_node(node).should == 'using upstart more'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "returns a platform-default value if the platform version doesn't match an explicit one" do
|
|
68
|
+
node = {:platform => 'ubuntu', :platform_version => '9.10' }
|
|
69
|
+
@platform_specific_value.value_for_node(node).should == 'using init more'
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "returns nil if there is no default and no platforms match" do
|
|
73
|
+
# this matches the behavior in the original implementation.
|
|
74
|
+
# whether or not it's correct is another matter.
|
|
75
|
+
platform_specific_value = Chef::DSL::PlatformIntrospection::PlatformDependentValue.new({})
|
|
76
|
+
platform_specific_value.value_for_node(:platform => 'foo').should be_nil
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "raises an argument error if the platform hash is not correctly structured" do
|
|
80
|
+
bad_hash = {:ubuntu => :foo} # should be :ubuntu => {:default => 'foo'}
|
|
81
|
+
lambda {Chef::DSL::PlatformIntrospection::PlatformDependentValue.new(bad_hash)}.should raise_error(ArgumentError)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
describe Chef::DSL::PlatformIntrospection::PlatformFamilyDependentValue do
|
|
86
|
+
before do
|
|
87
|
+
@array_values = [:stop, :start, :reload]
|
|
88
|
+
|
|
89
|
+
@platform_family_hash = {
|
|
90
|
+
"debian" => "debian value",
|
|
91
|
+
[:rhel, "fedora"] => "redhatty value",
|
|
92
|
+
"suse" => @array_values,
|
|
93
|
+
:gentoo => "gentoo value",
|
|
94
|
+
:default => "default value"
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@platform_family_value = Chef::DSL::PlatformIntrospection::PlatformFamilyDependentValue.new(@platform_family_hash)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "returns the default value when the platform family doesn't match" do
|
|
101
|
+
@platform_family_value.value_for_node(:platform_family => :os2).should == 'default value'
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
it "returns a value for the platform family when it was set as a string but fetched as a symbol" do
|
|
106
|
+
@platform_family_value.value_for_node(:platform_family => :debian).should == "debian value"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "returns a value for the platform family when it was set as a symbol but fetched as a string" do
|
|
110
|
+
@platform_family_value.value_for_node(:platform_family => "gentoo").should == "gentoo value"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "returns an array value stored for a platform family" do
|
|
114
|
+
@platform_family_value.value_for_node(:platform_family => "suse").should == @array_values
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "returns a value for the platform family when it was set within an array hash key as a symbol" do
|
|
118
|
+
@platform_family_value.value_for_node(:platform_family => :rhel).should == "redhatty value"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "returns a value for the platform family when it was set within an array hash key as a string" do
|
|
122
|
+
@platform_family_value.value_for_node(:platform_family => "fedora").should == "redhatty value"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "returns nil if there is no default and no platforms match" do
|
|
126
|
+
platform_specific_value = Chef::DSL::PlatformIntrospection::PlatformFamilyDependentValue.new({})
|
|
127
|
+
platform_specific_value.value_for_node(:platform_family => 'foo').should be_nil
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Prajakta Purohit (<prajakta@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require "chef/dsl/registry_helper"
|
|
20
|
+
require "spec_helper"
|
|
21
|
+
|
|
22
|
+
describe Chef::Resource::RegistryKey do
|
|
23
|
+
|
|
24
|
+
before (:all) do
|
|
25
|
+
events = Chef::EventDispatch::Dispatcher.new
|
|
26
|
+
node = Chef::Node.new
|
|
27
|
+
ohai = Ohai::System.new
|
|
28
|
+
ohai.all_plugins
|
|
29
|
+
node.consume_external_attrs(ohai.data,{})
|
|
30
|
+
run_context = Chef::RunContext.new(node, {}, events)
|
|
31
|
+
@resource = Chef::Resource::new("foo", run_context)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "tests registry dsl" do
|
|
35
|
+
it "resource can access registry_helper method registry_key_exists" do
|
|
36
|
+
@resource.respond_to?('registry_key_exists?').should == true
|
|
37
|
+
end
|
|
38
|
+
it "resource can access registry_helper method registry_get_values" do
|
|
39
|
+
@resource.respond_to?('registry_get_values').should == true
|
|
40
|
+
end
|
|
41
|
+
it "resource can access registry_helper method registry_has_subkey" do
|
|
42
|
+
@resource.respond_to?('registry_has_subkeys?').should == true
|
|
43
|
+
end
|
|
44
|
+
it "resource can access registry_helper method registry_get_subkeys" do
|
|
45
|
+
@resource.respond_to?('registry_get_subkeys').should == true
|
|
46
|
+
end
|
|
47
|
+
it "resource can access registry_helper method registry_value_exists" do
|
|
48
|
+
@resource.respond_to?('registry_value_exists?').should == true
|
|
49
|
+
end
|
|
50
|
+
it "resource can access registry_helper method data_value_exists" do
|
|
51
|
+
@resource.respond_to?('registry_data_exists?').should == true
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
require 'spec_helper'
|
|
20
20
|
require 'chef/encrypted_data_bag_item'
|
|
21
21
|
|
|
22
|
-
module
|
|
22
|
+
module Version1Encryptor
|
|
23
23
|
def self.encrypt_value(plaintext_data, key)
|
|
24
24
|
data = plaintext_data.to_yaml
|
|
25
25
|
|
|
@@ -32,83 +32,46 @@ module Version0Encryptor
|
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
class Version1Encryptor
|
|
37
|
-
ALGORITHM = "aes-256-cbc"
|
|
38
|
-
|
|
39
|
-
attr_reader :key
|
|
40
|
-
attr_reader :plaintext_data
|
|
41
|
-
|
|
42
|
-
# Create a new Encryptor for +data+, which will be encrypted with the given
|
|
43
|
-
# +key+.
|
|
44
|
-
#
|
|
45
|
-
# === Arguments:
|
|
46
|
-
# * data: An object of any type that can be serialized to json
|
|
47
|
-
# * key: A String representing the desired passphrase
|
|
48
|
-
# * iv: The optional +iv+ parameter is intended for testing use only. When
|
|
49
|
-
# *not* supplied, Encryptor will use OpenSSL to generate a secure random
|
|
50
|
-
# IV, which is what you want.
|
|
51
|
-
def initialize(plaintext_data, key, iv=nil)
|
|
52
|
-
@plaintext_data = plaintext_data
|
|
53
|
-
@key = key
|
|
54
|
-
@iv = iv && Base64.decode64(iv)
|
|
55
|
-
end
|
|
35
|
+
describe Chef::EncryptedDataBagItem::Encryptor do
|
|
56
36
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"encrypted_data" => encrypted_data,
|
|
62
|
-
"iv" => Base64.encode64(iv),
|
|
63
|
-
"version" => 1,
|
|
64
|
-
"cipher" => ALGORITHM
|
|
65
|
-
}
|
|
66
|
-
end
|
|
37
|
+
describe "generating a random IV" do
|
|
38
|
+
it "generates a new IV for each encryption pass" do
|
|
39
|
+
encryptor1 = Chef::EncryptedDataBagItem::Encryptor.new({"foo" => "bar"}, "passwd")
|
|
40
|
+
encryptor2 = Chef::EncryptedDataBagItem::Encryptor.new({"foo" => "bar"}, "passwd")
|
|
67
41
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
@iv
|
|
42
|
+
# No API in ruby OpenSSL to get the iv it used for the encryption back
|
|
43
|
+
# out. Instead we test if the encrypted data is the same. If it *is* the
|
|
44
|
+
# same, we assume the IV was the same each time.
|
|
45
|
+
encryptor1.encrypted_data.should_not == encryptor2.encrypted_data
|
|
46
|
+
end
|
|
74
47
|
end
|
|
75
48
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
encryptor = OpenSSL::Cipher::Cipher.new(ALGORITHM)
|
|
81
|
-
encryptor.encrypt
|
|
82
|
-
@iv ||= encryptor.random_iv
|
|
83
|
-
encryptor.iv = @iv
|
|
84
|
-
encryptor.key = Digest::SHA256.digest(key)
|
|
85
|
-
encryptor
|
|
49
|
+
describe "when encrypting a non-hash non-array value" do
|
|
50
|
+
it "serializes the value in a de-serializable way" do
|
|
51
|
+
encryptor = Chef::EncryptedDataBagItem::Encryptor.new(5, "passwd")
|
|
52
|
+
Chef::JSONCompat.from_json(encryptor.serialized_data)["json_wrapper"].should == 5
|
|
86
53
|
end
|
|
54
|
+
|
|
87
55
|
end
|
|
88
56
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
Base64.encode64(
|
|
57
|
+
describe "wrapping secret values in an envelope" do
|
|
58
|
+
it "wraps the encrypted data in an envelope with the iv and version" do
|
|
59
|
+
encryptor = Chef::EncryptedDataBagItem::Encryptor.new({"foo" => "bar"}, "passwd")
|
|
60
|
+
final_data = encryptor.for_encrypted_item
|
|
61
|
+
final_data["encrypted_data"].should == encryptor.encrypted_data
|
|
62
|
+
final_data["iv"].should == Base64.encode64(encryptor.iv)
|
|
63
|
+
final_data["version"].should == 1
|
|
64
|
+
final_data["cipher"].should == "aes-256-cbc"
|
|
95
65
|
end
|
|
96
|
-
end
|
|
97
66
|
|
|
98
|
-
# Wraps the data in a single key Hash (JSON Object) and converts to JSON.
|
|
99
|
-
# The wrapper is required because we accept values (such as Integers or
|
|
100
|
-
# Strings) that do not produce valid JSON when serialized without the
|
|
101
|
-
# wrapper.
|
|
102
|
-
def serialized_data
|
|
103
|
-
Chef::JSONCompat.to_json(:json_wrapper => plaintext_data)
|
|
104
67
|
end
|
|
105
|
-
end
|
|
106
68
|
|
|
69
|
+
end
|
|
107
70
|
|
|
108
71
|
describe Chef::EncryptedDataBagItem::Decryptor do
|
|
109
72
|
context "when decrypting a version 1 (JSON+aes-256-cbc+random iv) encrypted value" do
|
|
110
73
|
before do
|
|
111
|
-
@encryptor =
|
|
74
|
+
@encryptor = Chef::EncryptedDataBagItem::Encryptor.new({"foo" => "bar"}, "passwd")
|
|
112
75
|
@encrypted_value = @encryptor.for_encrypted_item
|
|
113
76
|
|
|
114
77
|
@decryptor = Chef::EncryptedDataBagItem::Decryptor.for(@encrypted_value, "passwd")
|
|
@@ -150,7 +113,7 @@ describe Chef::EncryptedDataBagItem::Decryptor do
|
|
|
150
113
|
|
|
151
114
|
context "when decrypting a version 0 (YAML+aes-256-cbc+no iv) encrypted value" do
|
|
152
115
|
before do
|
|
153
|
-
@encrypted_value =
|
|
116
|
+
@encrypted_value = Version1Encryptor.encrypt_value({"foo" => "bar"}, "passwd")
|
|
154
117
|
|
|
155
118
|
@decryptor = Chef::EncryptedDataBagItem::Decryptor.for(@encrypted_value, "passwd")
|
|
156
119
|
end
|
|
@@ -177,33 +140,41 @@ describe Chef::EncryptedDataBagItem do
|
|
|
177
140
|
@secret)
|
|
178
141
|
end
|
|
179
142
|
|
|
180
|
-
describe "encrypting" do
|
|
181
143
|
|
|
182
|
-
|
|
183
|
-
@enc_data["greeting"].should == Version0Encryptor.encrypt_value(@plain_data["greeting"], @secret)
|
|
184
|
-
end
|
|
144
|
+
describe "encrypting" do
|
|
185
145
|
|
|
186
146
|
it "should not encrypt the 'id' key" do
|
|
187
147
|
@enc_data["id"].should == "item_name"
|
|
188
148
|
end
|
|
189
149
|
|
|
190
|
-
it "should encrypt
|
|
191
|
-
@enc_data["greeting"].
|
|
192
|
-
|
|
150
|
+
it "should encrypt non-collection objects" do
|
|
151
|
+
@enc_data["greeting"]["version"].should == 1
|
|
152
|
+
@enc_data["greeting"].should have_key("iv")
|
|
153
|
+
|
|
154
|
+
iv = @enc_data["greeting"]["iv"]
|
|
155
|
+
encryptor = Chef::EncryptedDataBagItem::Encryptor.new("hello", @secret, iv)
|
|
193
156
|
|
|
194
|
-
|
|
195
|
-
nested = @enc_data["nested"]
|
|
196
|
-
nested.class.should == String
|
|
197
|
-
nested.should_not == @plain_data["nested"]
|
|
157
|
+
@enc_data["greeting"]["encrypted_data"].should == encryptor.for_encrypted_item["encrypted_data"]
|
|
198
158
|
end
|
|
199
159
|
|
|
200
|
-
it "
|
|
201
|
-
|
|
202
|
-
|
|
160
|
+
it "should encrypt nested values" do
|
|
161
|
+
@enc_data["nested"]["version"].should == 1
|
|
162
|
+
@enc_data["nested"].should have_key("iv")
|
|
163
|
+
|
|
164
|
+
iv = @enc_data["nested"]["iv"]
|
|
165
|
+
encryptor = Chef::EncryptedDataBagItem::Encryptor.new(@plain_data["nested"], @secret, iv)
|
|
166
|
+
|
|
167
|
+
@enc_data["nested"]["encrypted_data"].should == encryptor.for_encrypted_item["encrypted_data"]
|
|
203
168
|
end
|
|
169
|
+
|
|
204
170
|
end
|
|
205
171
|
|
|
206
|
-
|
|
172
|
+
describe "decrypting" do
|
|
173
|
+
before(:each) do
|
|
174
|
+
@enc_data = Chef::EncryptedDataBagItem.encrypt_data_bag_item(@plain_data,
|
|
175
|
+
@secret)
|
|
176
|
+
@eh = Chef::EncryptedDataBagItem.new(@enc_data, @secret)
|
|
177
|
+
end
|
|
207
178
|
|
|
208
179
|
it "doesn't try to decrypt 'id'" do
|
|
209
180
|
@eh["id"].should == @plain_data["id"]
|
|
@@ -226,32 +197,6 @@ describe Chef::EncryptedDataBagItem do
|
|
|
226
197
|
end
|
|
227
198
|
end
|
|
228
199
|
|
|
229
|
-
describe "decrypting" do
|
|
230
|
-
before(:each) do
|
|
231
|
-
@enc_data = Chef::EncryptedDataBagItem.encrypt_data_bag_item(@plain_data,
|
|
232
|
-
@secret)
|
|
233
|
-
@eh = Chef::EncryptedDataBagItem.new(@enc_data, @secret)
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
it_behaves_like "a decrypted data bag item"
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
describe "when decrypting a version 1 (Chef 11.x) data bag item" do
|
|
240
|
-
before do
|
|
241
|
-
@enc_data = @plain_data.inject({}) do |encrypted, (key, value)|
|
|
242
|
-
if key == "id"
|
|
243
|
-
encrypted["id"] = value
|
|
244
|
-
else
|
|
245
|
-
encrypted[key] = Version1Encryptor.new(value, @secret).for_encrypted_item
|
|
246
|
-
end
|
|
247
|
-
encrypted
|
|
248
|
-
end
|
|
249
|
-
@eh = Chef::EncryptedDataBagItem.new(@enc_data, @secret)
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
it_behaves_like "a decrypted data bag item"
|
|
253
|
-
end
|
|
254
|
-
|
|
255
200
|
describe "loading" do
|
|
256
201
|
it "should defer to Chef::DataBagItem.load" do
|
|
257
202
|
Chef::DataBagItem.stub(:load).with(:the_bag, "my_codes").and_return(@enc_data)
|