chef 10.34.6-x86-mingw32 → 11.6.2-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +18 -1
- data/bin/chef-apply +25 -0
- data/bin/chef-service-manager +37 -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 +4 -4
- data/distro/common/html/chef-solr.8.html +5 -5
- 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 +4 -4
- data/distro/common/html/knife-data-bag.1.html +4 -4
- data/distro/common/html/knife-environment.1.html +4 -4
- 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 +0 -99
- 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 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +0 -168
- 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 +1 -1
- 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 +6 -4
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +3 -6
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +68 -18
- data/lib/chef/application/apply.rb +162 -0
- data/lib/chef/application/client.rb +37 -22
- data/lib/chef/application/knife.rb +2 -4
- data/lib/chef/application/solo.rb +27 -13
- data/lib/chef/application/windows_service.rb +114 -54
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +9 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +284 -0
- data/lib/chef/chef_fs/config.rb +205 -0
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
- data/lib/chef/chef_fs/file_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +426 -0
- data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
- data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
- data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -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 +180 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +60 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
- data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
- data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
- data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
- data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
- data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
- data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +113 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
- data/lib/chef/chef_fs/knife.rb +116 -0
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +90 -0
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +111 -34
- data/lib/chef/config.rb +111 -102
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/metadata.rb +0 -2
- data/lib/chef/cookbook/syntax_check.rb +76 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +16 -9
- data/lib/chef/cookbook_version.rb +2 -410
- data/lib/chef/daemon.rb +24 -19
- data/lib/chef/data_bag.rb +20 -104
- data/lib/chef/data_bag_item.rb +2 -65
- data/lib/chef/deprecation/mixin/template.rb +49 -0
- data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
- data/lib/chef/deprecation/provider/file.rb +197 -0
- data/lib/chef/deprecation/provider/remote_file.rb +86 -0
- data/lib/chef/deprecation/provider/template.rb +63 -0
- data/lib/chef/deprecation/warnings.rb +38 -0
- data/lib/chef/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +71 -0
- data/lib/chef/dsl/include_attribute.rb +63 -0
- data/lib/chef/dsl/include_recipe.rb +45 -0
- data/lib/chef/dsl/platform_introspection.rb +218 -0
- data/lib/chef/dsl/recipe.rb +87 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +171 -24
- data/lib/chef/environment.rb +39 -179
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +107 -8
- data/lib/chef/file_access_control/unix.rb +64 -7
- data/lib/chef/file_access_control/windows.rb +22 -11
- data/lib/chef/file_content_management/content_base.rb +56 -0
- data/lib/chef/file_content_management/deploy.rb +38 -0
- data/lib/chef/file_content_management/deploy/cp.rb +48 -0
- data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
- data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
- data/lib/chef/file_content_management/tempfile.rb +61 -0
- data/lib/chef/formatters/base.rb +4 -1
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_descriptor.rb +5 -4
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -0
- data/lib/chef/json_compat.rb +15 -14
- data/lib/chef/knife.rb +99 -41
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +19 -17
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +4 -2
- data/lib/chef/knife/cookbook_upload.rb +4 -4
- data/lib/chef/knife/core/bootstrap_context.rb +11 -5
- data/lib/chef/knife/core/generic_presenter.rb +42 -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/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +34 -13
- data/lib/chef/knife/delete.rb +106 -0
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +63 -0
- data/lib/chef/knife/download.rb +63 -0
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -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 +153 -0
- data/lib/chef/knife/node_run_list_set.rb +66 -0
- data/lib/chef/knife/node_show.rb +1 -7
- data/lib/chef/knife/raw.rb +64 -0
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +45 -28
- data/lib/chef/knife/show.rb +55 -0
- data/lib/chef/knife/ssh.rb +14 -2
- data/lib/chef/knife/upload.rb +69 -0
- data/lib/chef/knife/user_create.rb +93 -0
- data/lib/chef/knife/user_delete.rb +46 -0
- data/lib/chef/knife/user_edit.rb +53 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
- data/lib/chef/knife/user_reregister.rb +59 -0
- data/lib/chef/knife/user_show.rb +49 -0
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +78 -194
- data/lib/chef/mixin/deprecation.rb +35 -0
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language.rb +22 -223
- data/lib/chef/mixin/language_include_attribute.rb +10 -36
- data/lib/chef/mixin/language_include_recipe.rb +7 -33
- data/lib/chef/mixin/params_validate.rb +0 -3
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +156 -26
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/mixins.rb +1 -5
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +139 -308
- data/lib/chef/node/attribute.rb +367 -473
- data/lib/chef/node/attribute_collections.rb +206 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +4 -496
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
- data/lib/chef/provider.rb +14 -58
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +11 -80
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +26 -21
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +12 -18
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +297 -248
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- 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/ifconfig.rb +25 -35
- data/lib/chef/provider/ifconfig/debian.rb +71 -0
- data/lib/chef/provider/ifconfig/redhat.rb +47 -0
- data/lib/chef/provider/link.rb +12 -3
- data/lib/chef/provider/lwrp_base.rb +150 -0
- data/lib/chef/provider/mount.rb +1 -1
- data/lib/chef/provider/mount/mount.rb +8 -3
- data/lib/chef/provider/mount/windows.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +4 -1
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +6 -5
- data/lib/chef/provider/remote_file.rb +13 -100
- data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
- data/lib/chef/provider/remote_file/content.rb +75 -0
- data/lib/chef/provider/remote_file/fetcher.rb +43 -0
- data/lib/chef/provider/remote_file/ftp.rb +183 -0
- data/lib/chef/provider/remote_file/http.rb +124 -0
- data/lib/chef/provider/remote_file/local_file.rb +47 -0
- data/lib/chef/provider/route.rb +6 -2
- data/lib/chef/provider/ruby_block.rb +5 -2
- data/lib/chef/provider/script.rb +14 -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 +29 -81
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -81
- data/lib/chef/provider/template/content.rb +61 -0
- 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 +50 -54
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +18 -1
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +52 -146
- data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
- data/lib/chef/resource/conditional.rb +4 -0
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
- data/lib/chef/resource/file.rb +31 -3
- data/lib/chef/resource/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +132 -0
- data/lib/chef/resource/mount.rb +39 -13
- data/lib/chef/resource/powershell_script.rb +31 -0
- 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 +62 -25
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +69 -31
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +4 -1
- data/lib/chef/rest.rb +55 -127
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +7 -8
- 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 +1 -16
- data/lib/chef/run_lock.rb +96 -0
- data/lib/chef/runner.rb +28 -6
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +8 -5
- data/lib/chef/search/query.rb +2 -2
- 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} +15 -13
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/user.rb +182 -0
- data/lib/chef/util/backup.rb +84 -0
- data/lib/chef/util/diff.rb +145 -0
- data/lib/chef/util/file_edit.rb +1 -1
- data/lib/chef/util/selinux.rb +100 -0
- data/lib/chef/util/windows/net_group.rb +1 -5
- data/lib/chef/util/windows/net_user.rb +14 -1
- data/lib/chef/util/windows/volume.rb +2 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version/platform.rb +42 -0
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/version_constraint.rb +6 -5
- data/lib/chef/{index_queue.rb → version_constraint/platform.rb} +11 -14
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/api/security.rb +45 -1
- data/lib/chef/win32/registry.rb +382 -0
- data/lib/chef/win32/security.rb +19 -0
- data/lib/chef/win32/version.rb +25 -8
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
- data/spec/data/apt/var/www/apt/conf/distributions +7 -0
- data/spec/data/apt/var/www/apt/conf/incoming +4 -0
- data/spec/data/apt/var/www/apt/conf/pulls +3 -0
- data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
- data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
- data/spec/data/apt/var/www/apt/db/packages.db +0 -0
- data/spec/data/apt/var/www/apt/db/references.db +0 -0
- data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
- data/spec/data/apt/var/www/apt/db/version +4 -0
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
- data/spec/data/bootstrap/secret.erb +9 -0
- data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
- data/spec/data/git_bundles/example-repo.gitbundle +0 -0
- data/spec/data/knife_subcommand/test_yourself.rb +8 -0
- 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/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/remote_file/nyan_cat.png.gz +0 -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/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/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 +10 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +3 -3
- data/spec/functional/knife/smoke_test.rb +34 -0
- data/spec/functional/knife/ssh_spec.rb +5 -1
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
- data/spec/functional/resource/batch_spec.rb +64 -0
- data/spec/functional/resource/cookbook_file_spec.rb +15 -9
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +5 -1
- data/spec/functional/resource/file_spec.rb +71 -21
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +424 -388
- data/spec/functional/resource/package_spec.rb +297 -0
- data/spec/functional/resource/powershell_spec.rb +188 -0
- data/spec/functional/resource/registry_spec.rb +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +143 -37
- data/spec/functional/resource/remote_file_spec.rb +99 -13
- data/spec/functional/resource/template_spec.rb +180 -3
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +243 -0
- data/spec/functional/shell_spec.rb +102 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/functional/win32/security_spec.rb +37 -0
- data/spec/functional/win32/service_manager_spec.rb +269 -0
- data/spec/functional/win32/versions_spec.rb +78 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
- data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
- data/spec/integration/knife/chefignore_spec.rb +271 -0
- data/spec/integration/knife/delete_spec.rb +944 -0
- data/spec/integration/knife/deps_spec.rb +648 -0
- data/spec/integration/knife/diff_spec.rb +536 -0
- data/spec/integration/knife/download_spec.rb +962 -0
- data/spec/integration/knife/list_spec.rb +633 -0
- data/spec/integration/knife/raw_spec.rb +166 -0
- data/spec/integration/knife/redirection_spec.rb +57 -0
- data/spec/integration/knife/show_spec.rb +158 -0
- data/spec/integration/knife/upload_spec.rb +1060 -0
- data/spec/integration/solo/solo_spec.rb +41 -0
- data/spec/spec_helper.rb +49 -13
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +33 -3
- data/spec/support/lib/chef/resource/cat.rb +3 -5
- data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
- data/spec/support/lib/chef/resource/zen_master.rb +8 -10
- data/spec/support/platform_helpers.rb +46 -13
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/diff_disabled.rb +10 -0
- data/spec/support/shared/functional/directory_resource.rb +129 -38
- data/spec/support/shared/functional/file_resource.rb +837 -71
- data/spec/support/shared/functional/securable_resource.rb +189 -58
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
- data/spec/support/shared/integration/integration_helper.rb +166 -0
- data/spec/support/shared/integration/knife_support.rb +171 -0
- data/spec/support/shared/unit/execute_resource.rb +125 -0
- data/spec/support/shared/unit/file_system_support.rb +70 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/support/shared/unit/provider/file.rb +609 -0
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
- data/spec/support/shared/unit/script_resource.rb +52 -0
- data/spec/support/shared/unit/windows_script_resource.rb +48 -0
- data/spec/tiny_server.rb +13 -11
- data/spec/unit/api_client/registration_spec.rb +172 -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 +16 -14
- data/spec/unit/application/knife_spec.rb +17 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +113 -3
- 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_spec.rb +135 -0
- data/spec/unit/client_spec.rb +195 -23
- data/spec/unit/config_spec.rb +102 -51
- data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
- data/spec/unit/cookbook_loader_spec.rb +154 -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 +24 -19
- data/spec/unit/data_bag_spec.rb +13 -4
- data/spec/unit/deprecation_spec.rb +86 -0
- 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 +197 -157
- data/spec/unit/environment_spec.rb +94 -126
- data/spec/unit/exceptions_spec.rb +8 -4
- data/spec/unit/file_access_control_spec.rb +21 -1
- data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +6 -5
- data/spec/unit/json_compat_spec.rb +8 -0
- data/spec/unit/knife/bootstrap_spec.rb +130 -29
- data/spec/unit/knife/configure_spec.rb +64 -45
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- 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 +39 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +196 -124
- 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/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife/user_create_spec.rb +86 -0
- data/spec/unit/knife/user_delete_spec.rb +39 -0
- data/spec/unit/knife/user_edit_spec.rb +42 -0
- data/spec/unit/knife/user_list_spec.rb +32 -0
- data/spec/unit/knife/user_reregister_spec.rb +53 -0
- data/spec/unit/knife/user_show_spec.rb +41 -0
- data/spec/unit/knife_spec.rb +74 -0
- data/spec/unit/lwrp_spec.rb +102 -60
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +130 -791
- data/spec/unit/mixin/deprecation_spec.rb +23 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +145 -14
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node/attribute_spec.rb +273 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +418 -370
- data/spec/unit/platform_spec.rb +21 -8
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -187
- data/spec/unit/provider/cron/solaris_spec.rb +1 -1
- data/spec/unit/provider/deploy/revision_spec.rb +19 -11
- data/spec/unit/provider/deploy_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +99 -67
- data/spec/unit/provider/env_spec.rb +2 -2
- data/spec/unit/provider/execute_spec.rb +27 -1
- data/spec/unit/provider/file/content_spec.rb +101 -0
- data/spec/unit/provider/file_spec.rb +25 -475
- data/spec/unit/provider/git_spec.rb +224 -28
- 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 +9 -22
- 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/debian_spec.rb +89 -0
- data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
- data/spec/unit/provider/ifconfig_spec.rb +0 -33
- data/spec/unit/provider/mount/mount_spec.rb +33 -2
- data/spec/unit/provider/mount/windows_spec.rb +4 -1
- data/spec/unit/provider/mount_spec.rb +16 -6
- 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/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +7 -9
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -7
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
- data/spec/unit/provider/remote_file/content_spec.rb +230 -0
- data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
- data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
- data/spec/unit/provider/remote_file/http_spec.rb +319 -0
- data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
- data/spec/unit/provider/remote_file_spec.rb +33 -259
- data/spec/unit/provider/route_spec.rb +29 -12
- 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 +176 -207
- 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/solaris_smf_service_spec.rb +21 -18
- data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +11 -11
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -160
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/solaris_spec.rb +39 -373
- data/spec/unit/provider/user/useradd_spec.rb +12 -379
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +376 -0
- data/spec/unit/resource/batch_spec.rb +48 -0
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
- data/spec/unit/resource/execute_spec.rb +3 -101
- data/spec/unit/resource/file_spec.rb +0 -5
- data/spec/unit/resource/group_spec.rb +9 -0
- data/spec/unit/resource/ifconfig_spec.rb +60 -1
- data/spec/unit/resource/link_spec.rb +1 -0
- data/spec/unit/resource/mount_spec.rb +37 -11
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +63 -25
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource/template_spec.rb +111 -8
- data/spec/unit/resource/user_spec.rb +7 -0
- data/spec/unit/resource_collection_spec.rb +61 -32
- data/spec/unit/resource_reporter_spec.rb +115 -102
- data/spec/unit/resource_spec.rb +197 -5
- data/spec/unit/rest/auth_credentials_spec.rb +4 -21
- data/spec/unit/rest_spec.rb +134 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -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 +102 -3
- data/spec/unit/scan_access_control_spec.rb +8 -6
- 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} +16 -58
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- data/spec/unit/user_spec.rb +255 -0
- data/spec/unit/util/backup_spec.rb +149 -0
- data/spec/unit/util/diff_spec.rb +596 -0
- data/spec/unit/util/selinux_spec.rb +172 -0
- data/spec/unit/version/platform_spec.rb +61 -0
- data/spec/unit/version_constraint/platform_spec.rb +46 -0
- data/spec/unit/version_constraint_spec.rb +5 -0
- metadata +493 -264
- 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/dir.rb +0 -36
- 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/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/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/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
@@ -32,6 +32,25 @@ class Chef
|
|
32
32
|
sorted_releases
|
33
33
|
end
|
34
34
|
|
35
|
+
def action_deploy
|
36
|
+
validate_release_history!
|
37
|
+
super
|
38
|
+
end
|
39
|
+
|
40
|
+
def cleanup!
|
41
|
+
super
|
42
|
+
|
43
|
+
known_releases = sorted_releases
|
44
|
+
|
45
|
+
Dir["#{new_resource.deploy_to}/releases/*"].each do |release_dir|
|
46
|
+
unless known_releases.include?(release_dir)
|
47
|
+
converge_by("Remove unknown release in #{release_dir}") do
|
48
|
+
FileUtils.rm_rf(release_dir)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
35
54
|
protected
|
36
55
|
|
37
56
|
def release_created(release)
|
@@ -57,6 +76,14 @@ class Chef
|
|
57
76
|
cache
|
58
77
|
end
|
59
78
|
|
79
|
+
def validate_release_history!
|
80
|
+
sorted_releases do |release_list|
|
81
|
+
release_list.each do |path|
|
82
|
+
release_list.delete(path) unless ::File.exist?(path)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
60
87
|
def sorted_releases_from_filesystem
|
61
88
|
Dir.glob(new_resource.deploy_to + "/releases/*").sort_by { |d| ::File.ctime(d) }
|
62
89
|
end
|
@@ -26,6 +26,7 @@ require 'fileutils'
|
|
26
26
|
class Chef
|
27
27
|
class Provider
|
28
28
|
class Directory < Chef::Provider::File
|
29
|
+
|
29
30
|
def whyrun_supported?
|
30
31
|
true
|
31
32
|
end
|
@@ -33,16 +34,13 @@ class Chef
|
|
33
34
|
def load_current_resource
|
34
35
|
@current_resource = Chef::Resource::Directory.new(@new_resource.name)
|
35
36
|
@current_resource.path(@new_resource.path)
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
if ::File.exists?(@current_resource.path) && @action != :create_if_missing
|
38
|
+
load_resource_attributes_from_file(@current_resource)
|
39
|
+
end
|
39
40
|
@current_resource
|
40
41
|
end
|
41
42
|
|
42
43
|
def define_resource_requirements
|
43
|
-
# this must be evaluated before whyrun messages are printed
|
44
|
-
access_controls.requires_changes?
|
45
|
-
|
46
44
|
requirements.assert(:create) do |a|
|
47
45
|
# Make sure the parent dir exists, or else fail.
|
48
46
|
# for why run, print a message explaining the potential error.
|
@@ -60,7 +58,7 @@ class Chef
|
|
60
58
|
# make sure we have write permissions to that directory
|
61
59
|
is_parent_writable = lambda do |base_dir|
|
62
60
|
base_dir = ::File.dirname(base_dir)
|
63
|
-
if ::File.
|
61
|
+
if ::File.exists?(base_dir)
|
64
62
|
::File.writable?(base_dir)
|
65
63
|
else
|
66
64
|
is_parent_writable.call(base_dir)
|
@@ -70,7 +68,7 @@ class Chef
|
|
70
68
|
else
|
71
69
|
# in why run mode & parent directory does not exist no permissions check is required
|
72
70
|
# If not in why run, permissions must be valid and we rely on prior assertion that dir exists
|
73
|
-
if !whyrun_mode? || ::File.
|
71
|
+
if !whyrun_mode? || ::File.exists?(parent_directory)
|
74
72
|
::File.writable?(parent_directory)
|
75
73
|
else
|
76
74
|
true
|
@@ -83,7 +81,7 @@ class Chef
|
|
83
81
|
|
84
82
|
requirements.assert(:delete) do |a|
|
85
83
|
a.assertion do
|
86
|
-
if ::File.
|
84
|
+
if ::File.exists?(@new_resource.path)
|
87
85
|
::File.directory?(@new_resource.path) && ::File.writable?(@new_resource.path)
|
88
86
|
else
|
89
87
|
true
|
@@ -97,7 +95,7 @@ class Chef
|
|
97
95
|
end
|
98
96
|
|
99
97
|
def action_create
|
100
|
-
unless ::File.
|
98
|
+
unless ::File.exists?(@new_resource.path)
|
101
99
|
converge_by("create new directory #{@new_resource.path}") do
|
102
100
|
if @new_resource.recursive == true
|
103
101
|
::FileUtils.mkdir_p(@new_resource.path)
|
@@ -107,11 +105,13 @@ class Chef
|
|
107
105
|
Chef::Log.info("#{@new_resource} created directory #{@new_resource.path}")
|
108
106
|
end
|
109
107
|
end
|
110
|
-
|
108
|
+
do_acl_changes
|
109
|
+
do_selinux(true)
|
110
|
+
load_resource_attributes_from_file(@new_resource)
|
111
111
|
end
|
112
112
|
|
113
113
|
def action_delete
|
114
|
-
if ::File.
|
114
|
+
if ::File.exists?(@new_resource.path)
|
115
115
|
converge_by("delete existing directory #{@new_resource.path}") do
|
116
116
|
if @new_resource.recursive == true
|
117
117
|
FileUtils.rm_rf(@new_resource.path)
|
@@ -123,12 +123,6 @@ class Chef
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
126
|
-
|
127
|
-
private
|
128
|
-
|
129
|
-
def managing_content?
|
130
|
-
false
|
131
|
-
end
|
132
126
|
end
|
133
127
|
end
|
134
128
|
end
|
@@ -37,11 +37,9 @@ class Chef
|
|
37
37
|
def action_run
|
38
38
|
opts = {}
|
39
39
|
|
40
|
-
if sentinel_file =
|
41
|
-
|
42
|
-
|
43
|
-
return false
|
44
|
-
end
|
40
|
+
if sentinel_file = sentinel_file_if_exists
|
41
|
+
Chef::Log.debug("#{@new_resource} sentinel file #{sentinel_file} exists - nothing to do")
|
42
|
+
return false
|
45
43
|
end
|
46
44
|
|
47
45
|
# original implementation did not specify a timeout, but ShellOut
|
@@ -63,6 +61,25 @@ class Chef
|
|
63
61
|
Chef::Log.info("#{@new_resource} ran successfully")
|
64
62
|
end
|
65
63
|
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def sentinel_file_if_exists
|
68
|
+
if sentinel_file = @new_resource.creates
|
69
|
+
relative = Pathname(sentinel_file).relative?
|
70
|
+
cwd = @new_resource.cwd
|
71
|
+
if relative && !cwd
|
72
|
+
Chef::Log.warn "You have provided relative path for execute#creates (#{sentinel_file}) without execute#cwd (see CHEF-3819)"
|
73
|
+
end
|
74
|
+
|
75
|
+
if ::File.exists?(sentinel_file)
|
76
|
+
sentinel_file
|
77
|
+
elsif cwd && relative
|
78
|
+
sentinel_file = ::File.join(cwd, sentinel_file)
|
79
|
+
sentinel_file if ::File.exists?(sentinel_file)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
66
83
|
end
|
67
84
|
end
|
68
85
|
end
|
data/lib/chef/provider/file.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Adam Jacob (<adam@opscode.com>)
|
3
|
-
#
|
3
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
4
|
+
# Copyright:: Copyright (c) 2008-2013 Opscode, Inc.
|
4
5
|
# License:: Apache License, Version 2.0
|
5
6
|
#
|
6
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -19,105 +20,50 @@
|
|
19
20
|
require 'chef/config'
|
20
21
|
require 'chef/log'
|
21
22
|
require 'chef/resource/file'
|
22
|
-
require 'chef/mixin/checksum'
|
23
23
|
require 'chef/provider'
|
24
24
|
require 'etc'
|
25
25
|
require 'fileutils'
|
26
26
|
require 'chef/scan_access_control'
|
27
|
+
require 'chef/mixin/checksum'
|
27
28
|
require 'chef/mixin/shell_out'
|
29
|
+
require 'chef/mixin/file_class'
|
30
|
+
require 'chef/util/backup'
|
31
|
+
require 'chef/util/diff'
|
32
|
+
require 'chef/deprecation/provider/file'
|
33
|
+
require 'chef/deprecation/warnings'
|
34
|
+
require 'chef/file_content_management/deploy'
|
35
|
+
|
36
|
+
# The Tao of File Providers:
|
37
|
+
# - the content provider must always return a tempfile that we can delete/mv
|
38
|
+
# - do_create_file shall always create the file first and obey umask when perms are not specified
|
39
|
+
# - do_contents_changes may assume the destination file exists (simplifies exception checking,
|
40
|
+
# and always gives us something to diff against)
|
41
|
+
# - do_contents_changes must restore the perms to the dest file and not obliterate them with
|
42
|
+
# random tempfile permissions
|
43
|
+
# - do_acl_changes may assume perms were not modified between lcr and when it runs (although the
|
44
|
+
# file may have been created)
|
28
45
|
|
29
46
|
class Chef
|
30
|
-
|
31
47
|
class Provider
|
32
48
|
class File < Chef::Provider
|
49
|
+
include Chef::Mixin::EnforceOwnershipAndPermissions
|
33
50
|
include Chef::Mixin::Checksum
|
34
51
|
include Chef::Mixin::ShellOut
|
52
|
+
include Chef::Util::Selinux
|
53
|
+
include Chef::Mixin::FileClass
|
35
54
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
big
|
41
|
-
end
|
42
|
-
|
43
|
-
def octal_mode(mode)
|
44
|
-
((mode.respond_to?(:oct) ? mode.oct : mode.to_i) & 007777)
|
45
|
-
end
|
46
|
-
|
47
|
-
private :negative_complement, :octal_mode
|
48
|
-
|
49
|
-
def diff_current_from_content(new_content)
|
50
|
-
result = nil
|
51
|
-
Tempfile.open("chef-diff") do |file|
|
52
|
-
file.write new_content
|
53
|
-
file.close
|
54
|
-
result = diff_current file.path
|
55
|
-
end
|
56
|
-
result
|
57
|
-
end
|
58
|
-
|
59
|
-
def is_binary?(path)
|
60
|
-
::File.open(path) do |file|
|
61
|
-
|
62
|
-
buff = file.read(Chef::Config[:diff_filesize_threshold])
|
63
|
-
buff = "" if buff.nil?
|
64
|
-
return buff !~ /^[\r[:print:]]*$/
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
def diff_current(temp_path)
|
70
|
-
suppress_resource_reporting = false
|
71
|
-
|
72
|
-
return [ "(diff output suppressed by config)" ] if Chef::Config[:diff_disabled]
|
73
|
-
return [ "(no temp file with new content, diff output suppressed)" ] unless ::File.exists?(temp_path) # should never happen?
|
55
|
+
extend Chef::Deprecation::Warnings
|
56
|
+
include Chef::Deprecation::Provider::File
|
57
|
+
add_deprecation_warnings_for(Chef::Deprecation::Provider::File.instance_methods)
|
74
58
|
|
75
|
-
|
76
|
-
target_path = if ::File.exists?(@current_resource.path)
|
77
|
-
@current_resource.path
|
78
|
-
else
|
79
|
-
suppress_resource_reporting = true # suppress big diffs going to resource reporting service
|
80
|
-
tempfile = Tempfile.new('chef-tempfile')
|
81
|
-
tempfile.path
|
82
|
-
end
|
59
|
+
attr_reader :deployment_strategy
|
83
60
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
return [ "(file sizes exceed #{diff_filesize_threshold} bytes, diff output suppressed)" ]
|
89
|
-
end
|
90
|
-
|
91
|
-
# MacOSX(BSD?) diff will *sometimes* happily spit out nasty binary diffs
|
92
|
-
return [ "(current file is binary, diff output suppressed)"] if is_binary?(target_path)
|
93
|
-
return [ "(new content is binary, diff output suppressed)"] if is_binary?(temp_path)
|
94
|
-
|
95
|
-
begin
|
96
|
-
# -u: Unified diff format
|
97
|
-
result = shell_out("diff -u #{target_path} #{temp_path}" )
|
98
|
-
rescue Exception => e
|
99
|
-
# Should *not* receive this, but in some circumstances it seems that
|
100
|
-
# an exception can be thrown even using shell_out instead of shell_out!
|
101
|
-
return [ "Could not determine diff. Error: #{e.message}" ]
|
102
|
-
end
|
103
|
-
|
104
|
-
# diff will set a non-zero return code even when there's
|
105
|
-
# valid stdout results, if it encounters something unexpected
|
106
|
-
# So as long as we have output, we'll show it.
|
107
|
-
if not result.stdout.empty?
|
108
|
-
if result.stdout.length > diff_output_threshold
|
109
|
-
[ "(long diff of over #{diff_output_threshold} characters, diff output suppressed)" ]
|
110
|
-
else
|
111
|
-
val = result.stdout.split("\n")
|
112
|
-
val.delete("\")
|
113
|
-
@new_resource.diff(val.join("\\n")) unless suppress_resource_reporting
|
114
|
-
val
|
115
|
-
end
|
116
|
-
elsif not result.stderr.empty?
|
117
|
-
[ "Could not determine diff. Error: #{result.stderr}" ]
|
118
|
-
else
|
119
|
-
[ "(no diff)" ]
|
61
|
+
def initialize(new_resource, run_context)
|
62
|
+
@content_class ||= Chef::Provider::File::Content
|
63
|
+
if new_resource.respond_to?(:atomic_update)
|
64
|
+
@deployment_strategy = Chef::FileContentManagement::Deploy.strategy(new_resource.atomic_update)
|
120
65
|
end
|
66
|
+
super
|
121
67
|
end
|
122
68
|
|
123
69
|
def whyrun_supported?
|
@@ -125,151 +71,56 @@ class Chef
|
|
125
71
|
end
|
126
72
|
|
127
73
|
def load_current_resource
|
128
|
-
#
|
129
|
-
# should only be run in the file case.
|
74
|
+
# Let children resources override constructing the @current_resource
|
130
75
|
@current_resource ||= Chef::Resource::File.new(@new_resource.name)
|
131
|
-
@new_resource.path.gsub!(/\\/, "/") # for Windows
|
132
76
|
@current_resource.path(@new_resource.path)
|
133
|
-
if
|
134
|
-
if
|
135
|
-
|
136
|
-
@current_resource.checksum(checksum(@new_resource.path))
|
137
|
-
end
|
77
|
+
if ::File.exists?(@current_resource.path) && ::File.file?(::File.realpath(@current_resource.path))
|
78
|
+
if @action != :create_if_missing && @current_resource.respond_to?(:checksum)
|
79
|
+
@current_resource.checksum(checksum(@current_resource.path))
|
138
80
|
end
|
81
|
+
load_resource_attributes_from_file(@current_resource)
|
139
82
|
end
|
140
|
-
load_current_resource_attrs
|
141
|
-
setup_acl
|
142
|
-
|
143
83
|
@current_resource
|
144
84
|
end
|
145
85
|
|
146
|
-
def load_current_resource_attrs
|
147
|
-
if Chef::Platform.windows?
|
148
|
-
# TODO: To work around CHEF-3554, add support for Windows
|
149
|
-
# equivalent, or implicit resource reporting won't work for
|
150
|
-
# Windows.
|
151
|
-
return
|
152
|
-
end
|
153
|
-
|
154
|
-
if ::File.exist?(@new_resource.path)
|
155
|
-
stat = ::File.stat(@new_resource.path)
|
156
|
-
@current_resource.owner(stat.uid)
|
157
|
-
@current_resource.mode(stat.mode & 07777)
|
158
|
-
@current_resource.group(stat.gid)
|
159
|
-
|
160
|
-
if @new_resource.group.nil?
|
161
|
-
@new_resource.group(@current_resource.group)
|
162
|
-
end
|
163
|
-
if @new_resource.owner.nil?
|
164
|
-
@new_resource.owner(@current_resource.owner)
|
165
|
-
end
|
166
|
-
if @new_resource.mode.nil?
|
167
|
-
@new_resource.mode(@current_resource.mode)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
def setup_acl
|
173
|
-
@acl_scanner = ScanAccessControl.new(@new_resource, @current_resource)
|
174
|
-
@acl_scanner.set_all!
|
175
|
-
end
|
176
|
-
|
177
86
|
def define_resource_requirements
|
178
|
-
#
|
179
|
-
access_controls.
|
180
|
-
|
87
|
+
# deep inside FAC we have to assert requirements, so call FACs hook to set that up
|
88
|
+
access_controls.define_resource_requirements
|
89
|
+
# Make sure the parent directory exists, otherwise fail. For why-run assume it would have been created.
|
181
90
|
requirements.assert(:create, :create_if_missing, :touch) do |a|
|
182
|
-
# Make sure the parent dir exists, or else fail.
|
183
|
-
# for why run, print a message explaining the potential error.
|
184
91
|
parent_directory = ::File.dirname(@new_resource.path)
|
185
|
-
|
186
92
|
a.assertion { ::File.directory?(parent_directory) }
|
187
93
|
a.failure_message(Chef::Exceptions::EnclosingDirectoryDoesNotExist, "Parent directory #{parent_directory} does not exist.")
|
188
94
|
a.whyrun("Assuming directory #{parent_directory} would have been created")
|
189
95
|
end
|
190
96
|
|
191
|
-
# Make sure the file is deletable if it exists
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
else
|
197
|
-
true
|
198
|
-
end
|
97
|
+
# Make sure the file is deletable if it exists, otherwise fail.
|
98
|
+
if ::File.exists?(@new_resource.path)
|
99
|
+
requirements.assert(:delete) do |a|
|
100
|
+
a.assertion { ::File.writable?(@new_resource.path) }
|
101
|
+
a.failure_message(Chef::Exceptions::InsufficientPermissions,"File #{@new_resource.path} exists but is not writable so it cannot be deleted")
|
199
102
|
end
|
200
|
-
a.failure_message(Chef::Exceptions::InsufficientPermissions,"File #{@new_resource.path} exists but is not writable so it cannot be deleted")
|
201
103
|
end
|
202
|
-
end
|
203
|
-
|
204
|
-
# Compare the content of a file. Returns true if they are the same, false if they are not.
|
205
|
-
def compare_content
|
206
|
-
checksum(@current_resource.path) == new_resource_content_checksum
|
207
|
-
end
|
208
104
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
Chef::Log.info("#{@new_resource} contents updated")
|
219
|
-
end
|
105
|
+
error, reason, whyrun_message = inspect_existing_fs_entry
|
106
|
+
requirements.assert(:create) do |a|
|
107
|
+
a.assertion { error.nil? }
|
108
|
+
a.failure_message(error, reason)
|
109
|
+
a.whyrun(whyrun_message)
|
110
|
+
# Subsequent attempts to read the fs entry at the path (e.g., for
|
111
|
+
# calculating checksums) could blow up, so give up trying to continue
|
112
|
+
# why-running.
|
113
|
+
a.block_action!
|
220
114
|
end
|
221
115
|
end
|
222
116
|
|
223
|
-
# if you are using a tempfile before creating, you must
|
224
|
-
# override the default with the tempfile, since the
|
225
|
-
# file at @new_resource.path will not be updated on converge
|
226
|
-
def update_new_file_state(path=@new_resource.path)
|
227
|
-
if !::File.directory?(path)
|
228
|
-
@new_resource.checksum(checksum(path))
|
229
|
-
end
|
230
|
-
|
231
|
-
if Chef::Platform.windows?
|
232
|
-
# TODO: To work around CHEF-3554, add support for Windows
|
233
|
-
# equivalent, or implicit resource reporting won't work for
|
234
|
-
# Windows.
|
235
|
-
return
|
236
|
-
end
|
237
|
-
|
238
|
-
stat = ::File.stat(path)
|
239
|
-
@new_resource.owner(stat.uid)
|
240
|
-
@new_resource.mode(stat.mode & 07777)
|
241
|
-
@new_resource.group(stat.gid)
|
242
|
-
end
|
243
|
-
|
244
117
|
def action_create
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
converge_by(description) do
|
253
|
-
Chef::Log.info("entered create")
|
254
|
-
::File.open(@new_resource.path, "w+") {|f| f.write @new_resource.content }
|
255
|
-
access_controls.set_all
|
256
|
-
Chef::Log.info("#{@new_resource} created file #{@new_resource.path}")
|
257
|
-
update_new_file_state
|
258
|
-
end
|
259
|
-
else
|
260
|
-
set_content unless @new_resource.content.nil?
|
261
|
-
set_all_access_controls
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
def set_all_access_controls
|
266
|
-
if access_controls.requires_changes?
|
267
|
-
converge_by(access_controls.describe_changes) do
|
268
|
-
access_controls.set_all
|
269
|
-
#Update file state with new access values
|
270
|
-
update_new_file_state
|
271
|
-
end
|
272
|
-
end
|
118
|
+
do_unlink
|
119
|
+
do_create_file
|
120
|
+
do_contents_changes
|
121
|
+
do_acl_changes
|
122
|
+
do_selinux
|
123
|
+
load_resource_attributes_from_file(@new_resource)
|
273
124
|
end
|
274
125
|
|
275
126
|
def action_create_if_missing
|
@@ -283,7 +134,7 @@ class Chef
|
|
283
134
|
def action_delete
|
284
135
|
if ::File.exists?(@new_resource.path)
|
285
136
|
converge_by("delete file #{@new_resource.path}") do
|
286
|
-
|
137
|
+
do_backup unless file_class.symlink?(@new_resource.path)
|
287
138
|
::File.delete(@new_resource.path)
|
288
139
|
Chef::Log.info("#{@new_resource} deleted file at #{@new_resource.path}")
|
289
140
|
end
|
@@ -299,53 +150,240 @@ class Chef
|
|
299
150
|
end
|
300
151
|
end
|
301
152
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
153
|
+
# Implementation components *should* follow symlinks when managing access
|
154
|
+
# control (e.g., use chmod instead of lchmod even if the path we're
|
155
|
+
# managing is a symlink).
|
156
|
+
def manage_symlink_access?
|
157
|
+
false
|
158
|
+
end
|
159
|
+
|
160
|
+
private
|
161
|
+
|
162
|
+
# Handles resource requirements for action :create when some fs entry
|
163
|
+
# already exists at the destination path. For actions other than create,
|
164
|
+
# we don't care what kind of thing is at the destination path because:
|
165
|
+
# * for :create_if_missing, we're assuming the user wanted to avoid blowing away the non-file here
|
166
|
+
# * for :touch, we can modify perms of whatever is at this path, regardless of its type
|
167
|
+
# * for :delete, we can blow away whatever is here, regardless of its type
|
168
|
+
#
|
169
|
+
# For the action :create case, we need to deal with user-selectable
|
170
|
+
# behavior to see if we're in an error condition.
|
171
|
+
# * If there's no file at the destination path currently, we're cool to
|
172
|
+
# create it.
|
173
|
+
# * If the fs entry that currently exists at the destination is a regular
|
174
|
+
# file, we're cool to update it with new content.
|
175
|
+
# * If the fs entry is a symlink AND the resource has
|
176
|
+
# `manage_symlink_source` enabled, we need to verify that the symlink is
|
177
|
+
# a valid pointer to a real file. If it is, we can manage content and
|
178
|
+
# permissions on the symlink source, otherwise, error.
|
179
|
+
# * If `manage_symlink_source` is not enabled, fall through.
|
180
|
+
# * If force_unlink is true, action :create will unlink whatever is in the way.
|
181
|
+
# * If force_unlink is false, we're in an exceptional situation, so we
|
182
|
+
# want to error.
|
183
|
+
#
|
184
|
+
# Note that this method returns values to be used with requirement
|
185
|
+
# assertions, which then decide whether or not to raise or issue a
|
186
|
+
# warning for whyrun mode.
|
187
|
+
def inspect_existing_fs_entry
|
188
|
+
path = @new_resource.path
|
189
|
+
|
190
|
+
if !l_exist?(path)
|
191
|
+
[nil, nil, nil]
|
192
|
+
elsif real_file?(path)
|
193
|
+
[nil, nil, nil]
|
194
|
+
elsif file_class.symlink?(path) && @new_resource.manage_symlink_source
|
195
|
+
verify_symlink_sanity(path)
|
196
|
+
elsif file_class.symlink?(@new_resource.path) && @new_resource.manage_symlink_source.nil?
|
197
|
+
Chef::Log.warn("File #{path} managed by #{@new_resource} is really a symlink. Managing the source file instead.")
|
198
|
+
Chef::Log.warn("Disable this warning by setting `manage_symlink_source true` on the resource")
|
199
|
+
Chef::Log.warn("In a future Chef release, 'manage_symlink_source' will not be enabled by default")
|
200
|
+
verify_symlink_sanity(path)
|
201
|
+
elsif @new_resource.force_unlink
|
202
|
+
[nil, nil, nil]
|
203
|
+
else
|
204
|
+
[ Chef::Exceptions::FileTypeMismatch,
|
205
|
+
"File #{path} exists, but is a #{file_type_string(@new_resource.path)}, set force_unlink to true to remove",
|
206
|
+
"Assuming #{file_type_string(@new_resource.path)} at #{@new_resource.path} would have been removed by a previous resource"
|
207
|
+
]
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# Returns values suitable for use in a requirements assertion statement
|
212
|
+
# when managing symlink source. If we're managing symlink source we can
|
213
|
+
# hit 3 error cases:
|
214
|
+
# 1. Symlink to nowhere: File.realpath(symlink) -> raise Errno::ENOENT
|
215
|
+
# 2. Symlink loop: File.realpath(symlink) -> raise Errno::ELOOP
|
216
|
+
# 3. Symlink to not-a-real-file: File.realpath(symlink) -> (directory|blockdev|etc.)
|
217
|
+
# If any of the above apply, returns a 3-tuple of Exception class,
|
218
|
+
# exception message, whyrun message; otherwise returns a 3-tuple of nil.
|
219
|
+
def verify_symlink_sanity(path)
|
220
|
+
real_path = ::File.realpath(path)
|
221
|
+
if real_file?(real_path)
|
222
|
+
[nil, nil, nil]
|
223
|
+
else
|
224
|
+
[ Chef::Exceptions::FileTypeMismatch,
|
225
|
+
"File #{path} exists, but is a symlink to #{real_path} which is a #{file_type_string(real_path)}. " +
|
226
|
+
"Disable manage_symlink_source and set force_unlink to remove it.",
|
227
|
+
"Assuming symlink #{path} or source file #{real_path} would have been fixed by a previous resource"
|
228
|
+
]
|
229
|
+
end
|
230
|
+
rescue Errno::ELOOP
|
231
|
+
[ Chef::Exceptions::InvalidSymlink,
|
232
|
+
"Symlink at #{path} (pointing to #{::File.readlink(path)}) exists but attempting to resolve it creates a loop",
|
233
|
+
"Assuming symlink loop would be fixed by a previous resource" ]
|
234
|
+
rescue Errno::ENOENT
|
235
|
+
[ Chef::Exceptions::InvalidSymlink,
|
236
|
+
"Symlink at #{path} (pointing to #{::File.readlink(path)}) exists but attempting to resolve it leads to a nonexistent file",
|
237
|
+
"Assuming symlink source would be created by a previous resource" ]
|
238
|
+
end
|
239
|
+
|
240
|
+
|
241
|
+
def content
|
242
|
+
@content ||= begin
|
243
|
+
load_current_resource if @current_resource.nil?
|
244
|
+
@content_class.new(@new_resource, @current_resource, @run_context)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def file_type_string(path)
|
249
|
+
case
|
250
|
+
when ::File.blockdev?(path)
|
251
|
+
"block device"
|
252
|
+
when ::File.chardev?(path)
|
253
|
+
"char device"
|
254
|
+
when ::File.directory?(path)
|
255
|
+
"directory"
|
256
|
+
when ::File.pipe?(path)
|
257
|
+
"pipe"
|
258
|
+
when ::File.socket?(path)
|
259
|
+
"socket"
|
260
|
+
when file_class.symlink?(path)
|
261
|
+
"symlink"
|
262
|
+
else
|
263
|
+
"unknown filetype"
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def real_file?(path)
|
268
|
+
!file_class.symlink?(path) && ::File.file?(path)
|
269
|
+
end
|
270
|
+
|
271
|
+
# Similar to File.exist?, but also returns true in the case that the
|
272
|
+
# named file is a broken symlink.
|
273
|
+
def l_exist?(path)
|
274
|
+
::File.exist?(path) || file_class.symlink?(path)
|
275
|
+
end
|
276
|
+
|
277
|
+
def unlink(path)
|
278
|
+
# Directories can not be unlinked. Remove them using FileUtils.
|
279
|
+
if ::File.directory?(path)
|
280
|
+
FileUtils.rm_rf(path)
|
281
|
+
else
|
282
|
+
::File.unlink(path)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
def do_unlink
|
287
|
+
@file_unlinked = false
|
288
|
+
if @new_resource.force_unlink
|
289
|
+
if !real_file?(@new_resource.path)
|
290
|
+
# unlink things that aren't normal files
|
291
|
+
description = "unlink #{file_type_string(@new_resource.path)} at #{@new_resource.path}"
|
292
|
+
converge_by(description) do
|
293
|
+
unlink(@new_resource.path)
|
326
294
|
end
|
295
|
+
@current_resource.checksum = nil
|
296
|
+
@file_unlinked = true
|
327
297
|
end
|
328
298
|
end
|
329
299
|
end
|
330
300
|
|
331
|
-
def
|
332
|
-
|
333
|
-
|
301
|
+
def file_unlinked?
|
302
|
+
@file_unlinked == true
|
303
|
+
end
|
334
304
|
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
305
|
+
def do_create_file
|
306
|
+
@file_created = false
|
307
|
+
if !::File.exists?(@new_resource.path) || file_unlinked?
|
308
|
+
converge_by("create new file #{@new_resource.path}") do
|
309
|
+
deployment_strategy.create(@new_resource.path)
|
310
|
+
Chef::Log.info("#{@new_resource} created file #{@new_resource.path}")
|
311
|
+
end
|
312
|
+
@file_created = true
|
340
313
|
end
|
341
314
|
end
|
342
315
|
|
343
|
-
|
316
|
+
# do_contents_changes needs to know if do_create_file created a file or not
|
317
|
+
def file_created?
|
318
|
+
@file_created == true
|
319
|
+
end
|
344
320
|
|
345
|
-
def
|
346
|
-
|
347
|
-
|
348
|
-
|
321
|
+
def do_backup(file = nil)
|
322
|
+
Chef::Util::Backup.new(@new_resource, file).backup!
|
323
|
+
end
|
324
|
+
|
325
|
+
def diff
|
326
|
+
@diff ||= Chef::Util::Diff.new
|
327
|
+
end
|
328
|
+
|
329
|
+
def update_file_contents
|
330
|
+
do_backup unless file_created?
|
331
|
+
deployment_strategy.deploy(tempfile.path, ::File.realpath(@new_resource.path))
|
332
|
+
Chef::Log.info("#{@new_resource} updated file contents #{@new_resource.path}")
|
333
|
+
@new_resource.checksum(checksum(@new_resource.path)) # for reporting
|
334
|
+
end
|
335
|
+
|
336
|
+
def do_contents_changes
|
337
|
+
# a nil tempfile is okay, means the resource has no content or no new content
|
338
|
+
return if tempfile.nil?
|
339
|
+
# but a tempfile that has no path or doesn't exist should not happen
|
340
|
+
if tempfile.path.nil? || !::File.exists?(tempfile.path)
|
341
|
+
raise "chef-client is confused, trying to deploy a file that has no path or does not exist..."
|
342
|
+
end
|
343
|
+
# the file? on the next line suppresses the case in why-run when we have a not-file here that would have otherwise been removed
|
344
|
+
if ::File.file?(@new_resource.path) && contents_changed?
|
345
|
+
diff.diff(@current_resource.path, tempfile.path)
|
346
|
+
@new_resource.diff( diff.for_reporting ) unless file_created?
|
347
|
+
description = [ "update content in file #{@new_resource.path} from #{short_cksum(@current_resource.checksum)} to #{short_cksum(checksum(tempfile.path))}" ]
|
348
|
+
description << diff.for_output
|
349
|
+
converge_by(description) do
|
350
|
+
update_file_contents
|
351
|
+
end
|
352
|
+
end
|
353
|
+
# unlink necessary to clean up in why-run mode
|
354
|
+
tempfile.unlink
|
355
|
+
end
|
356
|
+
|
357
|
+
# This logic ideally will be made into some kind of generic
|
358
|
+
# platform-dependent post-converge hook for file-like
|
359
|
+
# resources, but for now we only have the single selinux use
|
360
|
+
# case.
|
361
|
+
def do_selinux(recursive = false)
|
362
|
+
if resource_updated? && Chef::Config[:enable_selinux_file_permission_fixup]
|
363
|
+
if selinux_enabled?
|
364
|
+
converge_by("restore selinux security context") do
|
365
|
+
restore_security_context(::File.realpath(@new_resource.path), recursive)
|
366
|
+
end
|
367
|
+
else
|
368
|
+
Chef::Log.debug "selinux utilities can not be found. Skipping selinux permission fixup."
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def do_acl_changes
|
374
|
+
if access_controls.requires_changes?
|
375
|
+
converge_by(access_controls.describe_changes) do
|
376
|
+
access_controls.set_all
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
def contents_changed?
|
382
|
+
checksum(tempfile.path) != @current_resource.checksum
|
383
|
+
end
|
384
|
+
|
385
|
+
def tempfile
|
386
|
+
content.tempfile
|
349
387
|
end
|
350
388
|
|
351
389
|
def short_cksum(checksum)
|
@@ -353,9 +391,20 @@ class Chef
|
|
353
391
|
checksum.slice(0,6)
|
354
392
|
end
|
355
393
|
|
356
|
-
def
|
357
|
-
|
394
|
+
def load_resource_attributes_from_file(resource)
|
395
|
+
|
396
|
+
if Chef::Platform.windows?
|
397
|
+
# This is a work around for CHEF-3554.
|
398
|
+
# OC-6534: is tracking the real fix for this workaround.
|
399
|
+
# Add support for Windows equivalent, or implicit resource
|
400
|
+
# reporting won't work for Windows.
|
401
|
+
return
|
402
|
+
end
|
403
|
+
acl_scanner = ScanAccessControl.new(@new_resource, resource)
|
404
|
+
acl_scanner.set_all!
|
358
405
|
end
|
406
|
+
|
359
407
|
end
|
360
408
|
end
|
361
409
|
end
|
410
|
+
|