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
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'chef/chef_fs/data_handler/data_handler_base'
|
2
|
+
require 'chef/role'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
module ChefFS
|
6
|
+
module DataHandler
|
7
|
+
class RoleDataHandler < DataHandlerBase
|
8
|
+
def normalize(role, entry)
|
9
|
+
result = normalize_hash(role, {
|
10
|
+
'name' => remove_dot_json(entry.name),
|
11
|
+
'description' => '',
|
12
|
+
'json_class' => 'Chef::Role',
|
13
|
+
'chef_type' => 'role',
|
14
|
+
'default_attributes' => {},
|
15
|
+
'override_attributes' => {},
|
16
|
+
'run_list' => [],
|
17
|
+
'env_run_lists' => {}
|
18
|
+
})
|
19
|
+
result['run_list'] = normalize_run_list(result['run_list'])
|
20
|
+
result['env_run_lists'].each_pair do |env, run_list|
|
21
|
+
result['env_run_lists'][env] = normalize_run_list(run_list)
|
22
|
+
end
|
23
|
+
result
|
24
|
+
end
|
25
|
+
|
26
|
+
def preserve_key(key)
|
27
|
+
return key == 'name'
|
28
|
+
end
|
29
|
+
|
30
|
+
def chef_class
|
31
|
+
Chef::Role
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_ruby(object)
|
35
|
+
to_ruby_keys(object, %w(name description default_attributes override_attributes run_list env_run_lists))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'chef/chef_fs/data_handler/data_handler_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
module ChefFS
|
5
|
+
module DataHandler
|
6
|
+
class UserDataHandler < DataHandlerBase
|
7
|
+
def normalize(user, entry)
|
8
|
+
normalize_hash(user, {
|
9
|
+
'name' => remove_dot_json(entry.name),
|
10
|
+
'admin' => false,
|
11
|
+
'json_class' => 'Chef::WebUIUser',
|
12
|
+
'chef_type' => 'webui_user',
|
13
|
+
'salt' => nil,
|
14
|
+
'password' => nil,
|
15
|
+
'openid' => nil
|
16
|
+
})
|
17
|
+
end
|
18
|
+
|
19
|
+
def preserve_key(key)
|
20
|
+
return key == 'name'
|
21
|
+
end
|
22
|
+
|
23
|
+
# There is no chef_class for users, nor does to_ruby work.
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,312 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/chef_fs'
|
20
|
+
require 'chef/chef_fs/path_utils'
|
21
|
+
|
22
|
+
class Chef
|
23
|
+
module ChefFS
|
24
|
+
#
|
25
|
+
# Represents a glob pattern. This class is designed so that it can
|
26
|
+
# match arbitrary strings, and tell you about partial matches.
|
27
|
+
#
|
28
|
+
# Examples:
|
29
|
+
# * <tt>a*z</tt>
|
30
|
+
# - Matches <tt>abcz</tt>
|
31
|
+
# - Does not match <tt>ab/cd/ez</tt>
|
32
|
+
# - Does not match <tt>xabcz</tt>
|
33
|
+
# * <tt>a**z</tt>
|
34
|
+
# - Matches <tt>abcz</tt>
|
35
|
+
# - Matches <tt>ab/cd/ez</tt>
|
36
|
+
#
|
37
|
+
# Special characters supported:
|
38
|
+
# * <tt>/</tt> (and <tt>\\</tt> on Windows) - directory separators
|
39
|
+
# * <tt>\*</tt> - match zero or more characters (but not directory separators)
|
40
|
+
# * <tt>\*\*</tt> - match zero or more characters, including directory separators
|
41
|
+
# * <tt>?</tt> - match exactly one character (not a directory separator)
|
42
|
+
# Only on Unix:
|
43
|
+
# * <tt>[abc0-9]</tt> - match one of the included characters
|
44
|
+
# * <tt>\\<character></tt> - escape character: match the given character
|
45
|
+
#
|
46
|
+
class FilePattern
|
47
|
+
# Initialize a new FilePattern with the pattern string.
|
48
|
+
#
|
49
|
+
# Raises +ArgumentError+ if empty file pattern is specified
|
50
|
+
def initialize(pattern)
|
51
|
+
@pattern = pattern
|
52
|
+
end
|
53
|
+
|
54
|
+
# The pattern string.
|
55
|
+
attr_reader :pattern
|
56
|
+
|
57
|
+
# Reports whether this pattern could match children of <tt>path</tt>.
|
58
|
+
# If the pattern doesn't match the path up to this point or
|
59
|
+
# if it matches and doesn't allow further children, this will
|
60
|
+
# return <tt>false</tt>.
|
61
|
+
#
|
62
|
+
# ==== Attributes
|
63
|
+
#
|
64
|
+
# * +path+ - a path to check
|
65
|
+
#
|
66
|
+
# ==== Examples
|
67
|
+
#
|
68
|
+
# abc/def.could_match_children?('abc') == true
|
69
|
+
# abc.could_match_children?('abc') == false
|
70
|
+
# abc/def.could_match_children?('x') == false
|
71
|
+
# a**z.could_match_children?('ab/cd') == true
|
72
|
+
def could_match_children?(path)
|
73
|
+
return false if path == '' # Empty string is not a path
|
74
|
+
|
75
|
+
argument_is_absolute = !!(path =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
|
76
|
+
return false if is_absolute != argument_is_absolute
|
77
|
+
path = path[1,path.length-1] if argument_is_absolute
|
78
|
+
|
79
|
+
path_parts = Chef::ChefFS::PathUtils::split(path)
|
80
|
+
# If the pattern is shorter than the path (or same size), children will be larger than the pattern, and will not match.
|
81
|
+
return false if regexp_parts.length <= path_parts.length && !has_double_star
|
82
|
+
# If the path doesn't match up to this point, children won't match either.
|
83
|
+
return false if path_parts.zip(regexp_parts).any? { |part,regexp| !regexp.nil? && !regexp.match(part) }
|
84
|
+
# Otherwise, it's possible we could match: the path matches to this point, and the pattern is longer than the path.
|
85
|
+
# TODO There is one edge case where the double star comes after some characters like abc**def--we could check whether the next
|
86
|
+
# bit of path starts with abc in that case.
|
87
|
+
return true
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the immediate child of a path that would be matched
|
91
|
+
# if this FilePattern was applied. If more than one child
|
92
|
+
# could match, this method returns nil.
|
93
|
+
#
|
94
|
+
# ==== Attributes
|
95
|
+
#
|
96
|
+
# * +path+ - The path to look for an exact child name under.
|
97
|
+
#
|
98
|
+
# ==== Returns
|
99
|
+
#
|
100
|
+
# The next directory in the pattern under the given path.
|
101
|
+
# If the directory part could match more than one child, it
|
102
|
+
# returns +nil+.
|
103
|
+
#
|
104
|
+
# ==== Examples
|
105
|
+
#
|
106
|
+
# abc/def.exact_child_name_under('abc') == 'def'
|
107
|
+
# abc/def/ghi.exact_child_name_under('abc') == 'def'
|
108
|
+
# abc/*/ghi.exact_child_name_under('abc') == nil
|
109
|
+
# abc/*/ghi.exact_child_name_under('abc/def') == 'ghi'
|
110
|
+
# abc/**/ghi.exact_child_name_under('abc/def') == nil
|
111
|
+
#
|
112
|
+
# This method assumes +could_match_children?(path)+ is +true+.
|
113
|
+
def exact_child_name_under(path)
|
114
|
+
path = path[1,path.length-1] if !!(path =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
|
115
|
+
dirs_in_path = Chef::ChefFS::PathUtils::split(path).length
|
116
|
+
return nil if exact_parts.length <= dirs_in_path
|
117
|
+
return exact_parts[dirs_in_path]
|
118
|
+
end
|
119
|
+
|
120
|
+
# If this pattern represents an exact path, returns the exact path.
|
121
|
+
#
|
122
|
+
# abc/def.exact_path == 'abc/def'
|
123
|
+
# abc/*def.exact_path == 'abc/def'
|
124
|
+
# abc/x\\yz.exact_path == 'abc/xyz'
|
125
|
+
def exact_path
|
126
|
+
return nil if has_double_star || exact_parts.any? { |part| part.nil? }
|
127
|
+
result = Chef::ChefFS::PathUtils::join(*exact_parts)
|
128
|
+
is_absolute ? Chef::ChefFS::PathUtils::join('', result) : result
|
129
|
+
end
|
130
|
+
|
131
|
+
# Returns the normalized version of the pattern, with / as the directory
|
132
|
+
# separator, and "." and ".." removed.
|
133
|
+
#
|
134
|
+
# This does not presently change things like \b to b, but in the future
|
135
|
+
# it might.
|
136
|
+
def normalized_pattern
|
137
|
+
calculate
|
138
|
+
@normalized_pattern
|
139
|
+
end
|
140
|
+
|
141
|
+
# Tell whether this pattern matches absolute, or relative paths
|
142
|
+
def is_absolute
|
143
|
+
calculate
|
144
|
+
@is_absolute
|
145
|
+
end
|
146
|
+
|
147
|
+
# Returns <tt>true+ if this pattern matches the path, <tt>false+ otherwise.
|
148
|
+
#
|
149
|
+
# abc/*/def.match?('abc/foo/def') == true
|
150
|
+
# abc/*/def.match?('abc/foo') == false
|
151
|
+
def match?(path)
|
152
|
+
argument_is_absolute = !!(path =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
|
153
|
+
return false if is_absolute != argument_is_absolute
|
154
|
+
path = path[1,path.length-1] if argument_is_absolute
|
155
|
+
!!regexp.match(path)
|
156
|
+
end
|
157
|
+
|
158
|
+
# Returns the string pattern
|
159
|
+
def to_s
|
160
|
+
pattern
|
161
|
+
end
|
162
|
+
|
163
|
+
# Given a relative file pattern and a directory, makes a new file pattern
|
164
|
+
# starting with the directory.
|
165
|
+
#
|
166
|
+
# FilePattern.relative_to('/usr/local', 'bin/*grok') == FilePattern.new('/usr/local/bin/*grok')
|
167
|
+
#
|
168
|
+
# BUG: this does not support patterns starting with <tt>..</tt>
|
169
|
+
def self.relative_to(dir, pattern)
|
170
|
+
return FilePattern.new(pattern) if pattern =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/
|
171
|
+
FilePattern.new(Chef::ChefFS::PathUtils::join(dir, pattern))
|
172
|
+
end
|
173
|
+
|
174
|
+
private
|
175
|
+
|
176
|
+
def regexp
|
177
|
+
calculate
|
178
|
+
@regexp
|
179
|
+
end
|
180
|
+
|
181
|
+
def regexp_parts
|
182
|
+
calculate
|
183
|
+
@regexp_parts
|
184
|
+
end
|
185
|
+
|
186
|
+
def exact_parts
|
187
|
+
calculate
|
188
|
+
@exact_parts
|
189
|
+
end
|
190
|
+
|
191
|
+
def has_double_star
|
192
|
+
calculate
|
193
|
+
@has_double_star
|
194
|
+
end
|
195
|
+
|
196
|
+
def calculate
|
197
|
+
if !@regexp
|
198
|
+
@is_absolute = !!(@pattern =~ /^#{Chef::ChefFS::PathUtils::regexp_path_separator}/)
|
199
|
+
|
200
|
+
full_regexp_parts = []
|
201
|
+
normalized_parts = []
|
202
|
+
@regexp_parts = []
|
203
|
+
@exact_parts = []
|
204
|
+
@has_double_star = false
|
205
|
+
|
206
|
+
Chef::ChefFS::PathUtils::split(pattern).each do |part|
|
207
|
+
regexp, exact, has_double_star = FilePattern::pattern_to_regexp(part)
|
208
|
+
if has_double_star
|
209
|
+
@has_double_star = true
|
210
|
+
end
|
211
|
+
|
212
|
+
# Skip // and /./ (pretend it's not there)
|
213
|
+
if exact == '' || exact == '.'
|
214
|
+
next
|
215
|
+
end
|
216
|
+
|
217
|
+
# Back up when you see .. (unless the prior part has ** in it, in which case .. must be preserved)
|
218
|
+
if exact == '..'
|
219
|
+
if @is_absolute && normalized_parts.length == 0
|
220
|
+
# If we are at the root, just pretend the .. isn't there
|
221
|
+
next
|
222
|
+
elsif normalized_parts.length > 0
|
223
|
+
regexp_prev, exact_prev, has_double_star_prev = FilePattern.pattern_to_regexp(normalized_parts[-1])
|
224
|
+
if has_double_star_prev
|
225
|
+
raise ArgumentError, ".. overlapping a ** is unsupported"
|
226
|
+
end
|
227
|
+
full_regexp_parts.pop
|
228
|
+
normalized_parts.pop
|
229
|
+
if !@has_double_star
|
230
|
+
@regexp_parts.pop
|
231
|
+
@exact_parts.pop
|
232
|
+
end
|
233
|
+
next
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
# Build up the regexp
|
238
|
+
full_regexp_parts << regexp
|
239
|
+
normalized_parts << part
|
240
|
+
if !@has_double_star
|
241
|
+
@regexp_parts << Regexp.new("^#{regexp}$")
|
242
|
+
@exact_parts << exact
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
@regexp = Regexp.new("^#{full_regexp_parts.join(Chef::ChefFS::PathUtils::regexp_path_separator)}$")
|
247
|
+
@normalized_pattern = Chef::ChefFS::PathUtils.join(*normalized_parts)
|
248
|
+
@normalized_pattern = Chef::ChefFS::PathUtils.join('', @normalized_pattern) if @is_absolute
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
def self.pattern_special_characters
|
253
|
+
if Chef::ChefFS::windows?
|
254
|
+
@pattern_special_characters ||= /(\*\*|\*|\?|[\*\?\.\|\(\)\[\]\{\}\+\\\\\^\$])/
|
255
|
+
else
|
256
|
+
# Unix also supports character regexes and backslashes
|
257
|
+
@pattern_special_characters ||= /(\\.|\[[^\]]+\]|\*\*|\*|\?|[\*\?\.\|\(\)\[\]\{\}\+\\\\\^\$])/
|
258
|
+
end
|
259
|
+
@pattern_special_characters
|
260
|
+
end
|
261
|
+
|
262
|
+
def self.regexp_escape_characters
|
263
|
+
[ '[', '\\', '^', '$', '.', '|', '?', '*', '+', '(', ')', '{', '}' ]
|
264
|
+
end
|
265
|
+
|
266
|
+
def self.pattern_to_regexp(pattern)
|
267
|
+
regexp = ""
|
268
|
+
exact = ""
|
269
|
+
has_double_star = false
|
270
|
+
pattern.split(pattern_special_characters).each_with_index do |part, index|
|
271
|
+
# Odd indexes from the split are symbols. Even are normal bits.
|
272
|
+
if index % 2 == 0
|
273
|
+
exact << part if !exact.nil?
|
274
|
+
regexp << part
|
275
|
+
else
|
276
|
+
case part
|
277
|
+
# **, * and ? happen on both platforms.
|
278
|
+
when '**'
|
279
|
+
exact = nil
|
280
|
+
has_double_star = true
|
281
|
+
regexp << '.*'
|
282
|
+
when '*'
|
283
|
+
exact = nil
|
284
|
+
regexp << '[^\/]*'
|
285
|
+
when '?'
|
286
|
+
exact = nil
|
287
|
+
regexp << '.'
|
288
|
+
else
|
289
|
+
if part[0,1] == '\\' && part.length == 2
|
290
|
+
# backslash escapes are only supported on Unix, and are handled here by leaving the escape on (it means the same thing in a regex)
|
291
|
+
exact << part[1,1] if !exact.nil?
|
292
|
+
if regexp_escape_characters.include?(part[1,1])
|
293
|
+
regexp << part
|
294
|
+
else
|
295
|
+
regexp << part[1,1]
|
296
|
+
end
|
297
|
+
elsif part[0,1] == '[' && part.length > 1
|
298
|
+
# [...] happens only on Unix, and is handled here by *not* backslashing (it means the same thing in and out of regex)
|
299
|
+
exact = nil
|
300
|
+
regexp << part
|
301
|
+
else
|
302
|
+
exact += part if !exact.nil?
|
303
|
+
regexp << "\\#{part}"
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
[regexp, exact, has_double_star]
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
@@ -0,0 +1,426 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef/chef_fs/path_utils'
|
20
|
+
require 'chef/chef_fs/file_system/default_environment_cannot_be_modified_error'
|
21
|
+
require 'chef/chef_fs/file_system/operation_failed_error'
|
22
|
+
require 'chef/chef_fs/file_system/operation_not_allowed_error'
|
23
|
+
require 'chef/chef_fs/parallelizer'
|
24
|
+
|
25
|
+
class Chef
|
26
|
+
module ChefFS
|
27
|
+
module FileSystem
|
28
|
+
# Returns a list of all things under (and including) this entry that match the
|
29
|
+
# given pattern.
|
30
|
+
#
|
31
|
+
# ==== Attributes
|
32
|
+
#
|
33
|
+
# * +root+ - Entry to start listing under
|
34
|
+
# * +pattern+ - Chef::ChefFS::FilePattern to match children under
|
35
|
+
#
|
36
|
+
def self.list(root, pattern)
|
37
|
+
Lister.new(root, pattern)
|
38
|
+
end
|
39
|
+
|
40
|
+
class Lister
|
41
|
+
include Enumerable
|
42
|
+
|
43
|
+
def initialize(root, pattern)
|
44
|
+
@root = root
|
45
|
+
@pattern = pattern
|
46
|
+
end
|
47
|
+
|
48
|
+
attr_reader :root
|
49
|
+
attr_reader :pattern
|
50
|
+
|
51
|
+
def each(&block)
|
52
|
+
list_from(root, &block)
|
53
|
+
end
|
54
|
+
|
55
|
+
def list_from(entry, &block)
|
56
|
+
# Include self in results if it matches
|
57
|
+
if pattern.match?(entry.path)
|
58
|
+
block.call(entry)
|
59
|
+
end
|
60
|
+
|
61
|
+
if pattern.could_match_children?(entry.path)
|
62
|
+
# If it's possible that our children could match, descend in and add matches.
|
63
|
+
exact_child_name = pattern.exact_child_name_under(entry.path)
|
64
|
+
|
65
|
+
# If we've got an exact name, don't bother listing children; just grab the
|
66
|
+
# child with the given name.
|
67
|
+
if exact_child_name
|
68
|
+
exact_child = entry.child(exact_child_name)
|
69
|
+
if exact_child
|
70
|
+
list_from(exact_child, &block)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Otherwise, go through all children and find any matches
|
74
|
+
elsif entry.dir?
|
75
|
+
results = Parallelizer::parallelize(entry.children, :flatten => true) { |child| Chef::ChefFS::FileSystem.list(child, pattern) }
|
76
|
+
results.each(&block)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Resolve the given path against the entry, returning
|
83
|
+
# the entry at the end of the path.
|
84
|
+
#
|
85
|
+
# ==== Attributes
|
86
|
+
#
|
87
|
+
# * +entry+ - the entry to start looking under. Relative
|
88
|
+
# paths will be resolved from here.
|
89
|
+
# * +path+ - the path to resolve. If it starts with +/+,
|
90
|
+
# the path will be resolved starting from +entry.root+.
|
91
|
+
#
|
92
|
+
# ==== Examples
|
93
|
+
#
|
94
|
+
# Chef::ChefFS::FileSystem.resolve_path(root_path, 'cookbooks/java/recipes/default.rb')
|
95
|
+
#
|
96
|
+
def self.resolve_path(entry, path)
|
97
|
+
return entry if path.length == 0
|
98
|
+
return resolve_path(entry.root, path) if path[0,1] == "/" && entry.root != entry
|
99
|
+
if path[0,1] == "/"
|
100
|
+
path = path[1,path.length-1]
|
101
|
+
end
|
102
|
+
|
103
|
+
result = entry
|
104
|
+
Chef::ChefFS::PathUtils::split(path).each do |part|
|
105
|
+
result = result.child(part)
|
106
|
+
end
|
107
|
+
result
|
108
|
+
end
|
109
|
+
|
110
|
+
# Copy everything matching the given pattern from src to dest.
|
111
|
+
#
|
112
|
+
# After this method completes, everything in dest matching the
|
113
|
+
# given pattern will look identical to src.
|
114
|
+
#
|
115
|
+
# ==== Attributes
|
116
|
+
#
|
117
|
+
# * +pattern+ - Chef::ChefFS::FilePattern to match children under
|
118
|
+
# * +src_root+ - the root from which things will be copied
|
119
|
+
# * +dest_root+ - the root to which things will be copied
|
120
|
+
# * +recurse_depth+ - the maximum depth to copy things. +nil+
|
121
|
+
# means infinite depth. 0 means no recursion.
|
122
|
+
# * +options+ - hash of options:
|
123
|
+
# - +purge+ - if +true+, items in +dest+ that are not in +src+
|
124
|
+
# will be deleted from +dest+. If +false+, these items will
|
125
|
+
# be left alone.
|
126
|
+
# - +force+ - if +true+, matching files are always copied from
|
127
|
+
# +src+ to +dest+. If +false+, they will only be copied if
|
128
|
+
# actually different (which will take time to determine).
|
129
|
+
# - +dry_run+ - if +true+, action will not actually be taken;
|
130
|
+
# things will be printed out instead.
|
131
|
+
#
|
132
|
+
# ==== Examples
|
133
|
+
#
|
134
|
+
# Chef::ChefFS::FileSystem.copy_to(FilePattern.new('/cookbooks'),
|
135
|
+
# chef_fs, local_fs, nil, true) do |message|
|
136
|
+
# puts message
|
137
|
+
# end
|
138
|
+
#
|
139
|
+
def self.copy_to(pattern, src_root, dest_root, recurse_depth, options, ui = nil, format_path = nil)
|
140
|
+
found_result = false
|
141
|
+
error = false
|
142
|
+
parallel_do(list_pairs(pattern, src_root, dest_root)) do |src, dest|
|
143
|
+
found_result = true
|
144
|
+
new_dest_parent = get_or_create_parent(dest, options, ui, format_path)
|
145
|
+
child_error = copy_entries(src, dest, new_dest_parent, recurse_depth, options, ui, format_path)
|
146
|
+
error ||= child_error
|
147
|
+
end
|
148
|
+
if !found_result && pattern.exact_path
|
149
|
+
ui.error "#{pattern}: No such file or directory on remote or local" if ui
|
150
|
+
error = true
|
151
|
+
end
|
152
|
+
error
|
153
|
+
end
|
154
|
+
|
155
|
+
# Yield entries for children that are in either +a_root+ or +b_root+, with
|
156
|
+
# matching pairs matched up.
|
157
|
+
#
|
158
|
+
# ==== Yields
|
159
|
+
#
|
160
|
+
# Yields matching entries in pairs:
|
161
|
+
#
|
162
|
+
# [ a_entry, b_entry ]
|
163
|
+
#
|
164
|
+
# ==== Example
|
165
|
+
#
|
166
|
+
# Chef::ChefFS::FileSystem.list_pairs(FilePattern.new('**x.txt', a_root, b_root)).each do |a, b|
|
167
|
+
# ...
|
168
|
+
# end
|
169
|
+
#
|
170
|
+
def self.list_pairs(pattern, a_root, b_root)
|
171
|
+
PairLister.new(pattern, a_root, b_root)
|
172
|
+
end
|
173
|
+
|
174
|
+
class PairLister
|
175
|
+
include Enumerable
|
176
|
+
|
177
|
+
def initialize(pattern, a_root, b_root)
|
178
|
+
@pattern = pattern
|
179
|
+
@a_root = a_root
|
180
|
+
@b_root = b_root
|
181
|
+
end
|
182
|
+
|
183
|
+
attr_reader :pattern
|
184
|
+
attr_reader :a_root
|
185
|
+
attr_reader :b_root
|
186
|
+
|
187
|
+
def each
|
188
|
+
# Make sure everything on the server is also on the filesystem, and diff
|
189
|
+
found_paths = Set.new
|
190
|
+
Chef::ChefFS::FileSystem.list(a_root, pattern).each do |a|
|
191
|
+
found_paths << a.path
|
192
|
+
b = Chef::ChefFS::FileSystem.resolve_path(b_root, a.path)
|
193
|
+
yield [ a, b ]
|
194
|
+
end
|
195
|
+
|
196
|
+
# Check the outer regex pattern to see if it matches anything on the
|
197
|
+
# filesystem that isn't on the server
|
198
|
+
Chef::ChefFS::FileSystem.list(b_root, pattern).each do |b|
|
199
|
+
if !found_paths.include?(b.path)
|
200
|
+
a = Chef::ChefFS::FileSystem.resolve_path(a_root, b.path)
|
201
|
+
yield [ a, b ]
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# Get entries for children of either a or b, with matching pairs matched up.
|
208
|
+
#
|
209
|
+
# ==== Returns
|
210
|
+
#
|
211
|
+
# An array of child pairs.
|
212
|
+
#
|
213
|
+
# [ [ a_child, b_child ], ... ]
|
214
|
+
#
|
215
|
+
# If a child is only in a or only in b, the other child entry will be
|
216
|
+
# retrieved by name (and will most likely be a "nonexistent child").
|
217
|
+
#
|
218
|
+
# ==== Example
|
219
|
+
#
|
220
|
+
# Chef::ChefFS::FileSystem.child_pairs(a, b).length
|
221
|
+
#
|
222
|
+
def self.child_pairs(a, b)
|
223
|
+
# If both are directories, recurse into them and diff the children instead of returning ourselves.
|
224
|
+
result = []
|
225
|
+
a_children_names = Set.new
|
226
|
+
a.children.each do |a_child|
|
227
|
+
a_children_names << a_child.name
|
228
|
+
result << [ a_child, b.child(a_child.name) ]
|
229
|
+
end
|
230
|
+
|
231
|
+
# Check b for children that aren't in a
|
232
|
+
b.children.each do |b_child|
|
233
|
+
if !a_children_names.include?(b_child.name)
|
234
|
+
result << [ a.child(b_child.name), b_child ]
|
235
|
+
end
|
236
|
+
end
|
237
|
+
result
|
238
|
+
end
|
239
|
+
|
240
|
+
def self.compare(a, b)
|
241
|
+
are_same, a_value, b_value = a.compare_to(b)
|
242
|
+
if are_same.nil?
|
243
|
+
are_same, b_value, a_value = b.compare_to(a)
|
244
|
+
end
|
245
|
+
if are_same.nil?
|
246
|
+
# TODO these reads can be parallelized
|
247
|
+
begin
|
248
|
+
a_value = a.read if a_value.nil?
|
249
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError
|
250
|
+
a_value = :none
|
251
|
+
end
|
252
|
+
begin
|
253
|
+
b_value = b.read if b_value.nil?
|
254
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError
|
255
|
+
b_value = :none
|
256
|
+
end
|
257
|
+
are_same = (a_value == b_value)
|
258
|
+
end
|
259
|
+
[ are_same, a_value, b_value ]
|
260
|
+
end
|
261
|
+
|
262
|
+
private
|
263
|
+
|
264
|
+
# Copy two entries (could be files or dirs)
|
265
|
+
def self.copy_entries(src_entry, dest_entry, new_dest_parent, recurse_depth, options, ui, format_path)
|
266
|
+
# A NOTE about this algorithm:
|
267
|
+
# There are cases where this algorithm does too many network requests.
|
268
|
+
# knife upload with a specific filename will first check if the file
|
269
|
+
# exists (a "dir" in the parent) before deciding whether to POST or
|
270
|
+
# PUT it. If we just tried PUT (or POST) and then tried the other if
|
271
|
+
# the conflict failed, we wouldn't need to check existence.
|
272
|
+
# On the other hand, we may already have DONE the request, in which
|
273
|
+
# case we shouldn't waste time trying PUT if we know the file doesn't
|
274
|
+
# exist.
|
275
|
+
# Will need to decide how that works with checksums, though.
|
276
|
+
|
277
|
+
error = false
|
278
|
+
begin
|
279
|
+
dest_path = format_path.call(dest_entry) if ui
|
280
|
+
src_path = format_path.call(src_entry) if ui
|
281
|
+
if !src_entry.exists?
|
282
|
+
if options[:purge]
|
283
|
+
# If we would not have uploaded it, we will not purge it.
|
284
|
+
if src_entry.parent.can_have_child?(dest_entry.name, dest_entry.dir?)
|
285
|
+
if options[:dry_run]
|
286
|
+
ui.output "Would delete #{dest_path}" if ui
|
287
|
+
else
|
288
|
+
dest_entry.delete(true)
|
289
|
+
ui.output "Deleted extra entry #{dest_path} (purge is on)" if ui
|
290
|
+
end
|
291
|
+
else
|
292
|
+
Chef::Log.info("Not deleting extra entry #{dest_path} (purge is off)") if ui
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
elsif !dest_entry.exists?
|
297
|
+
if new_dest_parent.can_have_child?(src_entry.name, src_entry.dir?)
|
298
|
+
# If the entry can do a copy directly from filesystem, do that.
|
299
|
+
if new_dest_parent.respond_to?(:create_child_from)
|
300
|
+
if options[:dry_run]
|
301
|
+
ui.output "Would create #{dest_path}" if ui
|
302
|
+
else
|
303
|
+
new_dest_parent.create_child_from(src_entry)
|
304
|
+
ui.output "Created #{dest_path}" if ui
|
305
|
+
end
|
306
|
+
return
|
307
|
+
end
|
308
|
+
|
309
|
+
if src_entry.dir?
|
310
|
+
if options[:dry_run]
|
311
|
+
ui.output "Would create #{dest_path}" if ui
|
312
|
+
new_dest_dir = new_dest_parent.child(src_entry.name)
|
313
|
+
else
|
314
|
+
new_dest_dir = new_dest_parent.create_child(src_entry.name, nil)
|
315
|
+
ui.output "Created #{dest_path}" if ui
|
316
|
+
end
|
317
|
+
# Directory creation is recursive.
|
318
|
+
if recurse_depth != 0
|
319
|
+
parallel_do(src_entry.children) do |src_child|
|
320
|
+
new_dest_child = new_dest_dir.child(src_child.name)
|
321
|
+
child_error = copy_entries(src_child, new_dest_child, new_dest_dir, recurse_depth ? recurse_depth - 1 : recurse_depth, options, ui, format_path)
|
322
|
+
error ||= child_error
|
323
|
+
end
|
324
|
+
end
|
325
|
+
else
|
326
|
+
if options[:dry_run]
|
327
|
+
ui.output "Would create #{dest_path}" if ui
|
328
|
+
else
|
329
|
+
new_dest_parent.create_child(src_entry.name, src_entry.read)
|
330
|
+
ui.output "Created #{dest_path}" if ui
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
else
|
336
|
+
# Both exist.
|
337
|
+
|
338
|
+
# If the entry can do a copy directly, do that.
|
339
|
+
if dest_entry.respond_to?(:copy_from)
|
340
|
+
if options[:force] || compare(src_entry, dest_entry)[0] == false
|
341
|
+
if options[:dry_run]
|
342
|
+
ui.output "Would update #{dest_path}" if ui
|
343
|
+
else
|
344
|
+
dest_entry.copy_from(src_entry, options)
|
345
|
+
ui.output "Updated #{dest_path}" if ui
|
346
|
+
end
|
347
|
+
end
|
348
|
+
return
|
349
|
+
end
|
350
|
+
|
351
|
+
# If they are different types, log an error.
|
352
|
+
if src_entry.dir?
|
353
|
+
if dest_entry.dir?
|
354
|
+
# If both are directories, recurse into their children
|
355
|
+
if recurse_depth != 0
|
356
|
+
parallel_do(child_pairs(src_entry, dest_entry)) do |src_child, dest_child|
|
357
|
+
child_error = copy_entries(src_child, dest_child, dest_entry, recurse_depth ? recurse_depth - 1 : recurse_depth, options, ui, format_path)
|
358
|
+
error ||= child_error
|
359
|
+
end
|
360
|
+
end
|
361
|
+
else
|
362
|
+
# If they are different types.
|
363
|
+
ui.error("File #{src_path} is a directory while file #{dest_path} is a regular file\n") if ui
|
364
|
+
return
|
365
|
+
end
|
366
|
+
else
|
367
|
+
if dest_entry.dir?
|
368
|
+
ui.error("File #{src_path} is a directory while file #{dest_path} is a regular file\n") if ui
|
369
|
+
return
|
370
|
+
else
|
371
|
+
|
372
|
+
# Both are files! Copy them unless we're sure they are the same.'
|
373
|
+
if options[:diff] == false
|
374
|
+
should_copy = false
|
375
|
+
elsif options[:force]
|
376
|
+
should_copy = true
|
377
|
+
src_value = nil
|
378
|
+
else
|
379
|
+
are_same, src_value, dest_value = compare(src_entry, dest_entry)
|
380
|
+
should_copy = !are_same
|
381
|
+
end
|
382
|
+
if should_copy
|
383
|
+
if options[:dry_run]
|
384
|
+
ui.output "Would update #{dest_path}" if ui
|
385
|
+
else
|
386
|
+
src_value = src_entry.read if src_value.nil?
|
387
|
+
dest_entry.write(src_value)
|
388
|
+
ui.output "Updated #{dest_path}" if ui
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
rescue DefaultEnvironmentCannotBeModifiedError => e
|
395
|
+
ui.warn "#{format_path.call(e.entry)} #{e.reason}." if ui
|
396
|
+
rescue OperationFailedError => e
|
397
|
+
ui.error "#{format_path.call(e.entry)} failed to #{e.operation}: #{e.message}" if ui
|
398
|
+
error = true
|
399
|
+
rescue OperationNotAllowedError => e
|
400
|
+
ui.error "#{format_path.call(e.entry)} #{e.reason}." if ui
|
401
|
+
error = true
|
402
|
+
end
|
403
|
+
error
|
404
|
+
end
|
405
|
+
|
406
|
+
def self.get_or_create_parent(entry, options, ui, format_path)
|
407
|
+
parent = entry.parent
|
408
|
+
if parent && !parent.exists?
|
409
|
+
parent_path = format_path.call(parent) if ui
|
410
|
+
parent_parent = get_or_create_parent(entry.parent, options, ui, format_path)
|
411
|
+
if options[:dry_run]
|
412
|
+
ui.output "Would create #{parent_path}" if ui
|
413
|
+
else
|
414
|
+
parent = parent_parent.create_child(parent.name, nil)
|
415
|
+
ui.output "Created #{parent_path}" if ui
|
416
|
+
end
|
417
|
+
end
|
418
|
+
return parent
|
419
|
+
end
|
420
|
+
|
421
|
+
def self.parallel_do(enum, options = {}, &block)
|
422
|
+
Chef::ChefFS::Parallelizer.parallelize(enum, options, &block).to_a
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|