chef 10.34.6 → 11.0.0.beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +4 -12
- data/bin/chef-apply +25 -0
- data/bin/chef-shell +34 -0
- data/bin/shef +6 -5
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/chef-expander.8.html +4 -4
- data/distro/common/html/chef-expanderctl.8.html +4 -4
- data/distro/common/html/chef-server-webui.8.html +4 -4
- data/distro/common/html/chef-server.8.html +4 -4
- data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
- data/distro/common/html/chef-solo.8.html +18 -12
- data/distro/common/html/chef-solr.8.html +4 -4
- data/distro/common/html/knife-bootstrap.1.html +4 -4
- data/distro/common/html/knife-client.1.html +4 -4
- data/distro/common/html/knife-configure.1.html +4 -4
- data/distro/common/html/knife-cookbook-site.1.html +4 -4
- data/distro/common/html/knife-cookbook.1.html +10 -7
- data/distro/common/html/knife-data-bag.1.html +10 -7
- data/distro/common/html/knife-environment.1.html +8 -6
- data/distro/common/html/knife-exec.1.html +9 -9
- data/distro/common/html/knife-index.1.html +4 -4
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/html/knife-role.1.html +4 -4
- data/distro/common/html/knife-search.1.html +4 -4
- data/distro/common/html/knife-ssh.1.html +4 -4
- data/distro/common/html/knife-status.1.html +4 -4
- data/distro/common/html/knife-tag.1.html +4 -4
- data/distro/common/html/knife.1.html +8 -13
- data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +1 -1
- data/distro/common/man/man1/knife-configure.1 +1 -1
- data/distro/common/man/man1/knife-cookbook-site.1 +1 -1
- data/distro/common/man/man1/knife-cookbook.1 +15 -2
- data/distro/common/man/man1/knife-data-bag.1 +15 -2
- data/distro/common/man/man1/knife-environment.1 +12 -2
- data/distro/common/man/man1/knife-exec.1 +4 -7
- data/distro/common/man/man1/knife-index.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +1 -1
- data/distro/common/man/man1/knife-search.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife.1 +3 -6
- data/distro/common/man/man8/chef-client.8 +1 -1
- data/distro/common/man/man8/chef-expander.8 +1 -1
- data/distro/common/man/man8/chef-expanderctl.8 +1 -1
- data/distro/common/man/man8/chef-server-webui.8 +1 -1
- data/distro/common/man/man8/chef-server.8 +1 -1
- data/distro/common/man/man8/chef-solo.8 +36 -4
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
- data/distro/common/markdown/man1/knife-exec.mkd +11 -6
- data/distro/common/markdown/man1/knife.mkd +4 -9
- data/distro/debian/etc/default/chef-client +0 -1
- data/distro/debian/etc/init.d/chef-client +2 -2
- data/lib/chef.rb +2 -5
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +71 -14
- data/lib/chef/application/apply.rb +160 -0
- data/lib/chef/application/client.rb +25 -18
- data/lib/chef/application/knife.rb +0 -2
- data/lib/chef/application/solo.rb +23 -8
- data/lib/chef/application/windows_service.rb +5 -2
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +11 -0
- data/lib/chef/chef_fs/command_line.rb +232 -0
- data/lib/chef/chef_fs/file_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +358 -0
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +109 -0
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb} +12 -15
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +84 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +188 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +78 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +78 -0
- data/lib/chef/chef_fs/file_system/data_bag_item.rb +59 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +66 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +90 -0
- data/lib/chef/{index_queue.rb → chef_fs/file_system/file_system_error.rb} +14 -12
- data/lib/chef/{resource/whyrun_safe_ruby_block.rb → chef_fs/file_system/file_system_root_dir.rb} +10 -10
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +47 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → chef_fs/file_system/nonexistent_fs_object.rb} +19 -9
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +84 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +123 -0
- data/lib/chef/chef_fs/knife.rb +77 -0
- data/lib/chef/chef_fs/path_utils.rb +64 -0
- data/lib/chef/client.rb +44 -21
- data/lib/chef/config.rb +52 -43
- data/lib/chef/cookbook/synchronizer.rb +6 -8
- data/lib/chef/cookbook/syntax_check.rb +61 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +17 -19
- data/lib/chef/cookbook_version.rb +3 -302
- data/lib/chef/daemon.rb +3 -18
- data/lib/chef/data_bag.rb +4 -97
- data/lib/chef/data_bag_item.rb +2 -65
- data/lib/chef/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +66 -0
- data/lib/chef/dsl/include_attribute.rb +60 -0
- data/lib/chef/dsl/include_recipe.rb +42 -0
- data/lib/chef/dsl/platform_introspection.rb +213 -0
- data/lib/chef/dsl/recipe.rb +84 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +74 -19
- data/lib/chef/environment.rb +9 -180
- data/lib/chef/exceptions.rb +87 -14
- data/lib/chef/formatters/base.rb +4 -1
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +0 -4
- data/lib/chef/json_compat.rb +1 -97
- data/lib/chef/knife.rb +90 -41
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/centos5-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +3 -3
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +2 -2
- data/lib/chef/knife/configure.rb +1 -2
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +3 -2
- data/lib/chef/knife/cookbook_upload.rb +12 -7
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +26 -13
- data/lib/chef/knife/core/node_editor.rb +36 -16
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +15 -9
- data/lib/chef/knife/delete.rb +39 -0
- data/lib/chef/knife/diff.rb +46 -0
- data/lib/chef/knife/download.rb +50 -0
- data/lib/chef/knife/environment_show.rb +7 -0
- data/lib/chef/knife/exec.rb +5 -5
- data/lib/chef/knife/help_topics.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +91 -7
- data/lib/chef/knife/list.rb +109 -0
- data/lib/chef/knife/raw.rb +108 -0
- data/lib/chef/knife/search.rb +40 -22
- data/lib/chef/knife/show.rb +32 -0
- data/lib/chef/knife/ssh.rb +6 -2
- data/lib/chef/knife/upload.rb +50 -0
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +55 -197
- data/lib/chef/mixin/language.rb +9 -222
- data/lib/chef/mixin/language_include_attribute.rb +6 -38
- data/lib/chef/mixin/language_include_recipe.rb +3 -35
- data/lib/chef/mixin/params_validate.rb +6 -19
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +8 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +40 -0
- data/lib/chef/mixins.rb +0 -4
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/node.rb +133 -309
- data/lib/chef/node/attribute.rb +333 -473
- data/lib/chef/node/attribute_collections.rb +199 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +7 -22
- data/lib/chef/provider.rb +2 -49
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +5 -33
- data/lib/chef/provider/deploy.rb +2 -1
- data/lib/chef/provider/directory.rb +14 -17
- data/lib/chef/provider/file.rb +19 -52
- data/lib/chef/provider/group.rb +31 -51
- data/lib/chef/provider/group/dscl.rb +13 -53
- data/lib/chef/provider/group/gpasswd.rb +19 -14
- data/lib/chef/provider/group/groupadd.rb +1 -41
- data/lib/chef/provider/group/groupmod.rb +36 -46
- data/lib/chef/provider/group/pw.rb +16 -59
- data/lib/chef/provider/group/suse.rb +13 -16
- data/lib/chef/provider/group/usermod.rb +18 -40
- data/lib/chef/provider/group/windows.rb +6 -13
- data/lib/chef/provider/http_request.rb +25 -42
- data/lib/chef/provider/link.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +150 -0
- data/lib/chef/provider/package/portage.rb +4 -9
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +9 -41
- data/lib/chef/provider/package/yum.rb +12 -19
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +2 -0
- data/lib/chef/provider/remote_file.rb +21 -12
- data/lib/chef/provider/ruby_block.rb +5 -2
- data/lib/chef/provider/service.rb +15 -0
- data/lib/chef/provider/service/init.rb +9 -7
- data/lib/chef/provider/service/macosx.rb +15 -73
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +3 -3
- data/lib/chef/provider/template.rb +22 -25
- data/lib/chef/provider/template_finder.rb +61 -0
- data/lib/chef/provider/user.rb +0 -1
- data/lib/chef/provider/user/dscl.rb +175 -568
- data/lib/chef/provider/user/useradd.rb +30 -47
- data/lib/chef/providers.rb +3 -2
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +13 -154
- data/lib/chef/resource/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/lwrp_base.rb +127 -0
- data/lib/chef/resource/mount.rb +10 -11
- data/lib/chef/resource/registry_key.rb +86 -0
- data/lib/chef/resource/remote_directory.rb +6 -5
- data/lib/chef/resource/remote_file.rb +22 -31
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource_collection.rb +25 -21
- data/lib/chef/resources.rb +2 -1
- data/lib/chef/rest.rb +50 -131
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +2 -7
- data/lib/chef/role.rb +1 -97
- data/lib/chef/run_context.rb +108 -130
- data/lib/chef/run_context/cookbook_compiler.rb +280 -0
- data/lib/chef/run_list.rb +0 -2
- data/lib/chef/run_list/run_list_expansion.rb +0 -15
- data/lib/chef/run_lock.rb +90 -0
- data/lib/chef/runner.rb +28 -5
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +2 -4
- data/lib/chef/shef/ext.rb +3 -575
- data/lib/chef/{shef.rb → shell.rb} +35 -40
- data/lib/chef/shell/ext.rb +593 -0
- data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
- data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
- data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +17 -15
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/util/windows/net_group.rb +1 -5
- data/lib/chef/version.rb +3 -3
- data/lib/chef/win32/api/process.rb +0 -1
- data/lib/chef/win32/handle.rb +1 -8
- data/lib/chef/win32/registry.rb +371 -0
- data/spec/data/big_json.json +1 -2
- data/spec/data/big_json_plus_one.json +1 -2
- data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
- data/spec/data/nodes/default.rb +3 -3
- data/spec/data/nodes/test.example.com.rb +3 -3
- data/spec/data/nodes/test.rb +3 -3
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
- data/spec/data/{knife-home/.chef/plugins/knife/example_home_subcommand.rb → run_context/cookbooks/circular-dep1/recipes/default.rb} +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
- data/spec/data/{lwrp_const_scoping/resources/conflict.rb → run_context/cookbooks/circular-dep2/recipes/default.rb} +0 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
- data/spec/data/shef-config.rb +7 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +2 -2
- data/spec/functional/knife/ssh_spec.rb +5 -1
- data/spec/functional/resource/cookbook_file_spec.rb +7 -19
- data/spec/functional/resource/directory_spec.rb +4 -0
- data/spec/functional/resource/file_spec.rb +56 -22
- data/spec/functional/resource/link_spec.rb +2 -0
- data/spec/functional/resource/registry_spec.rb +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +142 -36
- data/spec/functional/resource/remote_file_spec.rb +18 -0
- data/spec/functional/resource/template_spec.rb +23 -2
- data/spec/functional/run_lock_spec.rb +106 -0
- data/spec/functional/shell_spec.rb +100 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/spec_helper.rb +5 -29
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +0 -2
- data/spec/support/platform_helpers.rb +8 -15
- data/spec/support/shared/functional/directory_resource.rb +84 -22
- data/spec/support/shared/functional/file_resource.rb +169 -71
- data/spec/support/shared/functional/securable_resource.rb +143 -119
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
- data/spec/support/shared/unit/file_system_support.rb +110 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- data/spec/unit/api_client/registration_spec.rb +175 -0
- data/spec/unit/api_client_spec.rb +78 -156
- data/spec/unit/application/apply.rb +84 -0
- data/spec/unit/application/client_spec.rb +1 -37
- data/spec/unit/application/knife_spec.rb +5 -0
- data/spec/unit/application_spec.rb +57 -2
- data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
- data/spec/unit/chef_fs/diff_spec.rb +328 -0
- data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
- data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
- data/spec/unit/chef_fs/file_system_spec.rb +136 -0
- data/spec/unit/client_spec.rb +124 -33
- data/spec/unit/config_spec.rb +46 -13
- data/spec/unit/cookbook/synchronizer_spec.rb +1 -49
- data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
- data/spec/unit/cookbook_loader_spec.rb +153 -91
- data/spec/unit/cookbook_manifest_spec.rb +81 -81
- data/spec/unit/cookbook_spec.rb +3 -20
- data/spec/unit/cookbook_version_spec.rb +23 -122
- data/spec/unit/daemon_spec.rb +3 -24
- data/spec/unit/data_bag_spec.rb +6 -4
- data/spec/unit/digester_spec.rb +50 -0
- data/spec/unit/dsl/data_query_spec.rb +66 -0
- data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
- data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +50 -105
- data/spec/unit/environment_spec.rb +0 -130
- data/spec/unit/exceptions_spec.rb +2 -3
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -3
- data/spec/unit/json_compat_spec.rb +15 -7
- data/spec/unit/knife/bootstrap_spec.rb +2 -0
- data/spec/unit/knife/configure_spec.rb +20 -14
- data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
- data/spec/unit/knife/cookbook_test_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +43 -8
- data/spec/unit/knife/core/bootstrap_context_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +156 -125
- data/spec/unit/knife/data_bag_create_spec.rb +9 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
- data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
- data/spec/unit/knife/data_bag_show_spec.rb +11 -4
- data/spec/unit/knife/index_rebuild_spec.rb +96 -33
- data/spec/unit/knife/knife_help.rb +7 -7
- data/spec/unit/knife/node_edit_spec.rb +6 -33
- data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife_spec.rb +53 -0
- data/spec/unit/lwrp_spec.rb +59 -42
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +101 -799
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -37
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +119 -0
- data/spec/unit/node/attribute_spec.rb +195 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +366 -370
- data/spec/unit/platform_spec.rb +9 -10
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file_spec.rb +4 -8
- data/spec/unit/provider/directory_spec.rb +96 -64
- data/spec/unit/provider/env_spec.rb +2 -2
- data/spec/unit/provider/file_spec.rb +48 -39
- data/spec/unit/provider/group/dscl_spec.rb +0 -36
- data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
- data/spec/unit/provider/group/groupadd_spec.rb +4 -3
- data/spec/unit/provider/group/groupmod_spec.rb +1 -0
- data/spec/unit/provider/group/pw_spec.rb +15 -12
- data/spec/unit/provider/group/usermod_spec.rb +6 -21
- data/spec/unit/provider/group/windows_spec.rb +8 -0
- data/spec/unit/provider/group_spec.rb +6 -28
- data/spec/unit/provider/http_request_spec.rb +28 -69
- data/spec/unit/provider/ifconfig_spec.rb +2 -2
- data/spec/unit/provider/ohai_spec.rb +4 -4
- data/spec/unit/provider/package/apt_spec.rb +0 -1
- data/spec/unit/provider/package/ips_spec.rb +0 -1
- data/spec/unit/provider/package/portage_spec.rb +0 -44
- data/spec/unit/provider/package/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -44
- data/spec/unit/provider/package/yum_spec.rb +39 -36
- data/spec/unit/provider/package_spec.rb +7 -5
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -3
- data/spec/unit/provider/remote_file_spec.rb +36 -0
- data/spec/unit/provider/route_spec.rb +4 -3
- data/spec/unit/provider/ruby_block_spec.rb +8 -0
- data/spec/unit/provider/service/arch_service_spec.rb +5 -5
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
- data/spec/unit/provider/service/init_service_spec.rb +27 -4
- data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
- data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +11 -66
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/simple_service_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_service_spec.rb +9 -9
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template_spec.rb +35 -11
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/useradd_spec.rb +1 -22
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +374 -0
- data/spec/unit/resource/mount_spec.rb +0 -11
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +21 -23
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/service_spec.rb +11 -0
- data/spec/unit/resource_spec.rb +4 -19
- data/spec/unit/rest/auth_credentials_spec.rb +2 -19
- data/spec/unit/rest_spec.rb +130 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
- data/spec/unit/run_context_spec.rb +18 -4
- data/spec/unit/run_list_spec.rb +0 -209
- data/spec/unit/run_lock_spec.rb +37 -0
- data/spec/unit/runner_spec.rb +101 -2
- data/spec/unit/scan_access_control_spec.rb +4 -4
- data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
- data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
- data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +14 -69
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- metadata +275 -234
- checksums.yaml +0 -15
- data/README.rdoc +0 -177
- data/distro/common/html/knife-recipe.1.html +0 -92
- data/lib/chef/certificate.rb +0 -161
- data/lib/chef/checksum.rb +0 -167
- data/lib/chef/checksum_cache.rb +0 -190
- data/lib/chef/cookbook_version_selector.rb +0 -168
- data/lib/chef/couchdb.rb +0 -246
- data/lib/chef/index_queue/amqp_client.rb +0 -116
- data/lib/chef/index_queue/consumer.rb +0 -76
- data/lib/chef/index_queue/indexable.rb +0 -109
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
- data/lib/chef/monkey_patches/moneta.rb +0 -50
- data/lib/chef/monkey_patches/uri.rb +0 -70
- data/lib/chef/openid_registration.rb +0 -187
- data/lib/chef/provider/user/solaris.rb +0 -90
- data/lib/chef/solr_query.rb +0 -187
- data/lib/chef/solr_query/lucene.treetop +0 -150
- data/lib/chef/solr_query/lucene_nodes.rb +0 -285
- data/lib/chef/solr_query/query_transform.rb +0 -65
- data/lib/chef/solr_query/solr_http_request.rb +0 -132
- data/lib/chef/webui_user.rb +0 -231
- data/spec/data/cookbooks/openldap/files/default/.dotfile +0 -1
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +0 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +0 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +0 -1
- data/spec/data/mac_users/10.7-8.plist.xml +0 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
- data/spec/data/mac_users/10.7.plist.xml +0 -559
- data/spec/data/mac_users/10.7.shadow.xml +0 -11
- data/spec/data/mac_users/10.8.plist.xml +0 -559
- data/spec/data/mac_users/10.8.shadow.xml +0 -21
- data/spec/data/mac_users/10.9.plist.xml +0 -560
- data/spec/data/mac_users/10.9.shadow.xml +0 -21
- data/spec/functional/resource/base.rb +0 -40
- data/spec/functional/resource/group_spec.rb +0 -343
- data/spec/functional/resource/user/dscl_spec.rb +0 -199
- data/spec/unit/certificate_spec.rb +0 -76
- data/spec/unit/checksum_cache_spec.rb +0 -209
- data/spec/unit/checksum_spec.rb +0 -94
- data/spec/unit/couchdb_spec.rb +0 -274
- data/spec/unit/index_queue_spec.rb +0 -391
- data/spec/unit/mixin/language_spec.rb +0 -305
- data/spec/unit/openid_registration_spec.rb +0 -153
- data/spec/unit/provider/user/solaris_spec.rb +0 -414
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
- data/spec/unit/solr_query/query_transform_spec.rb +0 -454
- data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
- data/spec/unit/solr_query_spec.rb +0 -203
- data/spec/unit/webui_user_spec.rb +0 -238
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
require 'chef/mixin/convert_to_class_name'
|
|
20
20
|
require 'chef/mixin/language'
|
|
21
21
|
|
|
22
|
-
module
|
|
22
|
+
module Shell
|
|
23
23
|
class ModelWrapper
|
|
24
24
|
|
|
25
25
|
include Chef::Mixin::ConvertToClassName
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
#
|
|
18
18
|
|
|
19
|
-
module
|
|
20
|
-
class
|
|
19
|
+
module Shell
|
|
20
|
+
class ShellREST < Chef::REST
|
|
21
21
|
|
|
22
22
|
alias :get :get_rest
|
|
23
23
|
alias :put :put_rest
|
|
@@ -29,8 +29,8 @@ require 'chef/formatters/base'
|
|
|
29
29
|
require 'chef/formatters/doc'
|
|
30
30
|
require 'chef/formatters/minimal'
|
|
31
31
|
|
|
32
|
-
module
|
|
33
|
-
class
|
|
32
|
+
module Shell
|
|
33
|
+
class ShellSession
|
|
34
34
|
include Singleton
|
|
35
35
|
|
|
36
36
|
def self.session_type(type=nil)
|
|
@@ -55,11 +55,11 @@ module Shef
|
|
|
55
55
|
rebuild_node
|
|
56
56
|
@node = client.node
|
|
57
57
|
shorten_node_inspect
|
|
58
|
-
|
|
58
|
+
Shell::Extensions.extend_context_node(@node)
|
|
59
59
|
rebuild_context
|
|
60
60
|
node.consume_attributes(node_attributes) if node_attributes
|
|
61
61
|
@recipe = Chef::Recipe.new(nil, nil, run_context)
|
|
62
|
-
|
|
62
|
+
Shell::Extensions.extend_context_recipe(@recipe)
|
|
63
63
|
@node_built = true
|
|
64
64
|
end
|
|
65
65
|
end
|
|
@@ -86,7 +86,7 @@ module Shef
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def save_node
|
|
89
|
-
raise "Not Supported! #{self.class.name} doesn't support #save_node, maybe you need to run
|
|
89
|
+
raise "Not Supported! #{self.class.name} doesn't support #save_node, maybe you need to run chef-shell in client mode?"
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
def rebuild_context
|
|
@@ -137,7 +137,7 @@ module Shef
|
|
|
137
137
|
|
|
138
138
|
end
|
|
139
139
|
|
|
140
|
-
class StandAloneSession <
|
|
140
|
+
class StandAloneSession < ShellSession
|
|
141
141
|
|
|
142
142
|
session_type :standalone
|
|
143
143
|
|
|
@@ -151,7 +151,7 @@ module Shef
|
|
|
151
151
|
|
|
152
152
|
def rebuild_node
|
|
153
153
|
Chef::Config[:solo] = true
|
|
154
|
-
@client = Chef::Client.new
|
|
154
|
+
@client = Chef::Client.new
|
|
155
155
|
@client.run_ohai
|
|
156
156
|
@client.load_node
|
|
157
157
|
@client.build_node
|
|
@@ -159,7 +159,7 @@ module Shef
|
|
|
159
159
|
|
|
160
160
|
end
|
|
161
161
|
|
|
162
|
-
class SoloSession <
|
|
162
|
+
class SoloSession < ShellSession
|
|
163
163
|
|
|
164
164
|
session_type :solo
|
|
165
165
|
|
|
@@ -170,8 +170,10 @@ module Shef
|
|
|
170
170
|
def rebuild_context
|
|
171
171
|
@run_status = Chef::RunStatus.new(@node, @events)
|
|
172
172
|
Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, Chef::Config[:cookbook_path]) }
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
cl = Chef::CookbookLoader.new(Chef::Config[:cookbook_path])
|
|
174
|
+
cl.load_cookbooks
|
|
175
|
+
cookbook_collection = Chef::CookbookCollection.new(cl)
|
|
176
|
+
@run_context = Chef::RunContext.new(node, cookbook_collection, @events)
|
|
175
177
|
@run_context.load(Chef::RunList::RunListExpansionFromDisk.new("_default", []))
|
|
176
178
|
@run_status.run_context = run_context
|
|
177
179
|
end
|
|
@@ -181,7 +183,7 @@ module Shef
|
|
|
181
183
|
def rebuild_node
|
|
182
184
|
# Tell the client we're chef solo so it won't try to contact the server
|
|
183
185
|
Chef::Config[:solo] = true
|
|
184
|
-
@client = Chef::Client.new
|
|
186
|
+
@client = Chef::Client.new
|
|
185
187
|
@client.run_ohai
|
|
186
188
|
@client.load_node
|
|
187
189
|
@client.build_node
|
|
@@ -202,8 +204,8 @@ module Shef
|
|
|
202
204
|
Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::RemoteFileVendor.new(manifest, Chef::REST.new(Chef::Config[:server_url])) }
|
|
203
205
|
cookbook_hash = @client.sync_cookbooks
|
|
204
206
|
cookbook_collection = Chef::CookbookCollection.new(cookbook_hash)
|
|
205
|
-
@run_context = Chef::RunContext.new(node, cookbook_collection, @events)
|
|
206
|
-
@run_context.load(
|
|
207
|
+
@run_context = Chef::RunContext.new(node, cookbook_collection, @events)
|
|
208
|
+
@run_context.load(Chef::RunList::RunListExpansionFromAPI.new("_default", []))
|
|
207
209
|
@run_status.run_context = run_context
|
|
208
210
|
end
|
|
209
211
|
|
|
@@ -212,7 +214,7 @@ module Shef
|
|
|
212
214
|
def rebuild_node
|
|
213
215
|
# Make sure the client knows this is not chef solo
|
|
214
216
|
Chef::Config[:solo] = false
|
|
215
|
-
@client = Chef::Client.new
|
|
217
|
+
@client = Chef::Client.new
|
|
216
218
|
@client.run_ohai
|
|
217
219
|
@client.register
|
|
218
220
|
@client.load_node
|
|
@@ -277,7 +279,7 @@ module Shef
|
|
|
277
279
|
puts
|
|
278
280
|
Chef::Config[:doppelganger] = false
|
|
279
281
|
@node_built = false
|
|
280
|
-
|
|
282
|
+
Shell.session
|
|
281
283
|
end
|
|
282
284
|
|
|
283
285
|
def rebuild_node
|
data/lib/chef/shell_out.rb
CHANGED
|
@@ -2,5 +2,12 @@ require 'mixlib/shellout'
|
|
|
2
2
|
|
|
3
3
|
class Chef
|
|
4
4
|
class ShellOut < Mixlib::ShellOut
|
|
5
|
+
|
|
6
|
+
def initialize(*args)
|
|
7
|
+
Chef::Log.warn("Chef::ShellOut is deprecated, please use Mixlib::ShellOut")
|
|
8
|
+
called_from = caller[0..3].inject("Called from:\n") {|msg, trace_line| msg << " #{trace_line}\n" }
|
|
9
|
+
Chef::Log.warn(called_from)
|
|
10
|
+
super
|
|
11
|
+
end
|
|
5
12
|
end
|
|
6
13
|
end
|
|
@@ -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
|
data/lib/chef/version.rb
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
8
8
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
9
|
+
#
|
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
11
|
+
#
|
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
class Chef
|
|
19
19
|
CHEF_ROOT = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
|
20
|
-
VERSION = '
|
|
20
|
+
VERSION = '11.0.0.beta.0'
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# NOTE: the Chef::Version class is defined in version_class.rb
|
|
@@ -33,7 +33,6 @@ class Chef
|
|
|
33
33
|
safe_attach_function :GetCurrentProcess, [], :HANDLE
|
|
34
34
|
safe_attach_function :GetProcessHandleCount, [ :HANDLE, :LPDWORD ], :BOOL
|
|
35
35
|
safe_attach_function :GetProcessId, [ :HANDLE ], :DWORD
|
|
36
|
-
safe_attach_function :CloseHandle, [ :HANDLE ], :BOOL
|
|
37
36
|
|
|
38
37
|
end
|
|
39
38
|
end
|
data/lib/chef/win32/handle.rb
CHANGED
|
@@ -26,10 +26,6 @@ class Chef
|
|
|
26
26
|
class Handle
|
|
27
27
|
extend Chef::ReservedNames::Win32::API::Process
|
|
28
28
|
|
|
29
|
-
# See http://msdn.microsoft.com/en-us/library/windows/desktop/ms683179(v=vs.85).aspx
|
|
30
|
-
# The handle value returned by the GetCurrentProcess function is the pseudo handle (HANDLE)-1 (which is 0xFFFFFFFF)
|
|
31
|
-
CURRENT_PROCESS_HANDLE = 4294967295
|
|
32
|
-
|
|
33
29
|
def initialize(handle)
|
|
34
30
|
@handle = handle
|
|
35
31
|
ObjectSpace.define_finalizer(self, Handle.close_handle_finalizer(handle))
|
|
@@ -38,10 +34,7 @@ class Chef
|
|
|
38
34
|
attr_reader :handle
|
|
39
35
|
|
|
40
36
|
def self.close_handle_finalizer(handle)
|
|
41
|
-
|
|
42
|
-
# to close the pseudo handle returned by the GetCurrentProcess function. The docs also say that it doesn't hurt to call
|
|
43
|
-
# CloseHandle on it. However, doing so from inside of Ruby always seems to produce an invalid handle error.
|
|
44
|
-
proc { close_handle(handle) unless handle == CURRENT_PROCESS_HANDLE }
|
|
37
|
+
proc { close_handle(handle) }
|
|
45
38
|
end
|
|
46
39
|
|
|
47
40
|
def self.close_handle(handle)
|
|
@@ -0,0 +1,371 @@
|
|
|
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
|
+
end
|
|
25
|
+
|
|
26
|
+
class Chef
|
|
27
|
+
class Win32
|
|
28
|
+
class Registry
|
|
29
|
+
|
|
30
|
+
attr_accessor :run_context
|
|
31
|
+
attr_accessor :architecture
|
|
32
|
+
|
|
33
|
+
def initialize(run_context=nil, user_architecture=:machine)
|
|
34
|
+
@run_context = run_context
|
|
35
|
+
self.architecture = user_architecture
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def architecture=(user_architecture)
|
|
39
|
+
@architecture = user_architecture.to_sym
|
|
40
|
+
assert_architecture!
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def get_values(key_path)
|
|
44
|
+
hive, key = get_hive_and_key(key_path)
|
|
45
|
+
key_exists!(key_path)
|
|
46
|
+
values = hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
|
47
|
+
reg.map { |name, type, data| {:name=>name, :type=>get_name_from_type(type), :data=>data} }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def set_value(key_path, value)
|
|
52
|
+
Chef::Log.debug("Updating value #{value[:name]} in registry key #{key_path} with type #{value[:type]} and data #{value[:data]}")
|
|
53
|
+
key_exists!(key_path)
|
|
54
|
+
hive, key = get_hive_and_key(key_path)
|
|
55
|
+
if value_exists?(key_path, value)
|
|
56
|
+
if data_exists?(key_path, value)
|
|
57
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} already had those values, not updated")
|
|
58
|
+
return false
|
|
59
|
+
else
|
|
60
|
+
hive.open(key, ::Win32::Registry::KEY_SET_VALUE | ::Win32::Registry::KEY_QUERY_VALUE | registry_system_architecture) do |reg|
|
|
61
|
+
reg.write(value[:name], get_type_from_name(value[:type]), value[:data])
|
|
62
|
+
end
|
|
63
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} updated")
|
|
64
|
+
end
|
|
65
|
+
else
|
|
66
|
+
hive.open(key, ::Win32::Registry::KEY_SET_VALUE | ::Win32::Registry::KEY_QUERY_VALUE | registry_system_architecture) do |reg|
|
|
67
|
+
reg.write(value[:name], get_type_from_name(value[:type]), value[:data])
|
|
68
|
+
end
|
|
69
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} created")
|
|
70
|
+
end
|
|
71
|
+
true
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def delete_value(key_path, value)
|
|
75
|
+
Chef::Log.debug("Deleting value #{value[:name]} from registry key #{key_path}")
|
|
76
|
+
if value_exists?(key_path, value)
|
|
77
|
+
begin
|
|
78
|
+
hive, key = get_hive_and_key(key_path)
|
|
79
|
+
rescue Chef::Exceptions::Win32RegKeyMissing
|
|
80
|
+
return true
|
|
81
|
+
end
|
|
82
|
+
hive.open(key, ::Win32::Registry::KEY_SET_VALUE | registry_system_architecture) do |reg|
|
|
83
|
+
reg.delete_value(value[:name])
|
|
84
|
+
Chef::Log.debug("Deleted value #{value[:name]} from registry key #{key_path}")
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
Chef::Log.debug("Value #{value[:name]} in registry key #{key_path} does not exist, not updated")
|
|
88
|
+
end
|
|
89
|
+
true
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def create_key(key_path, recursive)
|
|
93
|
+
Chef::Log.debug("Creating registry key #{key_path}")
|
|
94
|
+
if keys_missing?(key_path)
|
|
95
|
+
if recursive == true
|
|
96
|
+
Chef::Log.debug("Registry key #{key_path} has missing subkeys, and recursive specified, creating them....")
|
|
97
|
+
create_missing(key_path)
|
|
98
|
+
else
|
|
99
|
+
raise Chef::Exceptions::Win32RegNoRecursive, "Registry key #{key_path} has missing subkeys, and recursive not specified"
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
if key_exists?(key_path)
|
|
103
|
+
Chef::Log.debug("Registry key #{key_path} already exists, doing nothing")
|
|
104
|
+
else
|
|
105
|
+
hive, key = get_hive_and_key(key_path)
|
|
106
|
+
hive.create(key, ::Win32::Registry::KEY_WRITE | registry_system_architecture)
|
|
107
|
+
Chef::Log.debug("Registry key #{key_path} created")
|
|
108
|
+
end
|
|
109
|
+
true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def delete_key(key_path, recursive)
|
|
113
|
+
Chef::Log.debug("Deleting registry key #{key_path}")
|
|
114
|
+
unless key_exists?(key_path)
|
|
115
|
+
Chef::Log.debug("Registry key #{key_path}, does not exist, not deleting")
|
|
116
|
+
return true
|
|
117
|
+
end
|
|
118
|
+
hive, key = get_hive_and_key(key_path)
|
|
119
|
+
key_parent = key.split("\\")
|
|
120
|
+
key_to_delete = key_parent.pop
|
|
121
|
+
key_parent = key_parent.join("\\")
|
|
122
|
+
if has_subkeys?(key_path)
|
|
123
|
+
if recursive == true
|
|
124
|
+
hive.open(key_parent, ::Win32::Registry::KEY_WRITE | registry_system_architecture) do |reg|
|
|
125
|
+
Chef::Log.debug("Deleting registry key #{key_path} recursively")
|
|
126
|
+
reg.delete_key(key_to_delete,recursive)
|
|
127
|
+
end
|
|
128
|
+
else
|
|
129
|
+
raise Chef::Exceptions::Win32RegNoRecursive, "Registry key #{key_path} has subkeys, and recursive not specified"
|
|
130
|
+
end
|
|
131
|
+
else
|
|
132
|
+
hive.open(key_parent, ::Win32::Registry::KEY_WRITE | registry_system_architecture) do |reg|
|
|
133
|
+
Chef::Log.debug("Deleting registry key #{key_path}")
|
|
134
|
+
reg.delete_key(key_to_delete)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
true
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def key_exists?(key_path)
|
|
141
|
+
hive, key = get_hive_and_key(key_path)
|
|
142
|
+
begin
|
|
143
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |current_key|
|
|
144
|
+
return true
|
|
145
|
+
end
|
|
146
|
+
rescue ::Win32::Registry::Error => e
|
|
147
|
+
return false
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def key_exists!(key_path)
|
|
152
|
+
unless key_exists?(key_path)
|
|
153
|
+
raise Chef::Exceptions::Win32RegKeyMissing, "Registry key #{key_path} does not exist"
|
|
154
|
+
end
|
|
155
|
+
true
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def hive_exists?(key_path)
|
|
159
|
+
begin
|
|
160
|
+
hive, key = get_hive_and_key(key_path)
|
|
161
|
+
rescue Chef::Exceptions::Win32RegHiveMissing => e
|
|
162
|
+
return false
|
|
163
|
+
end
|
|
164
|
+
return true
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def has_subkeys?(key_path)
|
|
168
|
+
key_exists!(key_path)
|
|
169
|
+
hive, key = get_hive_and_key(key_path)
|
|
170
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
|
171
|
+
reg.each_key{ |key| return true }
|
|
172
|
+
end
|
|
173
|
+
return false
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def get_subkeys(key_path)
|
|
177
|
+
subkeys = []
|
|
178
|
+
key_exists!(key_path)
|
|
179
|
+
hive, key = get_hive_and_key(key_path)
|
|
180
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
|
181
|
+
reg.each_key{ |current_key| subkeys << current_key }
|
|
182
|
+
end
|
|
183
|
+
return subkeys
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# 32-bit chef clients running on 64-bit machines will default to reading the 64-bit registry
|
|
187
|
+
def registry_system_architecture
|
|
188
|
+
applied_arch = ( architecture == :machine ) ? machine_architecture : architecture
|
|
189
|
+
( applied_arch == :x86_64 ) ? 0x0100 : 0x0200
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def value_exists?(key_path, value)
|
|
193
|
+
key_exists!(key_path)
|
|
194
|
+
hive, key = get_hive_and_key(key_path)
|
|
195
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
|
196
|
+
return true if reg.any? {|val| val == value[:name] }
|
|
197
|
+
end
|
|
198
|
+
return false
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def data_exists?(key_path, value)
|
|
202
|
+
key_exists!(key_path)
|
|
203
|
+
hive, key = get_hive_and_key(key_path)
|
|
204
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
|
205
|
+
reg.each do |val_name, val_type, val_data|
|
|
206
|
+
if val_name == value[:name] &&
|
|
207
|
+
val_type == get_type_from_name(value[:type]) &&
|
|
208
|
+
val_data == value[:data]
|
|
209
|
+
return true
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
return false
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def value_exists!(key_path, value)
|
|
217
|
+
unless value_exists?(key_path, value)
|
|
218
|
+
raise Chef::Exceptions::Win32RegValueMissing, "Registry key #{key_path} has no value named #{value[:name]}"
|
|
219
|
+
end
|
|
220
|
+
true
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def data_exists!(key_path, value)
|
|
224
|
+
unless data_exists?(key_path, value)
|
|
225
|
+
raise Chef::Exceptions::Win32RegDataMissing, "Registry key #{key_path} has no value named #{value[:name]}, containing type #{value[:type]} and data #{value[:data]}"
|
|
226
|
+
end
|
|
227
|
+
true
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def type_matches?(key_path, value)
|
|
231
|
+
value_exists!(key_path, value)
|
|
232
|
+
hive, key = get_hive_and_key(key_path)
|
|
233
|
+
hive.open(key, ::Win32::Registry::KEY_READ | registry_system_architecture) do |reg|
|
|
234
|
+
reg.each do |val_name, val_type|
|
|
235
|
+
if val_name == value[:name]
|
|
236
|
+
type_new = get_type_from_name(value[:type])
|
|
237
|
+
if val_type == type_new
|
|
238
|
+
return true
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
return false
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def type_matches!(key_path, value)
|
|
247
|
+
unless type_matches?(key_path, value)
|
|
248
|
+
raise Chef::Exceptions::Win32RegTypesMismatch, "Registry key #{key_path} has a value #{value[:name]} with a type that is not #{value[:type]}"
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def get_type_from_name(val_type)
|
|
253
|
+
value = {
|
|
254
|
+
:binary => ::Win32::Registry::REG_BINARY,
|
|
255
|
+
:string => ::Win32::Registry::REG_SZ,
|
|
256
|
+
:multi_string => ::Win32::Registry::REG_MULTI_SZ,
|
|
257
|
+
:expand_string => ::Win32::Registry::REG_EXPAND_SZ,
|
|
258
|
+
:dword => ::Win32::Registry::REG_DWORD,
|
|
259
|
+
:dword_big_endian => ::Win32::Registry::REG_DWORD_BIG_ENDIAN,
|
|
260
|
+
:qword => ::Win32::Registry::REG_QWORD
|
|
261
|
+
}[val_type]
|
|
262
|
+
return value
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def keys_missing?(key_path)
|
|
266
|
+
missing_key_arr = key_path.split("\\")
|
|
267
|
+
missing_key_arr.pop
|
|
268
|
+
key = missing_key_arr.join("\\")
|
|
269
|
+
!key_exists?(key)
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def get_type_from_name(val_type)
|
|
273
|
+
_type_name_map[val_type]
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def get_name_from_type(val_class)
|
|
277
|
+
_name_type_map[val_class]
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
private
|
|
281
|
+
|
|
282
|
+
def node
|
|
283
|
+
run_context && run_context.node
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def machine_architecture
|
|
287
|
+
node[:kernel][:machine].to_sym
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def assert_architecture!
|
|
291
|
+
if machine_architecture == :i386 && architecture == :x86_64
|
|
292
|
+
raise Chef::Exceptions::Win32RegArchitectureIncorrect, "cannot access 64-bit registry on a 32-bit windows instance"
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def get_hive_and_key(path)
|
|
297
|
+
reg_path = path.split("\\")
|
|
298
|
+
hive_name = reg_path.shift
|
|
299
|
+
key = reg_path.join("\\")
|
|
300
|
+
|
|
301
|
+
hive = {
|
|
302
|
+
"HKLM" => ::Win32::Registry::HKEY_LOCAL_MACHINE,
|
|
303
|
+
"HKEY_LOCAL_MACHINE" => ::Win32::Registry::HKEY_LOCAL_MACHINE,
|
|
304
|
+
"HKU" => ::Win32::Registry::HKEY_USERS,
|
|
305
|
+
"HKEY_USERS" => ::Win32::Registry::HKEY_USERS,
|
|
306
|
+
"HKCU" => ::Win32::Registry::HKEY_CURRENT_USER,
|
|
307
|
+
"HKEY_CURRENT_USER" => ::Win32::Registry::HKEY_CURRENT_USER,
|
|
308
|
+
"HKCR" => ::Win32::Registry::HKEY_CLASSES_ROOT,
|
|
309
|
+
"HKEY_CLASSES_ROOT" => ::Win32::Registry::HKEY_CLASSES_ROOT,
|
|
310
|
+
"HKCC" => ::Win32::Registry::HKEY_CURRENT_CONFIG,
|
|
311
|
+
"HKEY_CURRENT_CONFIG" => ::Win32::Registry::HKEY_CURRENT_CONFIG,
|
|
312
|
+
}[hive_name]
|
|
313
|
+
|
|
314
|
+
raise Chef::Exceptions::Win32RegHiveMissing, "Registry Hive #{hive_name} does not exist" unless hive
|
|
315
|
+
|
|
316
|
+
return hive, key
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
def _type_name_map
|
|
320
|
+
{
|
|
321
|
+
:binary => ::Win32::Registry::REG_BINARY,
|
|
322
|
+
:string => ::Win32::Registry::REG_SZ,
|
|
323
|
+
:multi_string => ::Win32::Registry::REG_MULTI_SZ,
|
|
324
|
+
:expand_string => ::Win32::Registry::REG_EXPAND_SZ,
|
|
325
|
+
:dword => ::Win32::Registry::REG_DWORD,
|
|
326
|
+
:dword_big_endian => ::Win32::Registry::REG_DWORD_BIG_ENDIAN,
|
|
327
|
+
:qword => ::Win32::Registry::REG_QWORD
|
|
328
|
+
}
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
def _name_type_map
|
|
332
|
+
@_name_type_map ||= _type_name_map.invert
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def get_type_from_num(val_type)
|
|
336
|
+
value = {
|
|
337
|
+
3 => ::Win32::Registry::REG_BINARY,
|
|
338
|
+
1 => ::Win32::Registry::REG_SZ,
|
|
339
|
+
7 => ::Win32::Registry::REG_MULTI_SZ,
|
|
340
|
+
2 => ::Win32::Registry::REG_EXPAND_SZ,
|
|
341
|
+
4 => ::Win32::Registry::REG_DWORD,
|
|
342
|
+
5 => ::Win32::Registry::REG_DWORD_BIG_ENDIAN,
|
|
343
|
+
11 => ::Win32::Registry::REG_QWORD
|
|
344
|
+
}[val_type]
|
|
345
|
+
return value
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
def create_missing(key_path)
|
|
349
|
+
missing_key_arr = key_path.split("\\")
|
|
350
|
+
hivename = missing_key_arr.shift
|
|
351
|
+
missing_key_arr.pop
|
|
352
|
+
existing_key_path = hivename
|
|
353
|
+
hive, key = get_hive_and_key(key_path)
|
|
354
|
+
missing_key_arr.each do |intermediate_key|
|
|
355
|
+
existing_key_path = existing_key_path << "\\" << intermediate_key
|
|
356
|
+
if !key_exists?(existing_key_path)
|
|
357
|
+
Chef::Log.debug("Recursively creating registry key #{existing_key_path}")
|
|
358
|
+
hive.create(get_key(existing_key_path), ::Win32::Registry::KEY_ALL_ACCESS | registry_system_architecture)
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def get_key(path)
|
|
364
|
+
reg_path = path.split("\\")
|
|
365
|
+
hive_name = reg_path.shift
|
|
366
|
+
key = reg_path.join("\\")
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
end
|