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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Author:: Daniel DeLeo (<dan@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
class Chef
|
|
20
|
+
class Node
|
|
21
|
+
|
|
22
|
+
# == AttrArray
|
|
23
|
+
# AttrArray is identical to Array, except that it keeps a reference to the
|
|
24
|
+
# "root" (Chef::Node::Attribute) object, and will trigger a cache
|
|
25
|
+
# invalidation on that object when mutated.
|
|
26
|
+
class AttrArray < Array
|
|
27
|
+
|
|
28
|
+
MUTATOR_METHODS = [
|
|
29
|
+
:<<,
|
|
30
|
+
:[]=,
|
|
31
|
+
:clear,
|
|
32
|
+
:collect!,
|
|
33
|
+
:compact!,
|
|
34
|
+
:default=,
|
|
35
|
+
:default_proc=,
|
|
36
|
+
:delete,
|
|
37
|
+
:delete_at,
|
|
38
|
+
:delete_if,
|
|
39
|
+
:fill,
|
|
40
|
+
:flatten!,
|
|
41
|
+
:insert,
|
|
42
|
+
:keep_if,
|
|
43
|
+
:map!,
|
|
44
|
+
:merge!,
|
|
45
|
+
:pop,
|
|
46
|
+
:push,
|
|
47
|
+
:update,
|
|
48
|
+
:reject!,
|
|
49
|
+
:reverse!,
|
|
50
|
+
:replace,
|
|
51
|
+
:select!,
|
|
52
|
+
:shift,
|
|
53
|
+
:slice!,
|
|
54
|
+
:sort!,
|
|
55
|
+
:sort_by!,
|
|
56
|
+
:uniq!,
|
|
57
|
+
:unshift
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
# For all of the methods that may mutate an Array, we override them to
|
|
61
|
+
# also invalidate the cached merged_attributes on the root
|
|
62
|
+
# Node::Attribute object.
|
|
63
|
+
MUTATOR_METHODS.each do |mutator|
|
|
64
|
+
class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
|
|
65
|
+
def #{mutator}(*args, &block)
|
|
66
|
+
root.reset_cache
|
|
67
|
+
super
|
|
68
|
+
end
|
|
69
|
+
METHOD_DEFN
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
attr_reader :root
|
|
73
|
+
|
|
74
|
+
def initialize(root, data)
|
|
75
|
+
@root = root
|
|
76
|
+
super(data)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def dup
|
|
80
|
+
Array.new(map {|e| e.dup})
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# == VividMash
|
|
86
|
+
# VividMash is identical to a Mash, with a few exceptions:
|
|
87
|
+
# * It has a reference to the root Chef::Node::Attribute to which it
|
|
88
|
+
# belongs, and will trigger cache invalidation on that object when
|
|
89
|
+
# mutated.
|
|
90
|
+
# * It auto-vivifies, that is a reference to a missing element will result
|
|
91
|
+
# in the creation of a new VividMash for that key. (This only works when
|
|
92
|
+
# using the element reference method, `[]` -- other methods, such as
|
|
93
|
+
# #fetch, work as normal).
|
|
94
|
+
# * It supports a set_unless flag (via the root Attribute object) which
|
|
95
|
+
# allows `||=` style behavior (`||=` does not work with
|
|
96
|
+
# auto-vivification). This is only implemented for #[]=; methods such as
|
|
97
|
+
# #store work as normal.
|
|
98
|
+
# * attr_accessor style element set and get are supported via method_missing
|
|
99
|
+
class VividMash < Mash
|
|
100
|
+
attr_reader :root
|
|
101
|
+
|
|
102
|
+
# Methods that mutate a VividMash. Each of them is overridden so that it
|
|
103
|
+
# also invalidates the cached merged_attributes on the root Attribute
|
|
104
|
+
# object.
|
|
105
|
+
MUTATOR_METHODS = [
|
|
106
|
+
:clear,
|
|
107
|
+
:delete,
|
|
108
|
+
:delete_if,
|
|
109
|
+
:keep_if,
|
|
110
|
+
:merge!,
|
|
111
|
+
:update,
|
|
112
|
+
:reject!,
|
|
113
|
+
:replace,
|
|
114
|
+
:select!,
|
|
115
|
+
:shift
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
# For all of the mutating methods on Mash, override them so that they
|
|
119
|
+
# also invalidate the cached `merged_attributes` on the root Attribute
|
|
120
|
+
# object.
|
|
121
|
+
MUTATOR_METHODS.each do |mutator|
|
|
122
|
+
class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
|
|
123
|
+
def #{mutator}(*args, &block)
|
|
124
|
+
root.reset_cache
|
|
125
|
+
super
|
|
126
|
+
end
|
|
127
|
+
METHOD_DEFN
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def initialize(root, data={})
|
|
131
|
+
@root = root
|
|
132
|
+
super(data)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def [](key)
|
|
136
|
+
value = super
|
|
137
|
+
if !key?(key)
|
|
138
|
+
value = self.class.new(root)
|
|
139
|
+
self[key] = value
|
|
140
|
+
else
|
|
141
|
+
value
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def []=(key, value)
|
|
146
|
+
if set_unless? && key?(key)
|
|
147
|
+
self[key]
|
|
148
|
+
else
|
|
149
|
+
root.reset_cache
|
|
150
|
+
super
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
alias :attribute? :has_key?
|
|
155
|
+
|
|
156
|
+
def method_missing(symbol, *args)
|
|
157
|
+
if args.empty?
|
|
158
|
+
self[symbol]
|
|
159
|
+
elsif symbol.to_s =~ /=$/
|
|
160
|
+
key_to_set = symbol.to_s[/^(.+)=$/, 1]
|
|
161
|
+
self[key_to_set] = (args.length == 1 ? args[0] : args)
|
|
162
|
+
else
|
|
163
|
+
raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'. To set an attribute, use `#{symbol}=value' instead."
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def set_unless?
|
|
168
|
+
@root.set_unless?
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def convert_key(key)
|
|
172
|
+
super
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Mash uses #convert_value to mashify values on input.
|
|
176
|
+
# We override it here to convert hash or array values to VividMash or
|
|
177
|
+
# AttrArray for consistency and to ensure that the added parts of the
|
|
178
|
+
# attribute tree will have the correct cache invalidation behavior.
|
|
179
|
+
def convert_value(value)
|
|
180
|
+
case value
|
|
181
|
+
when VividMash
|
|
182
|
+
value
|
|
183
|
+
when Hash
|
|
184
|
+
VividMash.new(root, value)
|
|
185
|
+
when Array
|
|
186
|
+
AttrArray.new(root, value)
|
|
187
|
+
else
|
|
188
|
+
value
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def dup
|
|
193
|
+
Mash.new(self)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
end
|
|
199
|
+
end
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
|
|
2
|
+
class Chef
|
|
3
|
+
class Node
|
|
4
|
+
|
|
5
|
+
module Immutablize
|
|
6
|
+
def immutablize(value)
|
|
7
|
+
case value
|
|
8
|
+
when Hash
|
|
9
|
+
ImmutableMash.new(value)
|
|
10
|
+
when Array
|
|
11
|
+
ImmutableArray.new(value)
|
|
12
|
+
else
|
|
13
|
+
value
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# == ImmutableArray
|
|
19
|
+
# ImmutableArray is used to implement Array collections when reading node
|
|
20
|
+
# attributes.
|
|
21
|
+
#
|
|
22
|
+
# ImmutableArray acts like an ordinary Array, except:
|
|
23
|
+
# * Methods that mutate the array are overridden to raise an error, making
|
|
24
|
+
# the collection more or less immutable.
|
|
25
|
+
# * Since this class stores values computed from a parent
|
|
26
|
+
# Chef::Node::Attribute's values, it overrides all reader methods to
|
|
27
|
+
# detect staleness and raise an error if accessed when stale.
|
|
28
|
+
class ImmutableArray < Array
|
|
29
|
+
include Immutablize
|
|
30
|
+
|
|
31
|
+
alias :internal_push :<<
|
|
32
|
+
private :internal_push
|
|
33
|
+
|
|
34
|
+
# A list of methods that mutate Array. Each of these is overridden to
|
|
35
|
+
# raise an error, making this instances of this class more or less
|
|
36
|
+
# immutable.
|
|
37
|
+
DISALLOWED_MUTATOR_METHODS = [
|
|
38
|
+
:<<,
|
|
39
|
+
:[]=,
|
|
40
|
+
:clear,
|
|
41
|
+
:collect!,
|
|
42
|
+
:compact!,
|
|
43
|
+
:default=,
|
|
44
|
+
:default_proc=,
|
|
45
|
+
:delete,
|
|
46
|
+
:delete_at,
|
|
47
|
+
:delete_if,
|
|
48
|
+
:fill,
|
|
49
|
+
:flatten!,
|
|
50
|
+
:insert,
|
|
51
|
+
:keep_if,
|
|
52
|
+
:map!,
|
|
53
|
+
:merge!,
|
|
54
|
+
:pop,
|
|
55
|
+
:push,
|
|
56
|
+
:update,
|
|
57
|
+
:reject!,
|
|
58
|
+
:reverse!,
|
|
59
|
+
:replace,
|
|
60
|
+
:select!,
|
|
61
|
+
:shift,
|
|
62
|
+
:slice!,
|
|
63
|
+
:sort!,
|
|
64
|
+
:sort_by!,
|
|
65
|
+
:uniq!,
|
|
66
|
+
:unshift
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
def initialize(array_data)
|
|
70
|
+
array_data.each do |value|
|
|
71
|
+
internal_push(immutablize(value))
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Redefine all of the methods that mutate a Hash to raise an error when called.
|
|
76
|
+
# This is the magic that makes this object "Immutable"
|
|
77
|
+
DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
|
|
78
|
+
# Ruby 1.8 blocks can't have block arguments, so we must use string eval:
|
|
79
|
+
class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
|
|
80
|
+
def #{mutator_method_name}(*args, &block)
|
|
81
|
+
msg = "Node attributes are read-only when you do not specify which precedence level to set. " +
|
|
82
|
+
%Q(To set an attribute use code like `node.default["key"] = "value"')
|
|
83
|
+
raise Exceptions::ImmutableAttributeModification, msg
|
|
84
|
+
end
|
|
85
|
+
METHOD_DEFN
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def dup
|
|
89
|
+
Array.new(map {|e| e.dup })
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# == ImmutableMash
|
|
95
|
+
# ImmutableMash implements Hash/Dict behavior for reading values from node
|
|
96
|
+
# attributes.
|
|
97
|
+
#
|
|
98
|
+
# ImmutableMash acts like a Mash (Hash that is indifferent to String or
|
|
99
|
+
# Symbol keys), with some important exceptions:
|
|
100
|
+
# * Methods that mutate state are overridden to raise an error instead.
|
|
101
|
+
# * Methods that read from the collection are overriden so that they check
|
|
102
|
+
# if the Chef::Node::Attribute has been modified since an instance of
|
|
103
|
+
# this class was generated. An error is raised if the object detects that
|
|
104
|
+
# it is stale.
|
|
105
|
+
# * Values can be accessed in attr_reader-like fashion via method_missing.
|
|
106
|
+
class ImmutableMash < Mash
|
|
107
|
+
|
|
108
|
+
include Immutablize
|
|
109
|
+
|
|
110
|
+
alias :internal_set :[]=
|
|
111
|
+
private :internal_set
|
|
112
|
+
|
|
113
|
+
DISALLOWED_MUTATOR_METHODS = [
|
|
114
|
+
:[]=,
|
|
115
|
+
:clear,
|
|
116
|
+
:collect!,
|
|
117
|
+
:default=,
|
|
118
|
+
:default_proc=,
|
|
119
|
+
:delete,
|
|
120
|
+
:delete_if,
|
|
121
|
+
:keep_if,
|
|
122
|
+
:map!,
|
|
123
|
+
:merge!,
|
|
124
|
+
:update,
|
|
125
|
+
:reject!,
|
|
126
|
+
:replace,
|
|
127
|
+
:select!,
|
|
128
|
+
:shift
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
def initialize(mash_data)
|
|
132
|
+
mash_data.each do |key, value|
|
|
133
|
+
internal_set(key, immutablize(value))
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
alias :attribute? :has_key?
|
|
138
|
+
|
|
139
|
+
# Redefine all of the methods that mutate a Hash to raise an error when called.
|
|
140
|
+
# This is the magic that makes this object "Immutable"
|
|
141
|
+
DISALLOWED_MUTATOR_METHODS.each do |mutator_method_name|
|
|
142
|
+
# Ruby 1.8 blocks can't have block arguments, so we must use string eval:
|
|
143
|
+
class_eval(<<-METHOD_DEFN, __FILE__, __LINE__)
|
|
144
|
+
def #{mutator_method_name}(*args, &block)
|
|
145
|
+
msg = "Node attributes are read-only when you do not specify which precedence level to set. " +
|
|
146
|
+
%Q(To set an attribute use code like `node.default["key"] = "value"')
|
|
147
|
+
raise Exceptions::ImmutableAttributeModification, msg
|
|
148
|
+
end
|
|
149
|
+
METHOD_DEFN
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def method_missing(symbol, *args)
|
|
153
|
+
if args.empty?
|
|
154
|
+
if key?(symbol)
|
|
155
|
+
self[symbol]
|
|
156
|
+
else
|
|
157
|
+
raise NoMethodError, "Undefined method or attribute `#{symbol}' on `node'"
|
|
158
|
+
end
|
|
159
|
+
# This will raise a ImmutableAttributeModification error:
|
|
160
|
+
elsif symbol.to_s =~ /=$/
|
|
161
|
+
key_to_set = symbol.to_s[/^(.+)=$/, 1]
|
|
162
|
+
self[key_to_set] = (args.length == 1 ? args[0] : args)
|
|
163
|
+
else
|
|
164
|
+
raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'"
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Mash uses #convert_value to mashify values on input.
|
|
169
|
+
# Since we're handling this ourselves, override it to be a no-op
|
|
170
|
+
def convert_value(value)
|
|
171
|
+
value
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# NOTE: #default and #default= are likely to be pretty confusing. For a
|
|
175
|
+
# regular ruby Hash, they control what value is returned for, e.g.,
|
|
176
|
+
# hash[:no_such_key] #=> hash.default
|
|
177
|
+
# Of course, 'default' has a specific meaning in Chef-land
|
|
178
|
+
|
|
179
|
+
def dup
|
|
180
|
+
Mash.new(self)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
end
|
data/lib/chef/platform.rb
CHANGED
|
@@ -20,9 +20,8 @@ require 'chef/config'
|
|
|
20
20
|
require 'chef/log'
|
|
21
21
|
require 'chef/mixin/params_validate'
|
|
22
22
|
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
# errors.
|
|
23
|
+
# This file depends on nearly every provider in chef, but requiring them
|
|
24
|
+
# directly causes circular requires resulting in uninitialized constant errors.
|
|
26
25
|
require 'chef/provider'
|
|
27
26
|
require 'chef/provider/log'
|
|
28
27
|
require 'chef/provider/user'
|
|
@@ -73,14 +72,6 @@ class Chef
|
|
|
73
72
|
:mdadm => Chef::Provider::Mdadm
|
|
74
73
|
}
|
|
75
74
|
},
|
|
76
|
-
:gcel => {
|
|
77
|
-
:default => {
|
|
78
|
-
:package => Chef::Provider::Package::Apt,
|
|
79
|
-
:service => Chef::Provider::Service::Debian,
|
|
80
|
-
:cron => Chef::Provider::Cron,
|
|
81
|
-
:mdadm => Chef::Provider::Mdadm
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
75
|
:linaro => {
|
|
85
76
|
:default => {
|
|
86
77
|
:package => Chef::Provider::Package::Apt,
|
|
@@ -253,8 +244,7 @@ class Chef
|
|
|
253
244
|
:service => Chef::Provider::Service::Solaris,
|
|
254
245
|
:package => Chef::Provider::Package::Ips,
|
|
255
246
|
:cron => Chef::Provider::Cron::Solaris,
|
|
256
|
-
:group => Chef::Provider::Group::Usermod
|
|
257
|
-
:user => Chef::Provider::User::Solaris,
|
|
247
|
+
:group => Chef::Provider::Group::Usermod
|
|
258
248
|
}
|
|
259
249
|
},
|
|
260
250
|
:solaris2 => {
|
|
@@ -262,22 +252,19 @@ class Chef
|
|
|
262
252
|
:service => Chef::Provider::Service::Solaris,
|
|
263
253
|
:package => Chef::Provider::Package::Ips,
|
|
264
254
|
:cron => Chef::Provider::Cron::Solaris,
|
|
265
|
-
:group => Chef::Provider::Group::Usermod
|
|
266
|
-
:user => Chef::Provider::User::Solaris
|
|
255
|
+
:group => Chef::Provider::Group::Usermod
|
|
267
256
|
},
|
|
268
257
|
"5.9" => {
|
|
269
258
|
:service => Chef::Provider::Service::Solaris,
|
|
270
259
|
:package => Chef::Provider::Package::Solaris,
|
|
271
260
|
:cron => Chef::Provider::Cron::Solaris,
|
|
272
|
-
:group => Chef::Provider::Group::Usermod
|
|
273
|
-
:user => Chef::Provider::User::Solaris
|
|
261
|
+
:group => Chef::Provider::Group::Usermod
|
|
274
262
|
},
|
|
275
263
|
"5.10" => {
|
|
276
264
|
:service => Chef::Provider::Service::Solaris,
|
|
277
265
|
:package => Chef::Provider::Package::Solaris,
|
|
278
266
|
:cron => Chef::Provider::Cron::Solaris,
|
|
279
|
-
:group => Chef::Provider::Group::Usermod
|
|
280
|
-
:user => Chef::Provider::User::Solaris
|
|
267
|
+
:group => Chef::Provider::Group::Usermod
|
|
281
268
|
}
|
|
282
269
|
},
|
|
283
270
|
:smartos => {
|
|
@@ -285,8 +272,7 @@ class Chef
|
|
|
285
272
|
:service => Chef::Provider::Service::Solaris,
|
|
286
273
|
:package => Chef::Provider::Package::SmartOS,
|
|
287
274
|
:cron => Chef::Provider::Cron::Solaris,
|
|
288
|
-
:group => Chef::Provider::Group::Usermod
|
|
289
|
-
:user => Chef::Provider::User::Solaris
|
|
275
|
+
:group => Chef::Provider::Group::Usermod
|
|
290
276
|
}
|
|
291
277
|
},
|
|
292
278
|
:netbsd => {
|
|
@@ -331,7 +317,6 @@ class Chef
|
|
|
331
317
|
:route => Chef::Provider::Route,
|
|
332
318
|
:ifconfig => Chef::Provider::Ifconfig,
|
|
333
319
|
:ruby_block => Chef::Provider::RubyBlock,
|
|
334
|
-
:whyrun_safe_ruby_block => Chef::Provider::WhyrunSafeRubyBlock,
|
|
335
320
|
:erl_call => Chef::Provider::ErlCall,
|
|
336
321
|
:log => Chef::Provider::Log::ChefLog
|
|
337
322
|
}
|