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
|
@@ -22,12 +22,15 @@ describe Chef::Resource::RemoteDirectory do
|
|
|
22
22
|
include_context Chef::Resource::Directory
|
|
23
23
|
|
|
24
24
|
let(:directory_base) { "directory_spec" }
|
|
25
|
+
let(:default_mode) { "755" }
|
|
25
26
|
|
|
26
27
|
def create_resource
|
|
27
28
|
cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
|
|
28
29
|
Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, cookbook_repo) }
|
|
29
30
|
node = Chef::Node.new
|
|
30
|
-
|
|
31
|
+
cl = Chef::CookbookLoader.new(cookbook_repo)
|
|
32
|
+
cl.load_cookbooks
|
|
33
|
+
cookbook_collection = Chef::CookbookCollection.new(cl)
|
|
31
34
|
events = Chef::EventDispatch::Dispatcher.new
|
|
32
35
|
run_context = Chef::RunContext.new(node, cookbook_collection, events)
|
|
33
36
|
|
|
@@ -37,57 +40,90 @@ describe Chef::Resource::RemoteDirectory do
|
|
|
37
40
|
resource
|
|
38
41
|
end
|
|
39
42
|
|
|
43
|
+
def create_extraneous_files
|
|
44
|
+
FileUtils.mkdir_p(File.join(path, 'remotesubdir'))
|
|
45
|
+
@existing1 = File.join(path, 'marked_for_death.txt')
|
|
46
|
+
@existing2 = File.join(path, 'remotesubdir', 'marked_for_death_again.txt')
|
|
47
|
+
FileUtils.touch(@existing1)
|
|
48
|
+
FileUtils.touch(@existing2)
|
|
49
|
+
end
|
|
50
|
+
|
|
40
51
|
let!(:resource) do
|
|
41
52
|
create_resource
|
|
42
53
|
end
|
|
43
54
|
|
|
55
|
+
let(:resource_second_pass) do
|
|
56
|
+
create_resource
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# See spec/data/cookbooks/openldap/files/default
|
|
60
|
+
let(:expected_files) do
|
|
61
|
+
[
|
|
62
|
+
File.join(path, 'remote_dir_file1.txt'),
|
|
63
|
+
File.join(path, 'remote_dir_file2.txt'),
|
|
64
|
+
File.join(path, 'remotesubdir', 'remote_subdir_file1.txt'),
|
|
65
|
+
File.join(path, 'remotesubdir', 'remote_subdir_file2.txt'),
|
|
66
|
+
File.join(path, 'remotesubdir', '.a_dotfile'),
|
|
67
|
+
File.join(path, '.a_dotdir', '.a_dotfile_in_a_dotdir')
|
|
68
|
+
]
|
|
69
|
+
end
|
|
70
|
+
|
|
44
71
|
it_behaves_like "a directory resource"
|
|
45
72
|
|
|
46
|
-
|
|
47
|
-
it "transfers the directory with all contents" do
|
|
48
|
-
resource.run_action(:create)
|
|
49
|
-
File.should exist(File.join(path, 'remote_dir_file1.txt'))
|
|
50
|
-
File.should exist(File.join(path, 'remote_dir_file2.txt'))
|
|
51
|
-
File.should exist(File.join(path, 'remotesubdir', 'remote_subdir_file1.txt'))
|
|
52
|
-
File.should exist(File.join(path, 'remotesubdir', 'remote_subdir_file2.txt'))
|
|
53
|
-
File.should exist(File.join(path, 'remotesubdir', '.a_dotfile'))
|
|
54
|
-
File.should exist(File.join(path, '.a_dotdir', '.a_dotfile_in_a_dotdir'))
|
|
55
|
-
end
|
|
73
|
+
it_behaves_like "a securable resource with reporting"
|
|
56
74
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
75
|
+
context "when creating the remote directory with purging disabled" do
|
|
76
|
+
|
|
77
|
+
context "and the directory does not yet exist" do
|
|
78
|
+
before do
|
|
79
|
+
resource.run_action(:create)
|
|
60
80
|
end
|
|
61
81
|
|
|
62
|
-
it "
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
82
|
+
it "transfers the directory with all contents" do
|
|
83
|
+
expected_files.each do |file_path|
|
|
84
|
+
File.should exist(file_path)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "is marked as updated by last action" do
|
|
89
|
+
resource.should be_updated_by_last_action
|
|
90
|
+
end
|
|
91
|
+
end
|
|
68
92
|
|
|
93
|
+
context "and there are extraneous files in the directory" do
|
|
94
|
+
before do
|
|
95
|
+
create_extraneous_files
|
|
69
96
|
resource.run_action(:create)
|
|
70
|
-
File.should_not exist(existing1)
|
|
71
|
-
File.should_not exist(existing2)
|
|
72
97
|
end
|
|
73
98
|
|
|
74
|
-
it "
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
existing4 = File.join(path, 'a', 'multiply', 'nested', 'directory', 'qux.txt')
|
|
80
|
-
FileUtils.touch(existing1)
|
|
81
|
-
FileUtils.touch(existing2)
|
|
82
|
-
FileUtils.touch(existing3)
|
|
83
|
-
FileUtils.touch(existing4)
|
|
99
|
+
it "does not modify the expected state of the directory" do
|
|
100
|
+
expected_files.each do |file_path|
|
|
101
|
+
File.should exist(file_path)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
84
104
|
|
|
105
|
+
it "does not remove unmanaged files" do
|
|
106
|
+
File.should exist(@existing1)
|
|
107
|
+
File.should exist(@existing2)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context "and the directory is in the desired state" do
|
|
112
|
+
before do
|
|
85
113
|
resource.run_action(:create)
|
|
86
|
-
|
|
87
|
-
File.should_not exist(existing2)
|
|
88
|
-
File.should_not exist(existing3)
|
|
89
|
-
File.should_not exist(existing4)
|
|
114
|
+
resource_second_pass.run_action(:create)
|
|
90
115
|
end
|
|
116
|
+
|
|
117
|
+
it "does not modify the expected state of the directory" do
|
|
118
|
+
expected_files.each do |file_path|
|
|
119
|
+
File.should exist(file_path)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "is not marked as updated by last action" do
|
|
124
|
+
resource_second_pass.should_not be_updated_by_last_action
|
|
125
|
+
end
|
|
126
|
+
|
|
91
127
|
end
|
|
92
128
|
|
|
93
129
|
describe "with overwrite disabled" do
|
|
@@ -111,4 +147,74 @@ describe Chef::Resource::RemoteDirectory do
|
|
|
111
147
|
end
|
|
112
148
|
end
|
|
113
149
|
end
|
|
150
|
+
|
|
151
|
+
context "when creating the directory with purging enabled" do
|
|
152
|
+
before(:each) do
|
|
153
|
+
resource.purge(true)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context "and there are no extraneous files in the directory" do
|
|
157
|
+
before do
|
|
158
|
+
resource.run_action(:create)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "creates the directory contents as normal" do
|
|
162
|
+
expected_files.each do |file_path|
|
|
163
|
+
File.should exist(file_path)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
context "and there are extraneous files in the directory" do
|
|
170
|
+
before do
|
|
171
|
+
create_extraneous_files
|
|
172
|
+
resource.run_action(:create)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it "removes unmanaged files" do
|
|
176
|
+
File.should_not exist(@existing1)
|
|
177
|
+
File.should_not exist(@existing2)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it "does not modify managed files" do
|
|
181
|
+
expected_files.each do |file_path|
|
|
182
|
+
File.should exist(file_path)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "is marked as updated by last action" do
|
|
187
|
+
resource.should be_updated_by_last_action
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
context "and there are deeply nested extraneous files in the directory" do
|
|
192
|
+
before do
|
|
193
|
+
FileUtils.mkdir_p(File.join(path, 'a', 'multiply', 'nested', 'directory'))
|
|
194
|
+
@existing1 = File.join(path, 'a', 'foo.txt')
|
|
195
|
+
@existing2 = File.join(path, 'a', 'multiply', 'bar.txt')
|
|
196
|
+
@existing3 = File.join(path, 'a', 'multiply', 'nested', 'baz.txt')
|
|
197
|
+
@existing4 = File.join(path, 'a', 'multiply', 'nested', 'directory', 'qux.txt')
|
|
198
|
+
FileUtils.touch(@existing1)
|
|
199
|
+
FileUtils.touch(@existing2)
|
|
200
|
+
FileUtils.touch(@existing3)
|
|
201
|
+
FileUtils.touch(@existing4)
|
|
202
|
+
|
|
203
|
+
resource.run_action(:create)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it "removes files in subdirectories before files above" do
|
|
207
|
+
File.should_not exist(@existing1)
|
|
208
|
+
File.should_not exist(@existing2)
|
|
209
|
+
File.should_not exist(@existing3)
|
|
210
|
+
File.should_not exist(@existing4)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
it "is marked as updated by last action" do
|
|
214
|
+
resource.should be_updated_by_last_action
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
114
220
|
end
|
|
@@ -45,6 +45,22 @@ describe Chef::Resource::RemoteFile do
|
|
|
45
45
|
create_resource
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
let(:default_mode) do
|
|
49
|
+
# TODO: Lots of ugly here :(
|
|
50
|
+
# RemoteFile uses FileUtils.cp. FileUtils does a copy by opening the
|
|
51
|
+
# destination file and writing to it. Before 1.9.3, it does not preserve
|
|
52
|
+
# the mode of the copied file. In 1.9.3 and after, it does. So we have to
|
|
53
|
+
# figure out what the default mode ought to be via heuristic.
|
|
54
|
+
|
|
55
|
+
t = Tempfile.new("get-the-mode")
|
|
56
|
+
path = t.path
|
|
57
|
+
path_2 = t.path + "fileutils-mode-test"
|
|
58
|
+
FileUtils.cp(path, path_2)
|
|
59
|
+
t.close
|
|
60
|
+
m = File.stat(path_2).mode
|
|
61
|
+
(07777 & m).to_s(8)
|
|
62
|
+
end
|
|
63
|
+
|
|
48
64
|
before(:all) do
|
|
49
65
|
@server = TinyServer::Manager.new
|
|
50
66
|
@server.start
|
|
@@ -62,4 +78,6 @@ describe Chef::Resource::RemoteFile do
|
|
|
62
78
|
end
|
|
63
79
|
|
|
64
80
|
it_behaves_like "a file resource"
|
|
81
|
+
|
|
82
|
+
it_behaves_like "a securable resource with reporting"
|
|
65
83
|
end
|
|
@@ -27,14 +27,16 @@ describe Chef::Resource::Template do
|
|
|
27
27
|
|
|
28
28
|
let(:node) do
|
|
29
29
|
node = Chef::Node.new
|
|
30
|
-
node[:slappiness] = "a warm gun"
|
|
30
|
+
node.normal[:slappiness] = "a warm gun"
|
|
31
31
|
node
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def create_resource
|
|
35
35
|
cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
|
|
36
36
|
Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, cookbook_repo) }
|
|
37
|
-
|
|
37
|
+
cl = Chef::CookbookLoader.new(cookbook_repo)
|
|
38
|
+
cl.load_cookbooks
|
|
39
|
+
cookbook_collection = Chef::CookbookCollection.new(cl)
|
|
38
40
|
events = Chef::EventDispatch::Dispatcher.new
|
|
39
41
|
run_context = Chef::RunContext.new(node, cookbook_collection, events)
|
|
40
42
|
resource = Chef::Resource::Template.new(path, run_context)
|
|
@@ -47,8 +49,27 @@ describe Chef::Resource::Template do
|
|
|
47
49
|
create_resource
|
|
48
50
|
end
|
|
49
51
|
|
|
52
|
+
let(:default_mode) do
|
|
53
|
+
# TODO: Lots of ugly here :(
|
|
54
|
+
# RemoteFile uses FileUtils.cp. FileUtils does a copy by opening the
|
|
55
|
+
# destination file and writing to it. Before 1.9.3, it does not preserve
|
|
56
|
+
# the mode of the copied file. In 1.9.3 and after, it does. So we have to
|
|
57
|
+
# figure out what the default mode ought to be via heuristic.
|
|
58
|
+
|
|
59
|
+
t = Tempfile.new("get-the-mode")
|
|
60
|
+
path = t.path
|
|
61
|
+
path_2 = t.path + "fileutils-mode-test"
|
|
62
|
+
FileUtils.cp(path, path_2)
|
|
63
|
+
t.close
|
|
64
|
+
m = File.stat(path_2).mode
|
|
65
|
+
(07777 & m).to_s(8)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
50
69
|
it_behaves_like "a file resource"
|
|
51
70
|
|
|
71
|
+
it_behaves_like "a securable resource with reporting"
|
|
72
|
+
|
|
52
73
|
context "when the target file does not exist" do
|
|
53
74
|
it "creates the template with the rendered content using the variable attribute when the :create action is run" do
|
|
54
75
|
resource.source('openldap_variable_stuff.conf.erb')
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
|
19
|
+
require 'chef/client'
|
|
20
|
+
|
|
21
|
+
describe Chef::RunLock do
|
|
22
|
+
|
|
23
|
+
# This behavior is believed to work on windows, but the tests use UNIX APIs.
|
|
24
|
+
describe "when locking the chef-client run", :unix_only => true do
|
|
25
|
+
let(:random_temp_root) do
|
|
26
|
+
Kernel.srand(Time.now.to_i + Process.pid)
|
|
27
|
+
"/tmp/#{Kernel.rand(Time.now.to_i + Process.pid)}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
let(:file_cache_path){ "/var/chef/cache" }
|
|
31
|
+
let(:lockfile){ "#{random_temp_root}/this/long/path/does/not/exist/chef-client-running.pid" }
|
|
32
|
+
|
|
33
|
+
after(:each){ FileUtils.rm_r(random_temp_root) }
|
|
34
|
+
|
|
35
|
+
it "creates the full path to the lockfile" do
|
|
36
|
+
run_lock = Chef::RunLock.new(:file_cache_path => file_cache_path, :lockfile => lockfile)
|
|
37
|
+
lambda { run_lock.acquire }.should_not raise_error(Errno::ENOENT)
|
|
38
|
+
File.should exist(lockfile)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "allows only one chef client run per lockfile" do
|
|
42
|
+
read, write = IO.pipe
|
|
43
|
+
run_lock = Chef::RunLock.new(:file_cache_path => file_cache_path, :lockfile => lockfile)
|
|
44
|
+
p1 = fork do
|
|
45
|
+
run_lock.acquire
|
|
46
|
+
write.puts 1
|
|
47
|
+
#puts "[#{Time.new.to_i % 100}] p1 (#{Process.pid}) running with lock"
|
|
48
|
+
sleep 2
|
|
49
|
+
write.puts 2
|
|
50
|
+
#puts "[#{Time.new.to_i % 100}] p1 (#{Process.pid}) releasing lock"
|
|
51
|
+
run_lock.release
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
sleep 0.5
|
|
55
|
+
|
|
56
|
+
p2 = fork do
|
|
57
|
+
run_lock.acquire
|
|
58
|
+
write.puts 3
|
|
59
|
+
#puts "[#{Time.new.to_i % 100}] p2 (#{Process.pid}) running with lock"
|
|
60
|
+
run_lock.release
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
Process.waitpid2(p1)
|
|
64
|
+
Process.waitpid2(p2)
|
|
65
|
+
|
|
66
|
+
write.close
|
|
67
|
+
order = read.read
|
|
68
|
+
read.close
|
|
69
|
+
|
|
70
|
+
order.should == "1\n2\n3\n"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "clears the lock if the process dies unexpectedly" do
|
|
74
|
+
read, write = IO.pipe
|
|
75
|
+
run_lock = Chef::RunLock.new(:file_cache_path => file_cache_path, :lockfile => lockfile)
|
|
76
|
+
p1 = fork do
|
|
77
|
+
run_lock.acquire
|
|
78
|
+
write.puts 1
|
|
79
|
+
#puts "[#{Time.new.to_i % 100}] p1 (#{Process.pid}) running with lock"
|
|
80
|
+
sleep 1
|
|
81
|
+
write.puts 2
|
|
82
|
+
#puts "[#{Time.new.to_i % 100}] p1 (#{Process.pid}) releasing lock"
|
|
83
|
+
run_lock.release
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
p2 = fork do
|
|
87
|
+
run_lock.acquire
|
|
88
|
+
write.puts 3
|
|
89
|
+
#puts "[#{Time.new.to_i % 100}] p2 (#{Process.pid}) running with lock"
|
|
90
|
+
run_lock.release
|
|
91
|
+
end
|
|
92
|
+
Process.kill(:KILL, p1)
|
|
93
|
+
|
|
94
|
+
Process.waitpid2(p1)
|
|
95
|
+
Process.waitpid2(p2)
|
|
96
|
+
|
|
97
|
+
write.close
|
|
98
|
+
order = read.read
|
|
99
|
+
read.close
|
|
100
|
+
|
|
101
|
+
order.should =~ /3\Z/
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
@@ -0,0 +1,100 @@
|
|
|
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
|
+
require 'spec_helper'
|
|
20
|
+
require 'chef/version'
|
|
21
|
+
|
|
22
|
+
describe Chef::Shell do
|
|
23
|
+
|
|
24
|
+
# chef-shell's unit tests are by necessity very mock-heavy, and frequently do
|
|
25
|
+
# not catch cases where chef-shell fails to boot because of changes in
|
|
26
|
+
# chef/client.rb
|
|
27
|
+
describe "smoke tests", :unix_only => true do
|
|
28
|
+
|
|
29
|
+
def read_until(io, expected_value)
|
|
30
|
+
start = Time.new
|
|
31
|
+
buffer = ""
|
|
32
|
+
until buffer.include?(expected_value)
|
|
33
|
+
begin
|
|
34
|
+
buffer << io.read_nonblock(1)
|
|
35
|
+
rescue Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EIO, EOFError
|
|
36
|
+
end
|
|
37
|
+
if Time.new - start > 15
|
|
38
|
+
STDERR.puts "did not read expected value `#{expected_value}' within 15s"
|
|
39
|
+
STDERR.puts "Buffer so far: `#{buffer}'"
|
|
40
|
+
break
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
buffer
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def wait_or_die(pid)
|
|
47
|
+
start = Time.new
|
|
48
|
+
|
|
49
|
+
until exitstatus = Process.waitpid2(pid, Process::WNOHANG)
|
|
50
|
+
if Time.new - start > 5
|
|
51
|
+
STDERR.puts("chef-shell tty did not exit cleanly, killing it")
|
|
52
|
+
Process.kill(:KILL, pid)
|
|
53
|
+
end
|
|
54
|
+
sleep 0.1
|
|
55
|
+
end
|
|
56
|
+
exitstatus[1]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def run_chef_shell_with(options)
|
|
60
|
+
# Windows ruby installs don't (always?) have PTY,
|
|
61
|
+
# so hide the require here
|
|
62
|
+
require 'pty'
|
|
63
|
+
config = File.expand_path("chef-config.rb", CHEF_SPEC_DATA)
|
|
64
|
+
path_to_chef_shell = File.expand_path("../../../bin/chef-shell", __FILE__)
|
|
65
|
+
reader, writer, pid = PTY.spawn("#{path_to_chef_shell} -c #{config} #{options}")
|
|
66
|
+
read_until(reader, "chef >")
|
|
67
|
+
yield reader, writer if block_given?
|
|
68
|
+
writer.puts('"done"')
|
|
69
|
+
output = read_until(reader, '=> "done"')
|
|
70
|
+
writer.print("exit\n")
|
|
71
|
+
read_until(reader, "exit")
|
|
72
|
+
read_until(reader, "exit")
|
|
73
|
+
read_until(reader, "\n")
|
|
74
|
+
writer.close
|
|
75
|
+
|
|
76
|
+
exitstatus = wait_or_die(pid)
|
|
77
|
+
|
|
78
|
+
[output, exitstatus]
|
|
79
|
+
rescue PTY::ChildExited => e
|
|
80
|
+
[output, e.status]
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "boots correctly with -lauto" do
|
|
84
|
+
output, exitstatus = run_chef_shell_with("-lauto")
|
|
85
|
+
exitstatus.should be_success
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "sets the log_level from the command line" do
|
|
89
|
+
output, exitstatus = run_chef_shell_with("-lfatal") do |out, keyboard|
|
|
90
|
+
show_log_level_code = %q[puts "===#{Chef::Log.level}==="]
|
|
91
|
+
keyboard.puts(show_log_level_code)
|
|
92
|
+
read_until(out, show_log_level_code)
|
|
93
|
+
end
|
|
94
|
+
output.should include("===fatal===")
|
|
95
|
+
exitstatus.should be_success
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|