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
|
@@ -24,162 +24,186 @@
|
|
|
24
24
|
require 'etc'
|
|
25
25
|
|
|
26
26
|
shared_context "setup correct permissions" do
|
|
27
|
-
context "on unix", :unix_only do
|
|
28
|
-
context "with root", :requires_root do
|
|
29
|
-
before :each do
|
|
30
|
-
File.chown(Etc.getpwnam('nobody').uid, 1337, path)
|
|
31
|
-
File.chmod(0776, path)
|
|
32
|
-
now = Time.now.to_i
|
|
33
|
-
File.utime(now - 9000, now - 9000, path)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
27
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
28
|
+
# I could not get this to work with :requires_unprivileged_user for whatever
|
|
29
|
+
# reason. The setup when running as root is the same as non-root, except we
|
|
30
|
+
# also do a chown, so this sets up correct context for either case.
|
|
31
|
+
before :each, :unix_only do
|
|
32
|
+
File.chmod(0776, path)
|
|
33
|
+
now = Time.now.to_i
|
|
34
|
+
File.utime(now - 9000, now - 9000, path)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Root only context.
|
|
38
|
+
before :each, :unix_only, :requires_root do
|
|
39
|
+
File.chown(Etc.getpwnam('nobody').uid, 1337, path)
|
|
44
40
|
end
|
|
45
41
|
|
|
46
42
|
# FIXME: windows
|
|
47
43
|
end
|
|
48
44
|
|
|
49
45
|
shared_context "setup broken permissions" do
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
context "without root", :requires_unprivileged_user do
|
|
59
|
-
before :each do
|
|
60
|
-
File.chmod(0644, path)
|
|
61
|
-
end
|
|
62
|
-
end
|
|
46
|
+
|
|
47
|
+
before :each, :unix_only do
|
|
48
|
+
File.chmod(0644, path)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
before :each, :unix_only, :requires_root do
|
|
52
|
+
File.chown(0, 0, path)
|
|
63
53
|
end
|
|
64
54
|
|
|
65
55
|
# FIXME: windows
|
|
66
56
|
end
|
|
67
57
|
|
|
68
|
-
|
|
58
|
+
shared_examples_for "a securable resource" do
|
|
59
|
+
context "on Unix", :unix_only do
|
|
60
|
+
let(:expected_user_name) { 'nobody' }
|
|
61
|
+
let(:expected_uid) { Etc.getpwnam(expected_user_name).uid }
|
|
62
|
+
let(:desired_gid) { 1337 }
|
|
63
|
+
let(:expected_gid) { 1337 }
|
|
69
64
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
ACE ||= Chef::ReservedNames::Win32::Security::ACE
|
|
73
|
-
end
|
|
65
|
+
pending "should set an owner (Rerun specs under root)", :requires_unprivileged_user => true
|
|
66
|
+
pending "should set a group (Rerun specs under root)", :requires_unprivileged_user => true
|
|
74
67
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
describe "when setting the owner", :requires_root do
|
|
69
|
+
before do
|
|
70
|
+
resource.owner expected_user_name
|
|
71
|
+
resource.run_action(:create)
|
|
72
|
+
end
|
|
78
73
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
it "should set an owner" do
|
|
75
|
+
File.lstat(path).uid.should == expected_uid
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "is marked as updated only if changes are made" do
|
|
79
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
80
|
+
end
|
|
82
81
|
|
|
83
|
-
def extract_ace_properties(aces)
|
|
84
|
-
hashes = []
|
|
85
|
-
aces.each do |ace|
|
|
86
|
-
hashes << { :mask => ace.mask, :type => ace.type, :flags => ace.flags }
|
|
87
82
|
end
|
|
88
|
-
hashes
|
|
89
|
-
end
|
|
90
83
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
end
|
|
84
|
+
describe "when setting the group", :requires_root do
|
|
85
|
+
before do
|
|
86
|
+
resource.group desired_gid
|
|
87
|
+
resource.run_action(:create)
|
|
88
|
+
end
|
|
98
89
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_READ | Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_EXECUTE
|
|
103
|
-
}
|
|
104
|
-
end
|
|
90
|
+
it "should set a group" do
|
|
91
|
+
File.lstat(path).gid.should == expected_gid
|
|
92
|
+
end
|
|
105
93
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_WRITE
|
|
110
|
-
}
|
|
111
|
-
end
|
|
94
|
+
it "is marked as updated only if changes are made" do
|
|
95
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
96
|
+
end
|
|
112
97
|
|
|
113
|
-
|
|
114
|
-
{
|
|
115
|
-
:generic => Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_WRITE | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE | Chef::ReservedNames::Win32::API::Security::DELETE,
|
|
116
|
-
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_READ | Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_WRITE | Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_EXECUTE | Chef::ReservedNames::Win32::API::Security::DELETE
|
|
117
|
-
}
|
|
118
|
-
end
|
|
98
|
+
end
|
|
119
99
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
100
|
+
describe "when setting the permissions from octal given as a String" do
|
|
101
|
+
before do
|
|
102
|
+
@mode_string = '776'
|
|
103
|
+
resource.mode @mode_string
|
|
104
|
+
resource.run_action(:create)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should set permissions as specified" do
|
|
108
|
+
pending('Linux does not support lchmod', :if => resource.instance_of?(Chef::Resource::Link) && !os_x? && !freebsd?) do
|
|
109
|
+
(File.lstat(path).mode & 007777).should == (@mode_string.oct & 007777)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
126
112
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
ace.type == type
|
|
131
|
-
ace.flags == flags
|
|
113
|
+
it "is marked as updated only if changes are made" do
|
|
114
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
115
|
+
end
|
|
132
116
|
end
|
|
133
|
-
end
|
|
134
117
|
|
|
135
|
-
|
|
136
|
-
|
|
118
|
+
describe "when setting permissions from a literal octal Integer" do
|
|
119
|
+
before do
|
|
120
|
+
@mode_integer = 0776
|
|
121
|
+
resource.mode @mode_integer
|
|
122
|
+
resource.run_action(:create)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should set permissions in numeric form as a ruby-interpreted octal" do
|
|
126
|
+
pending('Linux does not support lchmod', :if => resource.instance_of?(Chef::Resource::Link) && !os_x? && !freebsd?) do
|
|
127
|
+
(File.lstat(path).mode & 007777).should == (@mode_integer & 007777)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "is marked as updated only if changes are made" do
|
|
132
|
+
resource.updated_by_last_action?.should == expect_updated?
|
|
133
|
+
end
|
|
134
|
+
end
|
|
137
135
|
end
|
|
138
|
-
end
|
|
139
136
|
|
|
140
|
-
|
|
141
|
-
context "on Unix", :unix_only do
|
|
142
|
-
let(:expected_user_name) { 'nobody' }
|
|
143
|
-
let(:expected_uid) { Etc.getpwnam(expected_user_name).uid }
|
|
144
|
-
let(:desired_gid) { 1337 }
|
|
145
|
-
let(:expected_gid) { 1337 }
|
|
137
|
+
context "on Windows", :windows_only do
|
|
146
138
|
|
|
147
|
-
|
|
148
|
-
|
|
139
|
+
if windows?
|
|
140
|
+
SID = Chef::ReservedNames::Win32::Security::SID
|
|
141
|
+
ACE = Chef::ReservedNames::Win32::Security::ACE
|
|
142
|
+
end
|
|
149
143
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
resource.run_action(:create)
|
|
153
|
-
File.lstat(path).uid.should == expected_uid
|
|
144
|
+
def get_security_descriptor(path)
|
|
145
|
+
Chef::ReservedNames::Win32::Security.get_named_security_info(path)
|
|
154
146
|
end
|
|
155
147
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
resource.run_action(:create)
|
|
159
|
-
File.lstat(path).gid.should == expected_gid
|
|
148
|
+
def explicit_aces
|
|
149
|
+
descriptor.dacl.select { |ace| ace.explicit? }
|
|
160
150
|
end
|
|
161
151
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
end
|
|
152
|
+
def extract_ace_properties(aces)
|
|
153
|
+
hashes = []
|
|
154
|
+
aces.each do |ace|
|
|
155
|
+
hashes << { :mask => ace.mask, :type => ace.type, :flags => ace.flags }
|
|
156
|
+
end
|
|
157
|
+
hashes
|
|
169
158
|
end
|
|
170
159
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
160
|
+
# Standard expected rights
|
|
161
|
+
let(:expected_read_perms) do
|
|
162
|
+
{
|
|
163
|
+
:generic => Chef::ReservedNames::Win32::API::Security::GENERIC_READ,
|
|
164
|
+
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_READ,
|
|
165
|
+
}
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
let(:expected_read_execute_perms) do
|
|
169
|
+
{
|
|
170
|
+
:generic => Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE,
|
|
171
|
+
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_READ | Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_EXECUTE
|
|
172
|
+
}
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
let(:expected_write_perms) do
|
|
176
|
+
{
|
|
177
|
+
:generic => Chef::ReservedNames::Win32::API::Security::GENERIC_WRITE,
|
|
178
|
+
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_WRITE
|
|
179
|
+
}
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
let(:expected_modify_perms) do
|
|
183
|
+
{
|
|
184
|
+
:generic => Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_WRITE | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE | Chef::ReservedNames::Win32::API::Security::DELETE,
|
|
185
|
+
:specific => Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_READ | Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_WRITE | Chef::ReservedNames::Win32::API::Security::FILE_GENERIC_EXECUTE | Chef::ReservedNames::Win32::API::Security::DELETE
|
|
186
|
+
}
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
let(:expected_full_control_perms) do
|
|
190
|
+
{
|
|
191
|
+
:generic => Chef::ReservedNames::Win32::API::Security::GENERIC_ALL,
|
|
192
|
+
:specific => Chef::ReservedNames::Win32::API::Security::FILE_ALL_ACCESS
|
|
193
|
+
}
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
RSpec::Matchers.define :have_expected_properties do |mask, type, flags|
|
|
197
|
+
match do |ace|
|
|
198
|
+
ace.mask == mask
|
|
199
|
+
ace.type == type
|
|
200
|
+
ace.flags == flags
|
|
177
201
|
end
|
|
178
202
|
end
|
|
179
|
-
end
|
|
180
203
|
|
|
181
|
-
|
|
182
|
-
|
|
204
|
+
def descriptor
|
|
205
|
+
get_security_descriptor(path)
|
|
206
|
+
end
|
|
183
207
|
|
|
184
208
|
before(:each) do
|
|
185
209
|
resource.run_action(:delete)
|
|
@@ -329,7 +353,7 @@ shared_examples_for "a securable resource" do
|
|
|
329
353
|
|
|
330
354
|
context "with a mode attribute" do
|
|
331
355
|
if windows?
|
|
332
|
-
Security
|
|
356
|
+
Security = Chef::ReservedNames::Win32::API::Security
|
|
333
357
|
end
|
|
334
358
|
|
|
335
359
|
it "respects mode in string form as an octal number" do
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
|
|
2
|
+
shared_examples_for "a securable resource with reporting" do
|
|
3
|
+
|
|
4
|
+
let(:current_resource) do
|
|
5
|
+
provider = resource.provider_for_action(resource.action)
|
|
6
|
+
provider.load_current_resource
|
|
7
|
+
provider.current_resource
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Default mode varies based on implementation. Providers that use a tempfile
|
|
11
|
+
# will default to 0600. Providers that use File.open will default to 0666 -
|
|
12
|
+
# umask
|
|
13
|
+
# let(:default_mode) { ((0100666 - File.umask) & 07777).to_s(8) }
|
|
14
|
+
|
|
15
|
+
describe "reading file security metadata for reporting on unix", :unix_only => true do
|
|
16
|
+
context "when the target file doesn't exist" do
|
|
17
|
+
before do
|
|
18
|
+
resource.action(:create)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "has empty values for file metadata in 'current_resource'" do
|
|
22
|
+
current_resource.owner.should be_nil
|
|
23
|
+
current_resource.group.should be_nil
|
|
24
|
+
current_resource.mode.should be_nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context "and no security metadata is specified in new_resource" do
|
|
28
|
+
it "sets the metadata values on the new_resource as strings after creating" do
|
|
29
|
+
resource.run_action(:create)
|
|
30
|
+
# TODO: most stable way to specify?
|
|
31
|
+
resource.owner.should == Etc.getpwuid(Process.uid).name
|
|
32
|
+
resource.group.should == Etc.getgrgid(Process.gid).name
|
|
33
|
+
resource.mode.should == "0#{default_mode}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "and owner is specified with a String (username) in new_resource", :requires_root => true do
|
|
38
|
+
|
|
39
|
+
# TODO/bug: duplicated from the "securable resource" tests
|
|
40
|
+
let(:expected_user_name) { 'nobody' }
|
|
41
|
+
|
|
42
|
+
before do
|
|
43
|
+
resource.owner(expected_user_name)
|
|
44
|
+
resource.run_action(:create)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "sets the owner on new_resource to the username (String) of the desired owner" do
|
|
48
|
+
resource.owner.should == expected_user_name
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
context "and owner is specified with an Integer (uid) in new_resource", :requires_root => true do
|
|
54
|
+
|
|
55
|
+
# TODO: duplicated from "securable resource"
|
|
56
|
+
let(:expected_user_name) { 'nobody' }
|
|
57
|
+
let(:expected_uid) { Etc.getpwnam(expected_user_name).uid }
|
|
58
|
+
let(:desired_gid) { 1337 }
|
|
59
|
+
let(:expected_gid) { 1337 }
|
|
60
|
+
|
|
61
|
+
before do
|
|
62
|
+
resource.owner(expected_uid)
|
|
63
|
+
resource.run_action(:create)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "sets the owner on new_resource to the uid (Integer) of the desired owner" do
|
|
67
|
+
resource.owner.should == expected_uid
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "and group is specified with a String (group name)", :requires_root => true do
|
|
72
|
+
|
|
73
|
+
let(:expected_group_name) { Etc.getgrent.name }
|
|
74
|
+
|
|
75
|
+
before do
|
|
76
|
+
resource.group(expected_group_name)
|
|
77
|
+
resource.run_action(:create)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "sets the group on new_resource to the group name (String) of the group" do
|
|
81
|
+
resource.group.should == expected_group_name
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "and group is specified with an Integer (gid)", :requires_root => true do
|
|
87
|
+
let(:expected_gid) { Etc.getgrent.gid }
|
|
88
|
+
|
|
89
|
+
before do
|
|
90
|
+
resource.group(expected_gid)
|
|
91
|
+
resource.run_action(:create)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "sets the group on new_resource to the gid (Integer)" do
|
|
95
|
+
resource.group.should == expected_gid
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
context "and mode is specified as a String" do
|
|
101
|
+
# Need full permission for owner here or else remote directory gets
|
|
102
|
+
# into trouble trying to manage nested directories
|
|
103
|
+
let(:set_mode) { "0740" }
|
|
104
|
+
let(:expected_mode) { "0740" }
|
|
105
|
+
|
|
106
|
+
before do
|
|
107
|
+
resource.mode(set_mode)
|
|
108
|
+
resource.run_action(:create)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "sets mode on the new_resource as a String" do
|
|
112
|
+
resource.mode.should == expected_mode
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context "and mode is specified as an Integer" do
|
|
117
|
+
let(:set_mode) { 00740 }
|
|
118
|
+
|
|
119
|
+
let(:expected_mode) { "0740" }
|
|
120
|
+
before do
|
|
121
|
+
resource.mode(set_mode)
|
|
122
|
+
resource.run_action(:create)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "sets mode on the new resource as a String" do
|
|
126
|
+
resource.mode.should == expected_mode
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
context "when the target file exists" do
|
|
132
|
+
before do
|
|
133
|
+
FileUtils.touch(resource.path)
|
|
134
|
+
resource.action(:create)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context "and no security metadata is specified in new_resource" do
|
|
138
|
+
it "sets the current values on current resource as strings" do
|
|
139
|
+
# TODO: most stable way to specify?
|
|
140
|
+
current_resource.owner.should == Etc.getpwuid(Process.uid).name
|
|
141
|
+
current_resource.group.should == Etc.getgrgid(Process.gid).name
|
|
142
|
+
current_resource.mode.should == "0#{((0100666 - File.umask) & 07777).to_s(8)}"
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context "and owner is specified with a String (username) in new_resource" do
|
|
147
|
+
|
|
148
|
+
let(:expected_user_name) { Etc.getpwuid(Process.uid).name }
|
|
149
|
+
|
|
150
|
+
before do
|
|
151
|
+
resource.owner(expected_user_name)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it "sets the owner on new_resource to the username (String) of the desired owner" do
|
|
155
|
+
current_resource.owner.should == expected_user_name
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
context "and owner is specified with an Integer (uid) in new_resource" do
|
|
161
|
+
|
|
162
|
+
let(:expected_uid) { Process.uid }
|
|
163
|
+
|
|
164
|
+
before do
|
|
165
|
+
resource.owner(expected_uid)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "sets the owner on new_resource to the uid (Integer) of the desired owner" do
|
|
169
|
+
current_resource.owner.should == expected_uid
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
context "and group is specified with a String (group name)" do
|
|
174
|
+
|
|
175
|
+
let(:expected_group_name) { Etc.getgrgid(Process.gid).name }
|
|
176
|
+
|
|
177
|
+
before do
|
|
178
|
+
resource.group(expected_group_name)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "sets the group on new_resource to the group name (String) of the group" do
|
|
182
|
+
current_resource.group.should == expected_group_name
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
context "and group is specified with an Integer (gid)" do
|
|
188
|
+
let(:expected_gid) { Process.gid }
|
|
189
|
+
|
|
190
|
+
before do
|
|
191
|
+
resource.group(expected_gid)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "sets the group on new_resource to the gid (Integer)" do
|
|
195
|
+
current_resource.group.should == expected_gid
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
context "and mode is specified as a String" do
|
|
201
|
+
let(:default_create_mode) { (0100666 - File.umask) }
|
|
202
|
+
let(:expected_mode) { "0#{(default_create_mode & 07777).to_s(8)}" }
|
|
203
|
+
|
|
204
|
+
before do
|
|
205
|
+
resource.mode(expected_mode)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it "sets mode on the new_resource as a String" do
|
|
209
|
+
current_resource.mode.should == expected_mode
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
context "and mode is specified as an Integer" do
|
|
214
|
+
let(:set_mode) { (0100666 - File.umask) & 07777 }
|
|
215
|
+
let(:expected_mode) { "0#{set_mode.to_s(8)}" }
|
|
216
|
+
|
|
217
|
+
before do
|
|
218
|
+
resource.mode(set_mode)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it "sets mode on the new resource as a String" do
|
|
222
|
+
current_resource.mode.should == expected_mode
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
describe "reading file security metadata for reporting on windows", :windows_only do
|
|
229
|
+
|
|
230
|
+
before do
|
|
231
|
+
pending "windows reporting not yet fully supported"
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
ALL_EXPANDED_PERMISSIONS = ["generic read",
|
|
235
|
+
"generic write",
|
|
236
|
+
"generic execute",
|
|
237
|
+
"generic all",
|
|
238
|
+
"delete",
|
|
239
|
+
"read permissions",
|
|
240
|
+
"change permissions",
|
|
241
|
+
"take ownership",
|
|
242
|
+
"synchronize",
|
|
243
|
+
"access system security",
|
|
244
|
+
"read data / list directory",
|
|
245
|
+
"write data / add file",
|
|
246
|
+
"append data / add subdirectory",
|
|
247
|
+
"read extended attributes",
|
|
248
|
+
"write extended attributes",
|
|
249
|
+
"execute / traverse",
|
|
250
|
+
"delete child",
|
|
251
|
+
"read attributes",
|
|
252
|
+
"write attributes"]
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
context "when the target file doesn't exist" do
|
|
256
|
+
|
|
257
|
+
# Windows reporting data should look like this (+/- ish):
|
|
258
|
+
# { "owner" => "bob", "checksum" => "ffff", "access control" => { "bob" => { "permissions" => ["perm1", "perm2", ...], "flags" => [] }}}
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
before do
|
|
262
|
+
resource.action(:create)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
it "has empty values for file metadata in 'current_resource'" do
|
|
266
|
+
current_resource.owner.should be_nil
|
|
267
|
+
current_resource.expanded_rights.should be_nil
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
context "and no security metadata is specified in new_resource" do
|
|
271
|
+
it "sets the metadata values on the new_resource as strings after creating" do
|
|
272
|
+
resource.run_action(:create)
|
|
273
|
+
# TODO: most stable way to specify?
|
|
274
|
+
resource.owner.should == etc.getpwuid(process.uid).name
|
|
275
|
+
resource.state[:expanded_rights].should == { "CURRENTUSER" => { "permissions" => ALL_EXPANDED_PERMISSIONS, "flags" => [] }}
|
|
276
|
+
resource.state[:expanded_deny_rights].should == {}
|
|
277
|
+
resource.state[:inherits].should be_true
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
context "and owner is specified with a string (username) in new_resource" do
|
|
283
|
+
|
|
284
|
+
# TODO/bug: duplicated from the "securable resource" tests
|
|
285
|
+
let(:expected_user_name) { 'Guest' }
|
|
286
|
+
|
|
287
|
+
before do
|
|
288
|
+
resource.owner(expected_user_name)
|
|
289
|
+
resource.run_action(:create)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
it "sets the owner on new_resource to the username (string) of the desired owner" do
|
|
293
|
+
resource.owner.should == expected_user_name
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
context "and owner is specified with a fully qualified domain user" do
|
|
299
|
+
|
|
300
|
+
# TODO: duplicated from "securable resource"
|
|
301
|
+
let(:expected_user_name) { 'domain\user' }
|
|
302
|
+
|
|
303
|
+
before do
|
|
304
|
+
resource.owner(expected_user_name)
|
|
305
|
+
resource.run_action(:create)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
it "sets the owner on new_resource to the fully qualified name of the desired owner" do
|
|
309
|
+
resource.owner.should == expected_user_name
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
context "when the target file exists" do
|
|
316
|
+
before do
|
|
317
|
+
FileUtils.touch(resource.path)
|
|
318
|
+
resource.action(:create)
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
context "and no security metadata is specified in new_resource" do
|
|
322
|
+
it "sets the current values on current resource as strings" do
|
|
323
|
+
# TODO: most stable way to specify?
|
|
324
|
+
current_resource.owner.should == etc.getpwuid(process.uid).name
|
|
325
|
+
current_resource.expanded_rights.should == { "CURRENTUSER" => ALL_EXPANDED_PERMISSIONS }
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
context "and owner is specified with a string (username) in new_resource" do
|
|
330
|
+
|
|
331
|
+
let(:expected_user_name) { etc.getpwuid(process.uid).name }
|
|
332
|
+
|
|
333
|
+
before do
|
|
334
|
+
resource.owner(expected_user_name)
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
it "sets the owner on current_resource to the username (string) of the desired owner" do
|
|
338
|
+
current_resource.owner.should == expected_user_name
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
context "and owner is specified as a fully qualified 'domain\\user' in new_resource" do
|
|
344
|
+
|
|
345
|
+
let(:expected_user_name) { 'domain\user' }
|
|
346
|
+
|
|
347
|
+
before do
|
|
348
|
+
resource.owner(expected_user_name)
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
it "sets the owner on current_resource to the fully qualified name of the desired owner" do
|
|
352
|
+
current_resource.owner.should == expected_uid
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
context "and access rights are specified on the new_resource" do
|
|
357
|
+
# TODO: before do blah
|
|
358
|
+
|
|
359
|
+
it "sets the expanded_rights on the current resource" do
|
|
360
|
+
pending
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
context "and no access rights are specified on the current resource" do
|
|
365
|
+
# TODO: before do blah
|
|
366
|
+
|
|
367
|
+
it "sets the expanded rights on the current resource" do
|
|
368
|
+
pending
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
end
|
|
374
|
+
end
|
|
375
|
+
end
|