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
|
@@ -58,19 +58,14 @@ class Chef
|
|
|
58
58
|
|
|
59
59
|
def parse_emerge(package, txt)
|
|
60
60
|
availables = {}
|
|
61
|
+
package_without_category = package.split("/").last
|
|
61
62
|
found_package_name = nil
|
|
62
63
|
|
|
63
64
|
txt.each_line do |line|
|
|
64
65
|
if line =~ /\*\s+#{PACKAGE_NAME_PATTERN}/
|
|
65
|
-
found_package_name = $&.
|
|
66
|
-
if
|
|
67
|
-
|
|
68
|
-
availables[found_package_name] = nil
|
|
69
|
-
end
|
|
70
|
-
else #the category is not specified
|
|
71
|
-
if found_package_name.split("/").last == package
|
|
72
|
-
availables[found_package_name] = nil
|
|
73
|
-
end
|
|
66
|
+
found_package_name = $&.strip
|
|
67
|
+
if found_package_name == package || found_package_name.split("/").last == package_without_category
|
|
68
|
+
availables[found_package_name] = nil
|
|
74
69
|
end
|
|
75
70
|
end
|
|
76
71
|
|
|
@@ -60,7 +60,7 @@ class Chef
|
|
|
60
60
|
status = popen4("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}") do |pid, stdin, stdout, stderr|
|
|
61
61
|
stdout.each do |line|
|
|
62
62
|
case line
|
|
63
|
-
when
|
|
63
|
+
when /([\w\d_.-]+)\s([\w\d_.-]+)/
|
|
64
64
|
@current_resource.package_name($1)
|
|
65
65
|
@new_resource.version($2)
|
|
66
66
|
end
|
|
@@ -77,7 +77,7 @@ class Chef
|
|
|
77
77
|
@rpm_status = popen4("rpm -q --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@current_resource.package_name}") do |pid, stdin, stdout, stderr|
|
|
78
78
|
stdout.each do |line|
|
|
79
79
|
case line
|
|
80
|
-
when
|
|
80
|
+
when /([\w\d_.-]+)\s([\w\d_.-]+)/
|
|
81
81
|
Chef::Log.debug("#{@new_resource} current version is #{$2}")
|
|
82
82
|
@current_resource.version($2)
|
|
83
83
|
end
|
|
@@ -31,14 +31,7 @@ require 'rubygems/version'
|
|
|
31
31
|
require 'rubygems/dependency'
|
|
32
32
|
require 'rubygems/spec_fetcher'
|
|
33
33
|
require 'rubygems/platform'
|
|
34
|
-
|
|
35
|
-
# Compatibility note: Rubygems 2.0 removes rubygems/format in favor of
|
|
36
|
-
# rubygems/package.
|
|
37
|
-
begin
|
|
38
|
-
require 'rubygems/format'
|
|
39
|
-
rescue LoadError
|
|
40
|
-
require 'rubygems/package'
|
|
41
|
-
end
|
|
34
|
+
require 'rubygems/format'
|
|
42
35
|
require 'rubygems/dependency_installer'
|
|
43
36
|
require 'rubygems/uninstaller'
|
|
44
37
|
require 'rubygems/specification'
|
|
@@ -112,22 +105,6 @@ class Chef
|
|
|
112
105
|
Gem.sources = original_sources
|
|
113
106
|
end
|
|
114
107
|
|
|
115
|
-
##
|
|
116
|
-
# Extracts the gemspec from a (on-disk) gem package.
|
|
117
|
-
# === Returns
|
|
118
|
-
# Gem::Specification
|
|
119
|
-
#
|
|
120
|
-
#--
|
|
121
|
-
# Compatibility note: Rubygems 1.x uses Gem::Format, 2.0 moved this
|
|
122
|
-
# code into Gem::Package.
|
|
123
|
-
def spec_from_file(file)
|
|
124
|
-
if defined?(Gem::Format) and Gem::Package.respond_to?(:open)
|
|
125
|
-
Gem::Format.from_file_by_path(file).spec
|
|
126
|
-
else
|
|
127
|
-
Gem::Package.new(file).spec
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
108
|
##
|
|
132
109
|
# Determines the candidate version for a gem from a .gem file on disk
|
|
133
110
|
# and checks if it matches the version contraints in +gem_dependency+
|
|
@@ -137,7 +114,7 @@ class Chef
|
|
|
137
114
|
# nil returns nil if the gem on disk doesn't match the
|
|
138
115
|
# version constraints for +gem_dependency+
|
|
139
116
|
def candidate_version_from_file(gem_dependency, source)
|
|
140
|
-
spec =
|
|
117
|
+
spec = Gem::Format.from_file_by_path(source).spec
|
|
141
118
|
if spec.satisfies_requirement?(gem_dependency)
|
|
142
119
|
logger.debug {"#{@new_resource} found candidate gem version #{spec.version} from local gem package #{source}"}
|
|
143
120
|
spec.version
|
|
@@ -165,26 +142,17 @@ class Chef
|
|
|
165
142
|
# Find the newest gem version available from Gem.sources that satisfies
|
|
166
143
|
# the constraints of +gem_dependency+
|
|
167
144
|
def find_newest_remote_version(gem_dependency, *sources)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
# always the one it considers best.
|
|
172
|
-
spec_with_source = available_gems.last
|
|
173
|
-
spec_with_source && spec_with_source
|
|
174
|
-
else
|
|
175
|
-
# Rubygems 2.0 returns a Gem::Available set, which is a
|
|
176
|
-
# collection of AvailableSet::Tuple structs
|
|
177
|
-
available_gems.pick_best!
|
|
178
|
-
best_gem = available_gems.set.first
|
|
179
|
-
best_gem && [best_gem.spec, best_gem.source]
|
|
180
|
-
end
|
|
145
|
+
# DependencyInstaller sorts the results such that the last one is
|
|
146
|
+
# always the one it considers best.
|
|
147
|
+
spec_with_source = dependency_installer.find_gems_with_sources(gem_dependency).last
|
|
181
148
|
|
|
182
|
-
|
|
149
|
+
spec = spec_with_source && spec_with_source[0]
|
|
150
|
+
version = spec && spec_with_source[0].version
|
|
183
151
|
if version
|
|
184
|
-
logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{
|
|
152
|
+
logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{spec_with_source[1]}" }
|
|
185
153
|
version
|
|
186
154
|
else
|
|
187
|
-
source_list = sources.compact.empty? ? "[#{Gem.sources.
|
|
155
|
+
source_list = sources.compact.empty? ? "[#{Gem.sources.join(', ')}]" : "[#{sources.join(', ')}]"
|
|
188
156
|
logger.warn { "#{@new_resource} failed to find gem #{gem_dependency} from #{source_list}" }
|
|
189
157
|
nil
|
|
190
158
|
end
|
|
@@ -16,10 +16,8 @@
|
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
#
|
|
18
18
|
|
|
19
|
-
require 'chef/config'
|
|
20
19
|
require 'chef/provider/package'
|
|
21
20
|
require 'chef/mixin/command'
|
|
22
|
-
require 'chef/mixin/shell_out'
|
|
23
21
|
require 'chef/resource/package'
|
|
24
22
|
require 'singleton'
|
|
25
23
|
require 'chef/mixin/get_source_from_package'
|
|
@@ -647,7 +645,6 @@ class Chef
|
|
|
647
645
|
# Cache for our installed and available packages, pulled in from yum-dump.py
|
|
648
646
|
class YumCache
|
|
649
647
|
include Chef::Mixin::Command
|
|
650
|
-
include Chef::Mixin::ShellOut
|
|
651
648
|
include Singleton
|
|
652
649
|
|
|
653
650
|
def initialize
|
|
@@ -708,11 +705,9 @@ class Chef
|
|
|
708
705
|
error = nil
|
|
709
706
|
|
|
710
707
|
helper = ::File.join(::File.dirname(__FILE__), 'yum-dump.py')
|
|
711
|
-
status = nil
|
|
712
708
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
status.stdout.each_line do |line|
|
|
709
|
+
status = popen4("/usr/bin/python #{helper}#{opts}", :waitlast => true) do |pid, stdin, stdout, stderr|
|
|
710
|
+
stdout.each do |line|
|
|
716
711
|
one_line = true
|
|
717
712
|
|
|
718
713
|
line.chomp!
|
|
@@ -759,10 +754,7 @@ class Chef
|
|
|
759
754
|
@rpmdb << pkg
|
|
760
755
|
end
|
|
761
756
|
|
|
762
|
-
error =
|
|
763
|
-
rescue Mixlib::ShellOut::CommandTimeout => e
|
|
764
|
-
Chef::Log.error("#{helper} exceeded timeout #{Chef::Config[:yum_timeout]}")
|
|
765
|
-
raise(e)
|
|
757
|
+
error = stderr.readlines
|
|
766
758
|
end
|
|
767
759
|
|
|
768
760
|
if status.exitstatus != 0
|
|
@@ -947,7 +939,6 @@ class Chef
|
|
|
947
939
|
end # YumCache
|
|
948
940
|
|
|
949
941
|
include Chef::Mixin::GetSourceFromPackage
|
|
950
|
-
include Chef::Mixin::ShellOut
|
|
951
942
|
|
|
952
943
|
def initialize(new_resource, run_context)
|
|
953
944
|
super
|
|
@@ -990,7 +981,7 @@ class Chef
|
|
|
990
981
|
end
|
|
991
982
|
|
|
992
983
|
def yum_command(command)
|
|
993
|
-
status, stdout, stderr = output_of_command(command, {
|
|
984
|
+
status, stdout, stderr = output_of_command(command, {})
|
|
994
985
|
|
|
995
986
|
# This is fun: rpm can encounter errors in the %post/%postun scripts which aren't
|
|
996
987
|
# considered fatal - meaning the rpm is still successfully installed. These issue
|
|
@@ -1007,7 +998,7 @@ class Chef
|
|
|
1007
998
|
if l =~ %r{^error: %(post|postun)\(.*\) scriptlet failed, exit status \d+$}
|
|
1008
999
|
Chef::Log.warn("#{@new_resource} caught non-fatal scriptlet issue: \"#{l}\". Can't trust yum exit status " +
|
|
1009
1000
|
"so running install again to verify.")
|
|
1010
|
-
status, stdout, stderr = output_of_command(command, {
|
|
1001
|
+
status, stdout, stderr = output_of_command(command, {})
|
|
1011
1002
|
break
|
|
1012
1003
|
end
|
|
1013
1004
|
end
|
|
@@ -1071,11 +1062,13 @@ class Chef
|
|
|
1071
1062
|
end
|
|
1072
1063
|
|
|
1073
1064
|
Chef::Log.debug("#{@new_resource} checking rpm status")
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1065
|
+
status = popen4("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}") do |pid, stdin, stdout, stderr|
|
|
1066
|
+
stdout.each do |line|
|
|
1067
|
+
case line
|
|
1068
|
+
when /([\w\d_.-]+)\s([\w\d_.-]+)/
|
|
1069
|
+
@current_resource.package_name($1)
|
|
1070
|
+
@new_resource.version($2)
|
|
1071
|
+
end
|
|
1079
1072
|
end
|
|
1080
1073
|
end
|
|
1081
1074
|
end
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Prajakta Purohit (<prajakta@opscode.com>)
|
|
3
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
|
4
|
+
#
|
|
5
|
+
# Copyright:: 2011, 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
|
+
|
|
20
|
+
require 'chef/config'
|
|
21
|
+
require 'chef/log'
|
|
22
|
+
require 'chef/resource/file'
|
|
23
|
+
require 'chef/mixin/checksum'
|
|
24
|
+
require 'chef/provider'
|
|
25
|
+
require 'etc'
|
|
26
|
+
require 'fileutils'
|
|
27
|
+
require 'chef/scan_access_control'
|
|
28
|
+
require 'chef/mixin/shell_out'
|
|
29
|
+
require 'chef/win32/registry'
|
|
30
|
+
|
|
31
|
+
class Chef
|
|
32
|
+
|
|
33
|
+
class Provider
|
|
34
|
+
class RegistryKey < Chef::Provider
|
|
35
|
+
include Chef::Mixin::Checksum
|
|
36
|
+
include Chef::Mixin::ShellOut
|
|
37
|
+
|
|
38
|
+
def whyrun_supported?
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def running_on_windows!
|
|
43
|
+
unless Chef::Platform.windows?
|
|
44
|
+
raise Chef::Exceptions::Win32NotWindows, "Attempt to manipulate the windows registry on a non-windows node"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def load_current_resource
|
|
49
|
+
running_on_windows!
|
|
50
|
+
@current_resource ||= Chef::Resource::RegistryKey.new(@new_resource.key, run_context)
|
|
51
|
+
@current_resource.key(@new_resource.key)
|
|
52
|
+
@current_resource.architecture(@new_resource.architecture)
|
|
53
|
+
@current_resource.recursive(@new_resource.recursive)
|
|
54
|
+
if registry.key_exists?(@new_resource.key)
|
|
55
|
+
@current_resource.values(registry.get_values(@new_resource.key))
|
|
56
|
+
end
|
|
57
|
+
values_to_hash(@current_resource.values)
|
|
58
|
+
@current_resource
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def registry
|
|
62
|
+
@registry ||= Chef::Win32::Registry.new(@run_context, @new_resource.architecture)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def values_to_hash(values)
|
|
66
|
+
if values
|
|
67
|
+
@name_hash = Hash[values.map { |val| [val[:name], val] }]
|
|
68
|
+
else
|
|
69
|
+
@name_hash = {}
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def define_resource_requirements
|
|
74
|
+
requirements.assert(:create, :create_if_missing, :delete, :delete_key) do |a|
|
|
75
|
+
a.assertion{ registry.hive_exists?(@new_resource.key) }
|
|
76
|
+
a.failure_message(Chef::Exceptions::Win32RegHiveMissing, "Hive #{@new_resource.key.split("\\").shift} does not exist")
|
|
77
|
+
end
|
|
78
|
+
requirements.assert(:create) do |a|
|
|
79
|
+
a.assertion{ registry.key_exists?(@new_resource.key) }
|
|
80
|
+
a.whyrun("Key #{@new_resource.key} does not exist. Unless it would have been created before, attempt to modify its values would fail.")
|
|
81
|
+
end
|
|
82
|
+
requirements.assert(:create, :create_if_missing) do |a|
|
|
83
|
+
#If keys missing in the path and recursive == false
|
|
84
|
+
a.assertion{ !registry.keys_missing?(@current_resource.key) || @new_resource.recursive }
|
|
85
|
+
a.failure_message(Chef::Exceptions::Win32RegNoRecursive, "Intermediate keys missing but recursive is set to false")
|
|
86
|
+
a.whyrun("Intermediate keys in #{@new_resource.key} go not exist. Unless they would have been created earlier, attempt to modify them would fail.")
|
|
87
|
+
end
|
|
88
|
+
requirements.assert(:delete_key) do |a|
|
|
89
|
+
#If key to be deleted has subkeys but recurssive == false
|
|
90
|
+
a.assertion{ !registry.key_exists?(@new_resource.key) || !registry.has_subkeys?(@new_resource.key) || @new_resource.recursive }
|
|
91
|
+
a.failure_message(Chef::Exceptions::Win32RegNoRecursive, "#{@new_resource.key} has subkeys but recursive is set to false.")
|
|
92
|
+
a.whyrun("#{@current_resource.key} has subkeys, but recursive is set to false. attempt to delete would fails unless subkeys were deleted prior to this action.")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def action_create
|
|
97
|
+
unless registry.key_exists?(@current_resource.key)
|
|
98
|
+
converge_by("create key #{@new_resource.key}") do
|
|
99
|
+
registry.create_key(@new_resource.key, @new_resource.recursive)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
@new_resource.values.each do |value|
|
|
103
|
+
if @name_hash.has_key?(value[:name])
|
|
104
|
+
current_value = @name_hash[value[:name]]
|
|
105
|
+
unless current_value[:type] == value[:type] && current_value[:data] == value[:data]
|
|
106
|
+
converge_by("set value #{value}") do
|
|
107
|
+
registry.set_value(@new_resource.key, value)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
else
|
|
111
|
+
converge_by("set value #{value}") do
|
|
112
|
+
registry.set_value(@new_resource.key, value)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def action_create_if_missing
|
|
119
|
+
unless registry.key_exists?(@new_resource.key)
|
|
120
|
+
converge_by("create key #{@new_resource.key}") do
|
|
121
|
+
registry.create_key(@new_resource.key, @new_resource.recursive)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
@new_resource.values.each do |value|
|
|
125
|
+
unless @name_hash.has_key?(value[:name])
|
|
126
|
+
converge_by("create value #{value}") do
|
|
127
|
+
registry.set_value(@new_resource.key, value)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def action_delete
|
|
134
|
+
if registry.key_exists?(@new_resource.key)
|
|
135
|
+
@new_resource.values.each do |value|
|
|
136
|
+
if @name_hash.has_key?(value[:name])
|
|
137
|
+
converge_by("delete value #{value}") do
|
|
138
|
+
registry.delete_value(@new_resource.key, value)
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def action_delete_key
|
|
146
|
+
if registry.key_exists?(@new_resource.key)
|
|
147
|
+
converge_by("delete key #{@new_resource.key}") do
|
|
148
|
+
registry.delete_key(@new_resource.key, @new_resource.recursive)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
@@ -26,6 +26,8 @@ class Chef
|
|
|
26
26
|
class Provider
|
|
27
27
|
class RemoteFile < Chef::Provider::File
|
|
28
28
|
|
|
29
|
+
include Chef::Mixin::EnforceOwnershipAndPermissions
|
|
30
|
+
|
|
29
31
|
def load_current_resource
|
|
30
32
|
@current_resource = Chef::Resource::RemoteFile.new(@new_resource.name)
|
|
31
33
|
super
|
|
@@ -37,12 +39,24 @@ class Chef
|
|
|
37
39
|
if current_resource_matches_target_checksum?
|
|
38
40
|
Chef::Log.debug("#{@new_resource} checksum matches target checksum (#{@new_resource.checksum}) - not updating")
|
|
39
41
|
else
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
sources = @new_resource.source
|
|
43
|
+
source = sources.shift
|
|
44
|
+
begin
|
|
45
|
+
rest = Chef::REST.new(source, nil, nil, http_client_opts(source))
|
|
46
|
+
raw_file = rest.streaming_request(rest.create_url(source), {})
|
|
47
|
+
rescue SocketError, Errno::ECONNREFUSED, Timeout::Error, Net::HTTPFatalError => e
|
|
48
|
+
Chef::Log.debug("#{@new_resource} cannot be downloaded from #{source}")
|
|
49
|
+
if source = sources.shift
|
|
50
|
+
Chef::Log.debug("#{@new_resource} trying to download from another mirror")
|
|
51
|
+
retry
|
|
52
|
+
else
|
|
53
|
+
raise e
|
|
54
|
+
end
|
|
55
|
+
end
|
|
42
56
|
if matches_current_checksum?(raw_file)
|
|
43
57
|
Chef::Log.debug "#{@new_resource} target and source checksums are the same - not updating"
|
|
44
58
|
else
|
|
45
|
-
description = []
|
|
59
|
+
description = []
|
|
46
60
|
description << "copy file downloaded from #{@new_resource.source} into #{@new_resource.path}"
|
|
47
61
|
description << diff_current(raw_file.path)
|
|
48
62
|
converge_by(description) do
|
|
@@ -52,13 +66,14 @@ class Chef
|
|
|
52
66
|
raw_file.close!
|
|
53
67
|
end
|
|
54
68
|
# whyrun mode cleanup - the temp file will never be used,
|
|
55
|
-
# so close/unlink it here.
|
|
69
|
+
# so close/unlink it here.
|
|
56
70
|
if whyrun_mode?
|
|
57
71
|
raw_file.close!
|
|
58
72
|
end
|
|
59
73
|
end
|
|
60
74
|
end
|
|
61
75
|
set_all_access_controls
|
|
76
|
+
update_new_file_state
|
|
62
77
|
end
|
|
63
78
|
|
|
64
79
|
def current_resource_matches_target_checksum?
|
|
@@ -97,7 +112,7 @@ class Chef
|
|
|
97
112
|
end
|
|
98
113
|
end
|
|
99
114
|
|
|
100
|
-
def http_client_opts
|
|
115
|
+
def http_client_opts(source)
|
|
101
116
|
opts={}
|
|
102
117
|
# CHEF-3140
|
|
103
118
|
# 1. If it's already compressed, trying to compress it more will
|
|
@@ -107,7 +122,7 @@ class Chef
|
|
|
107
122
|
# which tricks Chef::REST into decompressing the response body. In this
|
|
108
123
|
# case you'd end up with a tar archive (no gzip) named, e.g., foo.tgz,
|
|
109
124
|
# which is not what you wanted.
|
|
110
|
-
if @new_resource.path =~ /gz$/ or
|
|
125
|
+
if @new_resource.path =~ /gz$/ or source =~ /gz$/
|
|
111
126
|
opts[:disable_gzip] = true
|
|
112
127
|
end
|
|
113
128
|
opts
|
|
@@ -121,12 +136,6 @@ class Chef
|
|
|
121
136
|
false
|
|
122
137
|
end
|
|
123
138
|
|
|
124
|
-
def managing_content?
|
|
125
|
-
return true if @new_resource.checksum
|
|
126
|
-
return true if !@new_resource.source.nil? && @action != :create_if_missing
|
|
127
|
-
false
|
|
128
|
-
end
|
|
129
|
-
|
|
130
139
|
end
|
|
131
140
|
end
|
|
132
141
|
end
|