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
data/lib/chef/util/file_edit.rb
CHANGED
@@ -33,7 +33,7 @@ class Chef
|
|
33
33
|
@file_edited = false
|
34
34
|
|
35
35
|
raise ArgumentError, "File doesn't exist" unless File.exist? @original_pathname
|
36
|
-
|
36
|
+
@contents = File.new(@original_pathname).readlines
|
37
37
|
end
|
38
38
|
|
39
39
|
#search the file line by line and match each line with the given regex
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Sean O'Meara
|
3
|
+
# Author:: Kevin Keane
|
4
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
5
|
+
#
|
6
|
+
# Copyright:: Copyright (c) 2011 Opscode, Inc.
|
7
|
+
# Copyright:: Copyright (c) 2013, North County Tech Center, LLC
|
8
|
+
#
|
9
|
+
# License:: Apache License, Version 2.0
|
10
|
+
#
|
11
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
12
|
+
# you may not use this file except in compliance with the License.
|
13
|
+
# You may obtain a copy of the License at
|
14
|
+
#
|
15
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
16
|
+
#
|
17
|
+
# Unless required by applicable law or agreed to in writing, software
|
18
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
19
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
20
|
+
# See the License for the specific language governing permissions and
|
21
|
+
# limitations under the License.
|
22
|
+
|
23
|
+
require 'chef/mixin/shell_out'
|
24
|
+
|
25
|
+
class Chef
|
26
|
+
class Util
|
27
|
+
#
|
28
|
+
# IMPORTANT: We assume that selinux utilities are installed on an
|
29
|
+
# selinux enabled server. Provisioning an selinux enabled server
|
30
|
+
# without selinux utilities is not supported.
|
31
|
+
#
|
32
|
+
module Selinux
|
33
|
+
|
34
|
+
include Chef::Mixin::ShellOut
|
35
|
+
|
36
|
+
# We want to initialize below variables once during a
|
37
|
+
# chef-client run therefore they are class variables.
|
38
|
+
@@selinux_enabled = nil
|
39
|
+
@@restorecon_path = nil
|
40
|
+
@@selinuxenabled_path = nil
|
41
|
+
|
42
|
+
def selinux_enabled?
|
43
|
+
@@selinux_enabled = check_selinux_enabled? if @@selinux_enabled.nil?
|
44
|
+
@@selinux_enabled
|
45
|
+
end
|
46
|
+
|
47
|
+
def restore_security_context(file_path, recursive = false)
|
48
|
+
if restorecon_path
|
49
|
+
restorecon_command = recursive ? "#{restorecon_path} -R -r" : "#{restorecon_path} -R"
|
50
|
+
restorecon_command += " #{file_path}"
|
51
|
+
Chef::Log.debug("Restoring selinux security content with #{restorecon_command}")
|
52
|
+
shell_out!(restorecon_command)
|
53
|
+
else
|
54
|
+
Chef::Log.warn "Can not find 'restorecon' on the system. Skipping selinux security context restore."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def restorecon_path
|
61
|
+
@@restorecon_path = which("restorecon") if @@restorecon_path.nil?
|
62
|
+
@@restorecon_path
|
63
|
+
end
|
64
|
+
|
65
|
+
def selinuxenabled_path
|
66
|
+
@@selinuxenabled_path = which("selinuxenabled") if @@selinuxenabled_path.nil?
|
67
|
+
@@selinuxenabled_path
|
68
|
+
end
|
69
|
+
|
70
|
+
def which(cmd)
|
71
|
+
paths = ENV['PATH'].split(File::PATH_SEPARATOR) + [ '/bin', '/usr/bin', '/sbin', '/usr/sbin' ]
|
72
|
+
paths.each do |path|
|
73
|
+
filename = File.join(path, cmd)
|
74
|
+
return filename if File.executable?(filename)
|
75
|
+
end
|
76
|
+
false
|
77
|
+
end
|
78
|
+
|
79
|
+
def check_selinux_enabled?
|
80
|
+
if selinuxenabled_path
|
81
|
+
cmd = shell_out!(selinuxenabled_path, :returns => [0,1])
|
82
|
+
case cmd.exitstatus
|
83
|
+
when 1
|
84
|
+
return false
|
85
|
+
when 0
|
86
|
+
return true
|
87
|
+
else
|
88
|
+
raise RuntimeError, "Unknown exit code from command #{selinuxenabled_path}: #{cmd.exitstatus}"
|
89
|
+
end
|
90
|
+
else
|
91
|
+
# We assume selinux is not enabled if selinux utils are not
|
92
|
+
# installed.
|
93
|
+
return false
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
@@ -63,7 +63,7 @@ class Chef::Util::Windows::NetGroup < Chef::Util::Windows
|
|
63
63
|
members = 0.chr * (nread * (PTR_SIZE * 3)) #nread * sizeof(LOCALGROUP_MEMBERS_INFO_1)
|
64
64
|
memcpy(members, ptr, members.size)
|
65
65
|
|
66
|
-
#
|
66
|
+
#3 pointer fields in LOCALGROUP_MEMBERS_INFO_1, offset 2*PTR_SIZE is lgrmi1_name
|
67
67
|
nread.times do |i|
|
68
68
|
offset = (i * 3) + 2
|
69
69
|
member = lpwstr_to_s(members, offset)
|
@@ -92,10 +92,6 @@ class Chef::Util::Windows::NetGroup < Chef::Util::Windows
|
|
92
92
|
modify_members(members, NetLocalGroupAddMembers)
|
93
93
|
end
|
94
94
|
|
95
|
-
def local_delete_members(members)
|
96
|
-
modify_members(members, NetLocalGroupDelMembers)
|
97
|
-
end
|
98
|
-
|
99
95
|
def local_delete
|
100
96
|
rc = NetLocalGroupDel.call(nil, @name)
|
101
97
|
if rc != NERR_Success
|
@@ -37,9 +37,14 @@ class Chef::Util::Windows::NetUser < Chef::Util::Windows
|
|
37
37
|
#[:symbol_name, default_val]
|
38
38
|
#default_val duals as field type
|
39
39
|
#array index duals as structure offset
|
40
|
+
|
41
|
+
#OC-8391
|
42
|
+
#Changing [:password, nil], to [:password, ""],
|
43
|
+
#if :password is set to nil, windows user creation api ignores the password policy applied
|
44
|
+
#thus initializing it with empty string value.
|
40
45
|
USER_INFO_3 = [
|
41
46
|
[:name, nil],
|
42
|
-
[:password,
|
47
|
+
[:password, ""],
|
43
48
|
[:password_age, 0],
|
44
49
|
[:priv, 0], #"The NetUserAdd and NetUserSetInfo functions ignore this member"
|
45
50
|
[:home_dir, nil],
|
@@ -183,12 +188,20 @@ class Chef::Util::Windows::NetUser < Chef::Util::Windows
|
|
183
188
|
def disable_account
|
184
189
|
user_modify do |user|
|
185
190
|
user[:flags] |= UF_ACCOUNTDISABLE
|
191
|
+
#This does not set the password to nil. It (for some reason) means to ignore updating the field.
|
192
|
+
#See similar behavior for the logon_hours field documented at
|
193
|
+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa371338%28v=vs.85%29.aspx
|
194
|
+
user[:password] = nil
|
186
195
|
end
|
187
196
|
end
|
188
197
|
|
189
198
|
def enable_account
|
190
199
|
user_modify do |user|
|
191
200
|
user[:flags] &= ~UF_ACCOUNTDISABLE
|
201
|
+
#This does not set the password to nil. It (for some reason) means to ignore updating the field.
|
202
|
+
#See similar behavior for the logon_hours field documented at
|
203
|
+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa371338%28v=vs.85%29.aspx
|
204
|
+
user[:password] = nil
|
192
205
|
end
|
193
206
|
end
|
194
207
|
|
@@ -51,8 +51,8 @@ class Chef::Util::Windows::Volume < Chef::Util::Windows
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
def add(
|
55
|
-
unless SetVolumeMountPoint(@name,
|
54
|
+
def add(args)
|
55
|
+
unless SetVolumeMountPoint(@name, args[:remote])
|
56
56
|
raise ArgumentError, get_last_error
|
57
57
|
end
|
58
58
|
end
|
data/lib/chef/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Author:: Xabier de Zuazo (<xabier@onddo.com>)
|
2
|
+
# Copyright:: Copyright (c) 2013 Onddo Labs, SL.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require 'chef/version_class'
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Version
|
21
|
+
class Platform < Chef::Version
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def parse(str="")
|
26
|
+
@major, @minor, @patch =
|
27
|
+
case str.to_s
|
28
|
+
when /^(\d+)\.(\d+)\.(\d+)$/
|
29
|
+
[ $1.to_i, $2.to_i, $3.to_i ]
|
30
|
+
when /^(\d+)\.(\d+)$/
|
31
|
+
[ $1.to_i, $2.to_i, 0 ]
|
32
|
+
when /^(\d+)$/
|
33
|
+
[ $1.to_i, 0, 0 ]
|
34
|
+
else
|
35
|
+
msg = "'#{str.to_s}' does not match 'x.y.z', 'x.y' or 'x'"
|
36
|
+
raise Chef::Exceptions::InvalidPlatformVersion.new( msg )
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/chef/version_class.rb
CHANGED
@@ -22,6 +22,7 @@ class Chef
|
|
22
22
|
STANDARD_OPS = %w(< > <= >=)
|
23
23
|
OPS = %w(< > = <= >= ~>)
|
24
24
|
PATTERN = /^(#{OPS.join('|')}) (.+)$/
|
25
|
+
VERSION_CLASS = Chef::Version
|
25
26
|
|
26
27
|
attr_reader :op, :version
|
27
28
|
|
@@ -41,9 +42,9 @@ class Chef
|
|
41
42
|
|
42
43
|
def include?(v)
|
43
44
|
version = if v.respond_to? :version # a CookbookVersion-like object
|
44
|
-
|
45
|
+
self.class::VERSION_CLASS.new(v.version.to_s)
|
45
46
|
else
|
46
|
-
|
47
|
+
self.class::VERSION_CLASS.new(v.to_s)
|
47
48
|
end
|
48
49
|
do_op(version)
|
49
50
|
end
|
@@ -98,13 +99,13 @@ class Chef
|
|
98
99
|
@missing_patch_level = false
|
99
100
|
if str.index(" ").nil? && str =~ /^[0-9]/
|
100
101
|
# try for lone version, implied '='
|
101
|
-
@version =
|
102
|
+
@version = self.class::VERSION_CLASS.new(str)
|
102
103
|
@op = "="
|
103
104
|
elsif PATTERN.match str
|
104
105
|
@op = $1
|
105
106
|
raw_version = $2
|
106
|
-
@version =
|
107
|
-
if raw_version.split('.').size
|
107
|
+
@version = self.class::VERSION_CLASS.new(raw_version)
|
108
|
+
if raw_version.split('.').size <= 2
|
108
109
|
@missing_patch_level = true
|
109
110
|
end
|
110
111
|
else
|
@@ -1,29 +1,26 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Copyright:: Copyright (c) 2009 Daniel DeLeo
|
1
|
+
# Author:: Xabier de Zuazo (<xabier@onddo.com>)
|
2
|
+
# Copyright:: Copyright (c) 2013 Onddo Labs, SL.
|
4
3
|
# License:: Apache License, Version 2.0
|
5
4
|
#
|
6
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
6
|
# you may not use this file except in compliance with the License.
|
8
7
|
# You may obtain a copy of the License at
|
9
|
-
#
|
8
|
+
#
|
10
9
|
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
10
|
+
#
|
12
11
|
# Unless required by applicable law or agreed to in writing, software
|
13
12
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
14
|
# See the License for the specific language governing permissions and
|
16
15
|
# limitations under the License.
|
17
|
-
|
18
|
-
|
19
|
-
require "singleton"
|
20
|
-
require "bunny"
|
21
|
-
|
22
|
-
require "chef/index_queue/amqp_client"
|
23
|
-
require "chef/index_queue/indexable"
|
24
|
-
require "chef/index_queue/consumer"
|
16
|
+
require 'chef/version_constraint'
|
17
|
+
require 'chef/version/platform'
|
25
18
|
|
26
19
|
class Chef
|
27
|
-
|
20
|
+
class VersionConstraint
|
21
|
+
class Platform < Chef::VersionConstraint
|
22
|
+
VERSION_CLASS = Chef::Version::Platform
|
23
|
+
|
24
|
+
end
|
28
25
|
end
|
29
26
|
end
|
data/lib/chef/win32/api/file.rb
CHANGED
@@ -459,8 +459,7 @@ BOOL WINAPI DeviceIoControl(
|
|
459
459
|
# to be passed to the *W vesion of WinAPI File
|
460
460
|
# functions
|
461
461
|
def encode_path(path)
|
462
|
-
path.gsub
|
463
|
-
(path_prepender << path).to_wstring
|
462
|
+
(path_prepender << path.gsub(::File::SEPARATOR, ::File::ALT_SEPARATOR)).to_wstring
|
464
463
|
end
|
465
464
|
|
466
465
|
def path_prepender
|
@@ -472,6 +471,13 @@ BOOL WINAPI DeviceIoControl(
|
|
472
471
|
# ensures the handle is closed on exit of the block
|
473
472
|
def file_search_handle(path, &block)
|
474
473
|
begin
|
474
|
+
# Workaround for CHEF-4419:
|
475
|
+
# Make sure paths starting with "/" has a drive letter
|
476
|
+
# assigned from the current working diretory.
|
477
|
+
# Note: In chef 11.8 and beyond this issue will be fixed with a
|
478
|
+
# broader fix to map all the paths starting with "/" to
|
479
|
+
# SYSTEM_DRIVE on windows.
|
480
|
+
path = ::File.expand_path(path) if path.start_with? "/"
|
475
481
|
path = encode_path(path)
|
476
482
|
find_data = WIN32_FIND_DATA.new
|
477
483
|
handle = FindFirstFileW(path, find_data)
|
@@ -226,6 +226,50 @@ class Chef
|
|
226
226
|
:SidTypeLabel
|
227
227
|
]
|
228
228
|
|
229
|
+
TOKEN_INFORMATION_CLASS = enum :TOKEN_INFORMATION_CLASS, [
|
230
|
+
:TokenUser, 1,
|
231
|
+
:TokenGroups,
|
232
|
+
:TokenPrivileges,
|
233
|
+
:TokenOwner,
|
234
|
+
:TokenPrimaryGroup,
|
235
|
+
:TokenDefaultDacl,
|
236
|
+
:TokenSource,
|
237
|
+
:TokenType,
|
238
|
+
:TokenImpersonationLevel,
|
239
|
+
:TokenStatistics,
|
240
|
+
:TokenRestrictedSids,
|
241
|
+
:TokenSessionId,
|
242
|
+
:TokenGroupsAndPrivileges,
|
243
|
+
:TokenSessionReference,
|
244
|
+
:TokenSandBoxInert,
|
245
|
+
:TokenAuditPolicy,
|
246
|
+
:TokenOrigin,
|
247
|
+
:TokenElevationType,
|
248
|
+
:TokenLinkedToken,
|
249
|
+
:TokenElevation,
|
250
|
+
:TokenHasRestrictions,
|
251
|
+
:TokenAccessInformation,
|
252
|
+
:TokenVirtualizationAllowed,
|
253
|
+
:TokenVirtualizationEnabled,
|
254
|
+
:TokenIntegrityLevel,
|
255
|
+
:TokenUIAccess,
|
256
|
+
:TokenMandatoryPolicy,
|
257
|
+
:TokenLogonSid,
|
258
|
+
:TokenIsAppContainer,
|
259
|
+
:TokenCapabilities,
|
260
|
+
:TokenAppContainerSid,
|
261
|
+
:TokenAppContainerNumber,
|
262
|
+
:TokenUserClaimAttributes,
|
263
|
+
:TokenDeviceClaimAttributes,
|
264
|
+
:TokenRestrictedUserClaimAttributes,
|
265
|
+
:TokenRestrictedDeviceClaimAttributes,
|
266
|
+
:TokenDeviceGroups,
|
267
|
+
:TokenRestrictedDeviceGroups,
|
268
|
+
:TokenSecurityAttributes,
|
269
|
+
:TokenIsRestricted,
|
270
|
+
:MaxTokenInfoClass
|
271
|
+
]
|
272
|
+
|
229
273
|
# SECURITY_DESCRIPTOR is an opaque structure whose contents can vary. Pass the
|
230
274
|
# pointer around and free it with LocalFree.
|
231
275
|
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa379561(v=vs.85).aspx
|
@@ -334,7 +378,7 @@ class Chef
|
|
334
378
|
safe_attach_function :SetSecurityDescriptorGroup, [ :pointer, :pointer, :BOOL ], :BOOL
|
335
379
|
safe_attach_function :SetSecurityDescriptorOwner, [ :pointer, :pointer, :BOOL ], :BOOL
|
336
380
|
safe_attach_function :SetSecurityDescriptorSacl, [ :pointer, :BOOL, :pointer, :BOOL ], :BOOL
|
337
|
-
|
381
|
+
safe_attach_function :GetTokenInformation, [ :HANDLE, :TOKEN_INFORMATION_CLASS, :pointer, :DWORD, :PDWORD ], :BOOL
|
338
382
|
end
|
339
383
|
end
|
340
384
|
end
|
@@ -0,0 +1,382 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Prajakta Purohit (<prajakta@opscode.com>)
|
3
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
4
|
+
#
|
5
|
+
# Copyright:: 2012, Opscode, Inc.
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
require 'chef/reserved_names'
|
20
|
+
|
21
|
+
if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
22
|
+
require 'win32/registry'
|
23
|
+
require 'ruby-wmi'
|
24
|
+
require 'win32/api'
|
25
|
+
end
|
26
|
+
|
27
|
+
class Chef
|
28
|
+
class Win32
|
29
|
+
class Registry
|
30
|
+
|
31
|
+
attr_accessor :run_context
|
32
|
+
attr_accessor :architecture
|
33
|
+
|
34
|
+
def initialize(run_context=nil, user_architecture=:machine)
|
35
|
+
@run_context = run_context
|
36
|
+
self.architecture = user_architecture
|
37
|
+
end
|
38
|
+
|
39
|
+
def architecture=(user_architecture)
|
40
|
+
@architecture = user_architecture.to_sym
|
41
|
+
assert_architecture!
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_values(key_path)
|
45
|
+
hive, key = get_hive_and_key(key_path)
|
46
|
+
key_exists!(key_path)
|
47
|
+
values = hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
48
|
+
reg.map { |name, type, data| {:name=>name, :type=>get_name_from_type(type), :data=>data} }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def set_value(key_path, value)
|
53
|
+
Chef::Log.debug("Updating value #{value[:name]} in registry key #{key_path} with type #{value[:type]} and data #{value[:data]}")
|
54
|
+
key_exists!(key_path)
|
55
|
+
hive, key = get_hive_and_key(key_path)
|
56
|
+
if value_exists?(key_path, value)
|
57
|
+
if data_exists?(key_path, value)
|
58
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} already had those values, not updated")
|
59
|
+
return false
|
60
|
+
else
|
61
|
+
hive.open(key, ::Win32::Registry::KEY_SET_VALUE | ::Win32::Registry::KEY_QUERY_VALUE | registry_system_architecture) do |reg|
|
62
|
+
reg.write(value[:name], get_type_from_name(value[:type]), value[:data])
|
63
|
+
end
|
64
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} updated")
|
65
|
+
end
|
66
|
+
else
|
67
|
+
hive.open(key, ::Win32::Registry::KEY_SET_VALUE | ::Win32::Registry::KEY_QUERY_VALUE | registry_system_architecture) do |reg|
|
68
|
+
reg.write(value[:name], get_type_from_name(value[:type]), value[:data])
|
69
|
+
end
|
70
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} created")
|
71
|
+
end
|
72
|
+
true
|
73
|
+
end
|
74
|
+
|
75
|
+
def delete_value(key_path, value)
|
76
|
+
Chef::Log.debug("Deleting value #{value[:name]} from registry key #{key_path}")
|
77
|
+
if value_exists?(key_path, value)
|
78
|
+
begin
|
79
|
+
hive, key = get_hive_and_key(key_path)
|
80
|
+
rescue Chef::Exceptions::Win32RegKeyMissing
|
81
|
+
return true
|
82
|
+
end
|
83
|
+
hive.open(key, ::Win32::Registry::KEY_SET_VALUE | registry_system_architecture) do |reg|
|
84
|
+
reg.delete_value(value[:name])
|
85
|
+
Chef::Log.debug("Deleted value #{value[:name]} from registry key #{key_path}")
|
86
|
+
end
|
87
|
+
else
|
88
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} does not exist, not updated")
|
89
|
+
end
|
90
|
+
true
|
91
|
+
end
|
92
|
+
|
93
|
+
def create_key(key_path, recursive)
|
94
|
+
Chef::Log.debug("Creating registry key #{key_path}")
|
95
|
+
if keys_missing?(key_path)
|
96
|
+
if recursive == true
|
97
|
+
Chef::Log.debug("Registry key #{key_path} has missing subkeys, and recursive specified, creating them....")
|
98
|
+
create_missing(key_path)
|
99
|
+
else
|
100
|
+
raise Chef::Exceptions::Win32RegNoRecursive, "Registry key #{key_path} has missing subkeys, and recursive not specified"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
if key_exists?(key_path)
|
104
|
+
Chef::Log.debug("Registry key #{key_path} already exists, doing nothing")
|
105
|
+
else
|
106
|
+
hive, key = get_hive_and_key(key_path)
|
107
|
+
hive.create(key, ::Win32::Registry::KEY_WRITE | registry_system_architecture)
|
108
|
+
Chef::Log.debug("Registry key #{key_path} created")
|
109
|
+
end
|
110
|
+
true
|
111
|
+
end
|
112
|
+
|
113
|
+
def delete_key(key_path, recursive)
|
114
|
+
Chef::Log.debug("Deleting registry key #{key_path}")
|
115
|
+
unless key_exists?(key_path)
|
116
|
+
Chef::Log.debug("Registry key #{key_path}, does not exist, not deleting")
|
117
|
+
return true
|
118
|
+
end
|
119
|
+
#key_path is in the form "HKLM\Software\Opscode" for example, extracting
|
120
|
+
#hive = HKLM,
|
121
|
+
#hive_namespace = ::Win32::Registry::HKEY_LOCAL_MACHINE
|
122
|
+
hive = key_path.split("\\").shift
|
123
|
+
hive_namespace, key_including_parent = get_hive_and_key(key_path)
|
124
|
+
if has_subkeys?(key_path)
|
125
|
+
if recursive == true
|
126
|
+
subkeys = get_subkeys(key_path)
|
127
|
+
subkeys.each do |key|
|
128
|
+
keypath_to_check = hive+"\\"+key_including_parent+"\\"+key
|
129
|
+
Chef::Log.debug("Deleting registry key #{key_path} recursively")
|
130
|
+
delete_key(keypath_to_check, true)
|
131
|
+
end
|
132
|
+
delete_key_ex(hive_namespace, key_including_parent)
|
133
|
+
else
|
134
|
+
raise Chef::Exceptions::Win32RegNoRecursive, "Registry key #{key_path} has subkeys, and recursive not specified"
|
135
|
+
end
|
136
|
+
else
|
137
|
+
delete_key_ex(hive_namespace, key_including_parent)
|
138
|
+
return true
|
139
|
+
end
|
140
|
+
true
|
141
|
+
end
|
142
|
+
|
143
|
+
#Using the 'RegDeleteKeyEx' Windows API that correctly supports WOW64 systems (Win2003)
|
144
|
+
#instead of the 'RegDeleteKey'
|
145
|
+
def delete_key_ex(hive, key)
|
146
|
+
regDeleteKeyEx = ::Win32::API.new('RegDeleteKeyEx', 'LPLL', 'L', 'advapi32')
|
147
|
+
hive_num = hive.hkey - (1 << 32)
|
148
|
+
regDeleteKeyEx.call(hive_num, key, ::Win32::Registry::KEY_WRITE | registry_system_architecture, 0)
|
149
|
+
end
|
150
|
+
|
151
|
+
def key_exists?(key_path)
|
152
|
+
hive, key = get_hive_and_key(key_path)
|
153
|
+
begin
|
154
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |current_key|
|
155
|
+
return true
|
156
|
+
end
|
157
|
+
rescue ::Win32::Registry::Error => e
|
158
|
+
return false
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def key_exists!(key_path)
|
163
|
+
unless key_exists?(key_path)
|
164
|
+
raise Chef::Exceptions::Win32RegKeyMissing, "Registry key #{key_path} does not exist"
|
165
|
+
end
|
166
|
+
true
|
167
|
+
end
|
168
|
+
|
169
|
+
def hive_exists?(key_path)
|
170
|
+
begin
|
171
|
+
hive, key = get_hive_and_key(key_path)
|
172
|
+
rescue Chef::Exceptions::Win32RegHiveMissing => e
|
173
|
+
return false
|
174
|
+
end
|
175
|
+
return true
|
176
|
+
end
|
177
|
+
|
178
|
+
def has_subkeys?(key_path)
|
179
|
+
key_exists!(key_path)
|
180
|
+
hive, key = get_hive_and_key(key_path)
|
181
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
182
|
+
reg.each_key{ |key| return true }
|
183
|
+
end
|
184
|
+
return false
|
185
|
+
end
|
186
|
+
|
187
|
+
def get_subkeys(key_path)
|
188
|
+
subkeys = []
|
189
|
+
key_exists!(key_path)
|
190
|
+
hive, key = get_hive_and_key(key_path)
|
191
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
192
|
+
reg.each_key{ |current_key| subkeys << current_key }
|
193
|
+
end
|
194
|
+
return subkeys
|
195
|
+
end
|
196
|
+
|
197
|
+
# 32-bit chef clients running on 64-bit machines will default to reading the 64-bit registry
|
198
|
+
def registry_system_architecture
|
199
|
+
applied_arch = ( architecture == :machine ) ? machine_architecture : architecture
|
200
|
+
( applied_arch == :x86_64 ) ? 0x0100 : 0x0200
|
201
|
+
end
|
202
|
+
|
203
|
+
def value_exists?(key_path, value)
|
204
|
+
key_exists!(key_path)
|
205
|
+
hive, key = get_hive_and_key(key_path)
|
206
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
207
|
+
return true if reg.any? {|val| val == value[:name] }
|
208
|
+
end
|
209
|
+
return false
|
210
|
+
end
|
211
|
+
|
212
|
+
def data_exists?(key_path, value)
|
213
|
+
key_exists!(key_path)
|
214
|
+
hive, key = get_hive_and_key(key_path)
|
215
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
216
|
+
reg.each do |val_name, val_type, val_data|
|
217
|
+
if val_name == value[:name] &&
|
218
|
+
val_type == get_type_from_name(value[:type]) &&
|
219
|
+
val_data == value[:data]
|
220
|
+
return true
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
return false
|
225
|
+
end
|
226
|
+
|
227
|
+
def value_exists!(key_path, value)
|
228
|
+
unless value_exists?(key_path, value)
|
229
|
+
raise Chef::Exceptions::Win32RegValueMissing, "Registry key #{key_path} has no value named #{value[:name]}"
|
230
|
+
end
|
231
|
+
true
|
232
|
+
end
|
233
|
+
|
234
|
+
def data_exists!(key_path, value)
|
235
|
+
unless data_exists?(key_path, value)
|
236
|
+
raise Chef::Exceptions::Win32RegDataMissing, "Registry key #{key_path} has no value named #{value[:name]}, containing type #{value[:type]} and data #{value[:data]}"
|
237
|
+
end
|
238
|
+
true
|
239
|
+
end
|
240
|
+
|
241
|
+
def type_matches?(key_path, value)
|
242
|
+
value_exists!(key_path, value)
|
243
|
+
hive, key = get_hive_and_key(key_path)
|
244
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
245
|
+
reg.each do |val_name, val_type|
|
246
|
+
if val_name == value[:name]
|
247
|
+
type_new = get_type_from_name(value[:type])
|
248
|
+
if val_type == type_new
|
249
|
+
return true
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
return false
|
255
|
+
end
|
256
|
+
|
257
|
+
def type_matches!(key_path, value)
|
258
|
+
unless type_matches?(key_path, value)
|
259
|
+
raise Chef::Exceptions::Win32RegTypesMismatch, "Registry key #{key_path} has a value #{value[:name]} with a type that is not #{value[:type]}"
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def get_type_from_name(val_type)
|
264
|
+
value = {
|
265
|
+
:binary => ::Win32::Registry::REG_BINARY,
|
266
|
+
:string => ::Win32::Registry::REG_SZ,
|
267
|
+
:multi_string => ::Win32::Registry::REG_MULTI_SZ,
|
268
|
+
:expand_string => ::Win32::Registry::REG_EXPAND_SZ,
|
269
|
+
:dword => ::Win32::Registry::REG_DWORD,
|
270
|
+
:dword_big_endian => ::Win32::Registry::REG_DWORD_BIG_ENDIAN,
|
271
|
+
:qword => ::Win32::Registry::REG_QWORD
|
272
|
+
}[val_type]
|
273
|
+
return value
|
274
|
+
end
|
275
|
+
|
276
|
+
def keys_missing?(key_path)
|
277
|
+
missing_key_arr = key_path.split("\\")
|
278
|
+
missing_key_arr.pop
|
279
|
+
key = missing_key_arr.join("\\")
|
280
|
+
!key_exists?(key)
|
281
|
+
end
|
282
|
+
|
283
|
+
def get_type_from_name(val_type)
|
284
|
+
_type_name_map[val_type]
|
285
|
+
end
|
286
|
+
|
287
|
+
def get_name_from_type(val_class)
|
288
|
+
_name_type_map[val_class]
|
289
|
+
end
|
290
|
+
|
291
|
+
private
|
292
|
+
|
293
|
+
def node
|
294
|
+
run_context && run_context.node
|
295
|
+
end
|
296
|
+
|
297
|
+
def machine_architecture
|
298
|
+
node[:kernel][:machine].to_sym
|
299
|
+
end
|
300
|
+
|
301
|
+
def assert_architecture!
|
302
|
+
if machine_architecture == :i386 && architecture == :x86_64
|
303
|
+
raise Chef::Exceptions::Win32RegArchitectureIncorrect, "cannot access 64-bit registry on a 32-bit windows instance"
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
def get_hive_and_key(path)
|
308
|
+
reg_path = path.split("\\")
|
309
|
+
hive_name = reg_path.shift
|
310
|
+
key = reg_path.join("\\")
|
311
|
+
|
312
|
+
hive = {
|
313
|
+
"HKLM" => ::Win32::Registry::HKEY_LOCAL_MACHINE,
|
314
|
+
"HKEY_LOCAL_MACHINE" => ::Win32::Registry::HKEY_LOCAL_MACHINE,
|
315
|
+
"HKU" => ::Win32::Registry::HKEY_USERS,
|
316
|
+
"HKEY_USERS" => ::Win32::Registry::HKEY_USERS,
|
317
|
+
"HKCU" => ::Win32::Registry::HKEY_CURRENT_USER,
|
318
|
+
"HKEY_CURRENT_USER" => ::Win32::Registry::HKEY_CURRENT_USER,
|
319
|
+
"HKCR" => ::Win32::Registry::HKEY_CLASSES_ROOT,
|
320
|
+
"HKEY_CLASSES_ROOT" => ::Win32::Registry::HKEY_CLASSES_ROOT,
|
321
|
+
"HKCC" => ::Win32::Registry::HKEY_CURRENT_CONFIG,
|
322
|
+
"HKEY_CURRENT_CONFIG" => ::Win32::Registry::HKEY_CURRENT_CONFIG,
|
323
|
+
}[hive_name]
|
324
|
+
|
325
|
+
raise Chef::Exceptions::Win32RegHiveMissing, "Registry Hive #{hive_name} does not exist" unless hive
|
326
|
+
|
327
|
+
return hive, key
|
328
|
+
end
|
329
|
+
|
330
|
+
def _type_name_map
|
331
|
+
{
|
332
|
+
:binary => ::Win32::Registry::REG_BINARY,
|
333
|
+
:string => ::Win32::Registry::REG_SZ,
|
334
|
+
:multi_string => ::Win32::Registry::REG_MULTI_SZ,
|
335
|
+
:expand_string => ::Win32::Registry::REG_EXPAND_SZ,
|
336
|
+
:dword => ::Win32::Registry::REG_DWORD,
|
337
|
+
:dword_big_endian => ::Win32::Registry::REG_DWORD_BIG_ENDIAN,
|
338
|
+
:qword => ::Win32::Registry::REG_QWORD
|
339
|
+
}
|
340
|
+
end
|
341
|
+
|
342
|
+
def _name_type_map
|
343
|
+
@_name_type_map ||= _type_name_map.invert
|
344
|
+
end
|
345
|
+
|
346
|
+
def get_type_from_num(val_type)
|
347
|
+
value = {
|
348
|
+
3 => ::Win32::Registry::REG_BINARY,
|
349
|
+
1 => ::Win32::Registry::REG_SZ,
|
350
|
+
7 => ::Win32::Registry::REG_MULTI_SZ,
|
351
|
+
2 => ::Win32::Registry::REG_EXPAND_SZ,
|
352
|
+
4 => ::Win32::Registry::REG_DWORD,
|
353
|
+
5 => ::Win32::Registry::REG_DWORD_BIG_ENDIAN,
|
354
|
+
11 => ::Win32::Registry::REG_QWORD
|
355
|
+
}[val_type]
|
356
|
+
return value
|
357
|
+
end
|
358
|
+
|
359
|
+
def create_missing(key_path)
|
360
|
+
missing_key_arr = key_path.split("\\")
|
361
|
+
hivename = missing_key_arr.shift
|
362
|
+
missing_key_arr.pop
|
363
|
+
existing_key_path = hivename
|
364
|
+
hive, key = get_hive_and_key(key_path)
|
365
|
+
missing_key_arr.each do |intermediate_key|
|
366
|
+
existing_key_path = existing_key_path << "\\" << intermediate_key
|
367
|
+
if !key_exists?(existing_key_path)
|
368
|
+
Chef::Log.debug("Recursively creating registry key #{existing_key_path}")
|
369
|
+
hive.create(get_key(existing_key_path), ::Win32::Registry::KEY_ALL_ACCESS | registry_system_architecture)
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
def get_key(path)
|
375
|
+
reg_path = path.split("\\")
|
376
|
+
hive_name = reg_path.shift
|
377
|
+
key = reg_path.join("\\")
|
378
|
+
end
|
379
|
+
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|