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/platform_spec.rb
CHANGED
|
@@ -35,8 +35,7 @@ describe "Chef::Platform supports" do
|
|
|
35
35
|
:solaris,
|
|
36
36
|
:mswin,
|
|
37
37
|
:mingw32,
|
|
38
|
-
:windows
|
|
39
|
-
:gcel
|
|
38
|
+
:windows
|
|
40
39
|
].each do |platform|
|
|
41
40
|
it "#{platform}" do
|
|
42
41
|
Chef::Platform.platforms.should have_key(platform)
|
|
@@ -130,8 +129,8 @@ describe Chef::Platform do
|
|
|
130
129
|
kitty = Chef::Resource::Cat.new("loulou")
|
|
131
130
|
node = Chef::Node.new
|
|
132
131
|
node.name("Intel")
|
|
133
|
-
node.platform
|
|
134
|
-
node.platform_version
|
|
132
|
+
node.automatic_attrs[:platform] = "mac_os_x"
|
|
133
|
+
node.automatic_attrs[:platform_version] = "9.2.2"
|
|
135
134
|
Chef::Platform.find_provider_for_node(node, kitty).should eql("nice")
|
|
136
135
|
end
|
|
137
136
|
|
|
@@ -140,8 +139,8 @@ describe Chef::Platform do
|
|
|
140
139
|
kitty.stub!(:provider).and_return(Chef::Provider::File)
|
|
141
140
|
node = Chef::Node.new
|
|
142
141
|
node.name("Intel")
|
|
143
|
-
node.platform
|
|
144
|
-
node.platform_version
|
|
142
|
+
node.automatic_attrs[:platform] = "mac_os_x"
|
|
143
|
+
node.automatic_attrs[:platform_version] = "9.2.2"
|
|
145
144
|
Chef::Platform.find_provider_for_node(node, kitty).should eql(Chef::Provider::File)
|
|
146
145
|
end
|
|
147
146
|
|
|
@@ -151,15 +150,15 @@ describe Chef::Platform do
|
|
|
151
150
|
Chef::Platform.platforms[:default].delete(:cat)
|
|
152
151
|
node = Chef::Node.new
|
|
153
152
|
node.name("Intel")
|
|
154
|
-
node.platform
|
|
155
|
-
node.platform_version
|
|
153
|
+
node.automatic_attrs[:platform] = "mac_os_x"
|
|
154
|
+
node.automatic_attrs[:platform_version] = "8.5"
|
|
156
155
|
Chef::Platform.find_provider_for_node(node, kitty).should eql(Chef::Provider::Cat)
|
|
157
156
|
end
|
|
158
157
|
|
|
159
158
|
def setup_file_resource
|
|
160
159
|
node = Chef::Node.new
|
|
161
|
-
node.platform
|
|
162
|
-
node.platform_version
|
|
160
|
+
node.automatic_attrs[:platform] = "mac_os_x"
|
|
161
|
+
node.automatic_attrs[:platform_version] = "9.2.2"
|
|
163
162
|
run_context = Chef::RunContext.new(node, {}, @events)
|
|
164
163
|
[ Chef::Resource::File.new("whateva", run_context), run_context ]
|
|
165
164
|
end
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
require 'spec_helper'
|
|
21
21
|
describe Chef::Provider::Breakpoint do
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
before do
|
|
24
24
|
@resource = Chef::Resource::Breakpoint.new
|
|
25
25
|
@node = Chef::Node.new
|
|
@@ -29,13 +29,13 @@ describe Chef::Provider::Breakpoint do
|
|
|
29
29
|
@run_context.stub!(:resource_collection).and_return(@collection)
|
|
30
30
|
@provider = Chef::Provider::Breakpoint.new(@resource, @run_context)
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
it "responds to load_current_resource" do
|
|
34
34
|
@provider.should respond_to(:load_current_resource)
|
|
35
35
|
end
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
it "gets the iterator from @collection and pauses it" do
|
|
38
|
-
|
|
38
|
+
Shell.stub!(:running?).and_return(true)
|
|
39
39
|
@iterator = mock("stepable_iterator")
|
|
40
40
|
@collection.stub!(:iterator).and_return(@iterator)
|
|
41
41
|
@iterator.should_receive(:pause)
|
|
@@ -43,8 +43,8 @@ describe Chef::Provider::Breakpoint do
|
|
|
43
43
|
@resource.should be_updated
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
it "doesn't pause the iterator if
|
|
47
|
-
|
|
46
|
+
it "doesn't pause the iterator if chef-shell isn't running" do
|
|
47
|
+
Shell.stub!(:running?).and_return(false)
|
|
48
48
|
@iterator = mock("stepable_iterator")
|
|
49
49
|
@collection.stub!(:iterator).and_return(@iterator)
|
|
50
50
|
@iterator.should_not_receive(:pause)
|
|
@@ -28,7 +28,9 @@ describe Chef::Provider::CookbookFile do
|
|
|
28
28
|
|
|
29
29
|
@node = Chef::Node.new
|
|
30
30
|
@events = Chef::EventDispatch::Dispatcher.new
|
|
31
|
-
|
|
31
|
+
cl = Chef::CookbookLoader.new(@cookbook_repo)
|
|
32
|
+
cl.load_cookbooks
|
|
33
|
+
@cookbook_collection = Chef::CookbookCollection.new(cl)
|
|
32
34
|
@run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
|
|
33
35
|
|
|
34
36
|
@new_resource = Chef::Resource::CookbookFile.new('apache2_module_conf_generate.pl', @run_context)
|
|
@@ -83,7 +85,7 @@ EXPECTED
|
|
|
83
85
|
@provider.current_resource = @current_resource
|
|
84
86
|
end
|
|
85
87
|
|
|
86
|
-
after { ::File.exist?(@install_to) && FileUtils.
|
|
88
|
+
after { ::File.exist?(File.dirname(@install_to)) && FileUtils.rm_rf(@install_to) }
|
|
87
89
|
|
|
88
90
|
it "loads the current file state" do
|
|
89
91
|
@provider.load_current_resource
|
|
@@ -95,12 +97,6 @@ EXPECTED
|
|
|
95
97
|
@provider.file_cache_location.should == expected
|
|
96
98
|
end
|
|
97
99
|
|
|
98
|
-
it "stages the cookbook to a temporary file" do
|
|
99
|
-
@new_resource.path(@install_to)
|
|
100
|
-
@provider.should_receive(:deploy_tempfile)
|
|
101
|
-
@provider.run_action(:create)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
100
|
it "installs the file from the cookbook cache" do
|
|
105
101
|
@new_resource.path(@install_to)
|
|
106
102
|
@provider.should_receive(:backup_new_resource)
|
|
@@ -36,80 +36,112 @@ describe Chef::Provider::Directory do
|
|
|
36
36
|
@directory = Chef::Provider::Directory.new(@new_resource, @run_context)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
|
|
40
|
+
describe "scanning file security metadata on windows" do
|
|
41
|
+
before do
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "describes the directory's access rights" do
|
|
45
|
+
pending
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "scanning file security metadata on unix" do
|
|
50
|
+
before do
|
|
51
|
+
Chef::Platform.stub!(:windows?).and_return(false)
|
|
52
|
+
end
|
|
53
|
+
let(:mock_stat) do
|
|
42
54
|
cstats = mock("stats")
|
|
43
55
|
cstats.stub!(:uid).and_return(500)
|
|
44
56
|
cstats.stub!(:gid).and_return(500)
|
|
45
57
|
cstats.stub!(:mode).and_return(0755)
|
|
46
|
-
|
|
47
|
-
@directory.load_current_resource
|
|
48
|
-
@directory.current_resource.path.should eql(@new_resource.path)
|
|
49
|
-
@directory.current_resource.owner.should eql(500)
|
|
50
|
-
@directory.current_resource.group.should eql(500)
|
|
51
|
-
@directory.current_resource.mode.should == 00755
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should create a new directory on create, setting updated to true" do
|
|
55
|
-
@new_resource.path "/tmp/foo"
|
|
56
|
-
|
|
57
|
-
File.should_receive(:exist?).exactly(3).and_return(false)
|
|
58
|
-
Dir.should_receive(:mkdir).with(@new_resource.path).once.and_return(true)
|
|
59
|
-
|
|
60
|
-
@directory.should_receive(:set_all_access_controls)
|
|
61
|
-
@directory.stub!(:update_new_file_state)
|
|
62
|
-
@directory.run_action(:create)
|
|
63
|
-
@directory.new_resource.should be_updated
|
|
58
|
+
cstats
|
|
64
59
|
end
|
|
65
|
-
|
|
66
|
-
it "
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
it "should create a new directory when parent directory does not exist if recursive is true and permissions are correct" do
|
|
73
|
-
@new_resource.path "/path/to/dir"
|
|
74
|
-
@new_resource.recursive true
|
|
75
|
-
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
|
76
|
-
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
|
77
|
-
|
|
78
|
-
File.should_receive(:exist?).with('/path/to').ordered.and_return(false)
|
|
79
|
-
File.should_receive(:exist?).with('/path').ordered.and_return(true)
|
|
80
|
-
File.should_receive(:writable?).with('/path').ordered.and_return(true)
|
|
81
|
-
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
|
82
|
-
|
|
83
|
-
FileUtils.should_receive(:mkdir_p).with(@new_resource.path).and_return(true)
|
|
84
|
-
@directory.should_receive(:set_all_access_controls)
|
|
85
|
-
@directory.stub!(:update_new_file_state)
|
|
86
|
-
@directory.run_action(:create)
|
|
87
|
-
@new_resource.should be_updated
|
|
60
|
+
|
|
61
|
+
it "describes the access mode as a String of octal integers" do
|
|
62
|
+
File.stub!(:exist?).and_return(true)
|
|
63
|
+
File.should_receive(:stat).and_return(mock_stat)
|
|
64
|
+
@directory.load_current_resource
|
|
65
|
+
@directory.current_resource.mode.should == "0755"
|
|
88
66
|
end
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
67
|
+
|
|
68
|
+
context "when user and group are specified with UID/GID" do
|
|
69
|
+
it "describes the current owner and group as UID and GID" do
|
|
70
|
+
File.stub!(:exist?).and_return(true)
|
|
71
|
+
File.should_receive(:stat).and_return(mock_stat)
|
|
72
|
+
@directory.load_current_resource
|
|
73
|
+
@directory.current_resource.path.should eql(@new_resource.path)
|
|
74
|
+
@directory.current_resource.owner.should eql(500)
|
|
75
|
+
@directory.current_resource.group.should eql(500)
|
|
76
|
+
end
|
|
99
77
|
end
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
stub_file_cstats
|
|
103
|
-
@new_resource.path "/tmp/foo"
|
|
104
|
-
File.should_receive(:exist?).exactly(3).and_return(true)
|
|
105
|
-
Dir.should_not_receive(:mkdir).with(@new_resource.path)
|
|
106
|
-
@directory.should_receive(:set_all_access_controls)
|
|
107
|
-
@directory.run_action(:create)
|
|
78
|
+
|
|
79
|
+
context "when user/group are specified with user/group names" do
|
|
108
80
|
end
|
|
109
81
|
end
|
|
110
82
|
|
|
111
|
-
|
|
112
|
-
|
|
83
|
+
# Unix only for now. While file security attribute reporting for windows is
|
|
84
|
+
# disabled, unix and windows differ in the number of exist? calls that are
|
|
85
|
+
# made by the provider.
|
|
86
|
+
it "should create a new directory on create, setting updated to true", :unix_only do
|
|
87
|
+
@new_resource.path "/tmp/foo"
|
|
88
|
+
|
|
89
|
+
File.should_receive(:exist?).exactly(2).and_return(false)
|
|
90
|
+
File.should_receive(:directory?).with("/tmp").and_return(true)
|
|
91
|
+
Dir.should_receive(:mkdir).with(@new_resource.path).once.and_return(true)
|
|
92
|
+
|
|
93
|
+
@directory.should_receive(:set_all_access_controls)
|
|
94
|
+
@directory.stub!(:update_new_file_state)
|
|
95
|
+
@directory.run_action(:create)
|
|
96
|
+
@directory.new_resource.should be_updated
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should raise an exception if the parent directory does not exist and recursive is false" do
|
|
100
|
+
@new_resource.path "/tmp/some/dir"
|
|
101
|
+
@new_resource.recursive false
|
|
102
|
+
lambda { @directory.run_action(:create) }.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Unix only for now. While file security attribute reporting for windows is
|
|
106
|
+
# disabled, unix and windows differ in the number of exist? calls that are
|
|
107
|
+
# made by the provider.
|
|
108
|
+
it "should create a new directory when parent directory does not exist if recursive is true and permissions are correct", :unix_only do
|
|
109
|
+
@new_resource.path "/path/to/dir"
|
|
110
|
+
@new_resource.recursive true
|
|
111
|
+
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
|
112
|
+
|
|
113
|
+
File.should_receive(:exist?).with('/path/to').ordered.and_return(false)
|
|
114
|
+
File.should_receive(:exist?).with('/path').ordered.and_return(true)
|
|
115
|
+
File.should_receive(:writable?).with('/path').ordered.and_return(true)
|
|
116
|
+
File.should_receive(:exist?).with(@new_resource.path).ordered.and_return(false)
|
|
117
|
+
|
|
118
|
+
FileUtils.should_receive(:mkdir_p).with(@new_resource.path).and_return(true)
|
|
119
|
+
@directory.should_receive(:set_all_access_controls)
|
|
120
|
+
@directory.stub!(:update_new_file_state)
|
|
121
|
+
@directory.run_action(:create)
|
|
122
|
+
@new_resource.should be_updated
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
it "should raise an error when creating a directory when parent directory is a file" do
|
|
127
|
+
File.should_receive(:directory?).and_return(false)
|
|
128
|
+
Dir.should_not_receive(:mkdir).with(@new_resource.path)
|
|
129
|
+
lambda { @directory.run_action(:create) }.should raise_error(Chef::Exceptions::EnclosingDirectoryDoesNotExist)
|
|
130
|
+
@directory.new_resource.should_not be_updated
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Unix only for now. While file security attribute reporting for windows is
|
|
134
|
+
# disabled, unix and windows differ in the number of exist? calls that are
|
|
135
|
+
# made by the provider.
|
|
136
|
+
it "should not create the directory if it already exists", :unix_only do
|
|
137
|
+
stub_file_cstats
|
|
138
|
+
@new_resource.path "/tmp/foo"
|
|
139
|
+
File.should_receive(:directory?).twice.and_return(true)
|
|
140
|
+
File.should_receive(:writable?).with("/tmp").and_return(true)
|
|
141
|
+
File.should_receive(:exist?).exactly(3).and_return(true)
|
|
142
|
+
Dir.should_not_receive(:mkdir).with(@new_resource.path)
|
|
143
|
+
@directory.should_receive(:set_all_access_controls)
|
|
144
|
+
@directory.run_action(:create)
|
|
113
145
|
end
|
|
114
146
|
|
|
115
147
|
it "should delete the directory if it exists, and is writable with action_delete" do
|
|
@@ -81,7 +81,7 @@ describe Chef::Provider::Env do
|
|
|
81
81
|
@provider.action_create
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
-
it "should set the new_resources updated flag when it creates the key" do
|
|
84
|
+
it "should set the the new_resources updated flag when it creates the key" do
|
|
85
85
|
@provider.action_create
|
|
86
86
|
@new_resource.should be_updated
|
|
87
87
|
end
|
|
@@ -99,7 +99,7 @@ describe Chef::Provider::Env do
|
|
|
99
99
|
@provider.action_create
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
-
it "should set the new_resources updated flag when it updates an existing value" do
|
|
102
|
+
it "should set the the new_resources updated flag when it updates an existing value" do
|
|
103
103
|
@provider.key_exists = true
|
|
104
104
|
@provider.stub!(:compare_value).and_return(true)
|
|
105
105
|
@provider.stub!(:modify_env).and_return(true)
|
|
@@ -53,25 +53,33 @@ describe Chef::Provider::File do
|
|
|
53
53
|
@provider.current_resource.content.should eql(nil)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
describe "examining file security metadata on Unix" do
|
|
57
|
+
before do
|
|
58
|
+
Chef::Platform.stub!(:windows?).and_return(false)
|
|
59
|
+
end
|
|
57
60
|
it "should collect the current state of the file on the filesystem and populate current_resource" do
|
|
58
61
|
# test setup
|
|
59
62
|
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
|
60
|
-
::File.should_receive(:stat).exactly(
|
|
63
|
+
::File.should_receive(:stat).exactly(1).times.with(@resource.path).and_return(stat_struct)
|
|
61
64
|
|
|
62
65
|
# test execution
|
|
66
|
+
|
|
67
|
+
Etc.should_receive(:getgrgid).with(0).and_return(mock("Group Ent", :name => "wheel"))
|
|
68
|
+
Etc.should_receive(:getpwuid).with(0).and_return(mock("User Ent", :name => "root"))
|
|
69
|
+
|
|
70
|
+
# test execution
|
|
63
71
|
@provider.load_current_resource
|
|
64
72
|
|
|
65
73
|
# post-condition checks
|
|
66
|
-
@provider.current_resource.mode.should == 0600
|
|
67
|
-
@provider.current_resource.owner.should ==
|
|
68
|
-
@provider.current_resource.group.should ==
|
|
74
|
+
@provider.current_resource.mode.should == "0600"
|
|
75
|
+
@provider.current_resource.owner.should == "root"
|
|
76
|
+
@provider.current_resource.group.should == "wheel"
|
|
69
77
|
end
|
|
70
78
|
|
|
71
79
|
it "should NOT update the new_resource state with the current_resourse state if new_resource state is already specified" do
|
|
72
80
|
# test setup
|
|
73
81
|
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
|
74
|
-
::File.should_receive(:stat).exactly(
|
|
82
|
+
::File.should_receive(:stat).exactly(1).times.with(@resource.path).and_return(stat_struct)
|
|
75
83
|
|
|
76
84
|
@provider.new_resource.group(1)
|
|
77
85
|
@provider.new_resource.owner(1)
|
|
@@ -86,47 +94,45 @@ describe Chef::Provider::File do
|
|
|
86
94
|
@provider.new_resource.mode.should == 0644
|
|
87
95
|
end
|
|
88
96
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
context "when the new_resource does not specify the desired access control" do
|
|
98
|
+
it "records access control information in the new resource after modifying the file" do
|
|
99
|
+
# test setup
|
|
100
|
+
stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
|
|
101
|
+
# called once in update_new_file_state and once in checksum
|
|
102
|
+
::File.should_receive(:stat).once.with(@provider.new_resource.path).and_return(stat_struct)
|
|
103
|
+
::File.should_receive(:directory?).once.with(@provider.new_resource.path).and_return(false)
|
|
93
104
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
@provider.new_resource.mode(nil)
|
|
105
|
+
Etc.should_receive(:getpwuid).with(0).and_return(mock("User Ent", :name => "root"))
|
|
106
|
+
Etc.should_receive(:getgrgid).with(0).and_return(mock("Group Ent", :name => "wheel"))
|
|
97
107
|
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
@provider.new_resource.group(nil)
|
|
109
|
+
@provider.new_resource.owner(nil)
|
|
110
|
+
@provider.new_resource.mode(nil)
|
|
100
111
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
@provider.new_resource.owner.should eql(@provider.current_resource.owner)
|
|
104
|
-
@provider.new_resource.mode.should eql(@provider.current_resource.mode)
|
|
105
|
-
end
|
|
112
|
+
# test exectution
|
|
113
|
+
@provider.update_new_file_state
|
|
106
114
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
# post-condition checks
|
|
116
|
+
@provider.new_resource.group.should == "wheel"
|
|
117
|
+
@provider.new_resource.owner.should == "root"
|
|
118
|
+
@provider.new_resource.mode.should == "0600"
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
113
122
|
|
|
114
|
-
|
|
115
|
-
@provider.new_resource.owner(nil)
|
|
116
|
-
@provider.new_resource.mode(nil)
|
|
123
|
+
describe "when reporting security metadata on windows" do
|
|
117
124
|
|
|
118
|
-
|
|
119
|
-
|
|
125
|
+
it "records the file owner" do
|
|
126
|
+
pending
|
|
127
|
+
end
|
|
120
128
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
@provider.new_resource.owner.should == 0
|
|
124
|
-
@provider.new_resource.mode.should == 0600
|
|
129
|
+
it "records rights for each user in the ACL" do
|
|
130
|
+
pending
|
|
125
131
|
end
|
|
126
|
-
end
|
|
127
132
|
|
|
128
|
-
|
|
129
|
-
|
|
133
|
+
it "records deny_rights for each user in the ACL" do
|
|
134
|
+
pending
|
|
135
|
+
end
|
|
130
136
|
end
|
|
131
137
|
|
|
132
138
|
it "should load a mostly blank current resource if the file specified in new_resource doesn't exist/isn't readable" do
|
|
@@ -174,6 +180,8 @@ describe Chef::Provider::File do
|
|
|
174
180
|
@provider.new_resource.content "foobar"
|
|
175
181
|
@provider.should_receive(:diff_current_from_content).and_return("")
|
|
176
182
|
@provider.should_receive(:backup)
|
|
183
|
+
# checksum check
|
|
184
|
+
File.should_receive(:open).with(@provider.new_resource.path, "rb").and_yield(io)
|
|
177
185
|
File.should_receive(:open).with(@provider.new_resource.path, "w").and_yield(io)
|
|
178
186
|
@provider.set_content
|
|
179
187
|
io.string.should == "foobar"
|
|
@@ -182,7 +190,8 @@ describe Chef::Provider::File do
|
|
|
182
190
|
it "should not set the content of the file if it already matches the requested content" do
|
|
183
191
|
@provider.load_current_resource
|
|
184
192
|
@provider.new_resource.content IO.read(@resource.path)
|
|
185
|
-
|
|
193
|
+
# Checksum check:
|
|
194
|
+
File.should_receive(:open).with(@resource.path, "rb").and_yield(StringIO.new(@resource.content))
|
|
186
195
|
File.should_not_receive(:open).with(@provider.new_resource.path, "w")
|
|
187
196
|
lambda { @provider.set_content }.should_not raise_error
|
|
188
197
|
@resource.should_not be_updated_by_last_action
|