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
data/lib/chef/resources.rb
CHANGED
|
@@ -50,6 +50,7 @@ require 'chef/resource/pacman_package'
|
|
|
50
50
|
require 'chef/resource/perl'
|
|
51
51
|
require 'chef/resource/portage_package'
|
|
52
52
|
require 'chef/resource/python'
|
|
53
|
+
require 'chef/resource/registry_key'
|
|
53
54
|
require 'chef/resource/remote_directory'
|
|
54
55
|
require 'chef/resource/remote_file'
|
|
55
56
|
require 'chef/resource/rpm_package'
|
|
@@ -64,5 +65,5 @@ require 'chef/resource/smartos_package'
|
|
|
64
65
|
require 'chef/resource/template'
|
|
65
66
|
require 'chef/resource/timestamped_deploy'
|
|
66
67
|
require 'chef/resource/user'
|
|
67
|
-
require 'chef/resource/whyrun_safe_ruby_block'
|
|
68
68
|
require 'chef/resource/yum_package'
|
|
69
|
+
require 'chef/resource/lwrp_base'
|
data/lib/chef/rest.rb
CHANGED
|
@@ -30,7 +30,8 @@ require 'chef/rest/rest_request'
|
|
|
30
30
|
require 'chef/monkey_patches/string'
|
|
31
31
|
require 'chef/monkey_patches/net_http'
|
|
32
32
|
require 'chef/config'
|
|
33
|
-
|
|
33
|
+
require 'chef/exceptions'
|
|
34
|
+
require 'chef/platform'
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
class Chef
|
|
@@ -61,7 +62,9 @@ class Chef
|
|
|
61
62
|
@url = url
|
|
62
63
|
@cookies = CookieJar.instance
|
|
63
64
|
@default_headers = options[:headers] || {}
|
|
64
|
-
@
|
|
65
|
+
@signing_key_filename = signing_key_filename
|
|
66
|
+
@key = load_signing_key(@signing_key_filename, options[:raw_key])
|
|
67
|
+
@auth_credentials = AuthCredentials.new(client_name, @key)
|
|
65
68
|
@sign_on_redirect, @sign_request = true, true
|
|
66
69
|
@redirects_followed = 0
|
|
67
70
|
@redirect_limit = 10
|
|
@@ -70,7 +73,7 @@ class Chef
|
|
|
70
73
|
end
|
|
71
74
|
|
|
72
75
|
def signing_key_filename
|
|
73
|
-
@
|
|
76
|
+
@signing_key_filename
|
|
74
77
|
end
|
|
75
78
|
|
|
76
79
|
def client_name
|
|
@@ -78,51 +81,7 @@ class Chef
|
|
|
78
81
|
end
|
|
79
82
|
|
|
80
83
|
def signing_key
|
|
81
|
-
@
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# Register the client
|
|
85
|
-
#--
|
|
86
|
-
# Requires you to load chef/api_client beforehand. explicit require is removed since
|
|
87
|
-
# most users of this class have no need for chef/api_client. This functionality
|
|
88
|
-
# should be moved anyway...
|
|
89
|
-
def register(name=Chef::Config[:node_name], destination=Chef::Config[:client_key])
|
|
90
|
-
if (File.exists?(destination) && !File.writable?(destination))
|
|
91
|
-
raise Chef::Exceptions::CannotWritePrivateKey, "I cannot write your private key to #{destination} - check permissions?"
|
|
92
|
-
end
|
|
93
|
-
nc = Chef::ApiClient.new
|
|
94
|
-
nc.name(name)
|
|
95
|
-
|
|
96
|
-
catch(:done) do
|
|
97
|
-
retries = config[:client_registration_retries] || 5
|
|
98
|
-
0.upto(retries) do |n|
|
|
99
|
-
begin
|
|
100
|
-
response = nc.save(true, true)
|
|
101
|
-
Chef::Log.debug("Registration response: #{response.inspect}")
|
|
102
|
-
private_key = if response.respond_to?(:[])
|
|
103
|
-
response["private_key"]
|
|
104
|
-
else
|
|
105
|
-
response.private_key
|
|
106
|
-
end
|
|
107
|
-
unless private_key
|
|
108
|
-
raise Chef::Exceptions::CannotWritePrivateKey, "The response from the server did not include a private key!"
|
|
109
|
-
end
|
|
110
|
-
# Write out the private key
|
|
111
|
-
::File.open(destination, "w") {|f|
|
|
112
|
-
f.chmod(0600)
|
|
113
|
-
f.print(private_key)
|
|
114
|
-
}
|
|
115
|
-
throw :done
|
|
116
|
-
rescue IOError
|
|
117
|
-
raise Chef::Exceptions::CannotWritePrivateKey, "I cannot write your private key to #{destination}"
|
|
118
|
-
rescue Net::HTTPFatalError => e
|
|
119
|
-
Chef::Log.warn("Failed attempt #{n} of #{retries+1} on client creation")
|
|
120
|
-
raise unless e.response.code == "500"
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
true
|
|
84
|
+
@raw_key
|
|
126
85
|
end
|
|
127
86
|
|
|
128
87
|
# Send an HTTP GET request to the path
|
|
@@ -133,7 +92,7 @@ class Chef
|
|
|
133
92
|
# path:: The path to GET
|
|
134
93
|
# raw:: Whether you want the raw body returned, or JSON inflated. Defaults
|
|
135
94
|
# to JSON inflated.
|
|
136
|
-
def
|
|
95
|
+
def get(path, raw=false, headers={})
|
|
137
96
|
if raw
|
|
138
97
|
streaming_request(create_url(path), headers)
|
|
139
98
|
else
|
|
@@ -141,21 +100,33 @@ class Chef
|
|
|
141
100
|
end
|
|
142
101
|
end
|
|
143
102
|
|
|
103
|
+
def head(path, headers={})
|
|
104
|
+
api_request(:HEAD, create_url(path), headers)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
alias :get_rest :get
|
|
108
|
+
|
|
144
109
|
# Send an HTTP DELETE request to the path
|
|
145
|
-
def
|
|
110
|
+
def delete(path, headers={})
|
|
146
111
|
api_request(:DELETE, create_url(path), headers)
|
|
147
112
|
end
|
|
148
113
|
|
|
114
|
+
alias :delete_rest :delete
|
|
115
|
+
|
|
149
116
|
# Send an HTTP POST request to the path
|
|
150
|
-
def
|
|
117
|
+
def post(path, json, headers={})
|
|
151
118
|
api_request(:POST, create_url(path), headers, json)
|
|
152
119
|
end
|
|
153
120
|
|
|
121
|
+
alias :post_rest :post
|
|
122
|
+
|
|
154
123
|
# Send an HTTP PUT request to the path
|
|
155
|
-
def
|
|
124
|
+
def put(path, json, headers={})
|
|
156
125
|
api_request(:PUT, create_url(path), headers, json)
|
|
157
126
|
end
|
|
158
127
|
|
|
128
|
+
alias :put_rest :put
|
|
129
|
+
|
|
159
130
|
# Streams a download to a tempfile, then yields the tempfile to a block.
|
|
160
131
|
# After the download, the tempfile will be closed and unlinked.
|
|
161
132
|
# If you rename the tempfile, it will not be deleted.
|
|
@@ -177,69 +148,6 @@ class Chef
|
|
|
177
148
|
auth_credentials.sign_requests? && @sign_request
|
|
178
149
|
end
|
|
179
150
|
|
|
180
|
-
# ==== DEPRECATED
|
|
181
|
-
# Use +api_request+ instead
|
|
182
|
-
#--
|
|
183
|
-
# Actually run an HTTP request. First argument is the HTTP method,
|
|
184
|
-
# which should be one of :GET, :PUT, :POST or :DELETE. Next is the
|
|
185
|
-
# URL, then an object to include in the body (which will be converted with
|
|
186
|
-
# .to_json). The limit argument is unused, it is present for backwards
|
|
187
|
-
# compatibility. Configure the redirect limit with #redirect_limit=
|
|
188
|
-
# instead.
|
|
189
|
-
#
|
|
190
|
-
# Typically, you won't use this method -- instead, you'll use one of
|
|
191
|
-
# the helper methods (get_rest, post_rest, etc.)
|
|
192
|
-
#
|
|
193
|
-
# Will return the body of the response on success.
|
|
194
|
-
def run_request(method, url, headers={}, data=false, limit=nil, raw=false)
|
|
195
|
-
json_body = data ? Chef::JSONCompat.to_json(data) : nil
|
|
196
|
-
# Force encoding to binary to fix SSL related EOFErrors
|
|
197
|
-
# cf. http://tickets.opscode.com/browse/CHEF-2363
|
|
198
|
-
# http://redmine.ruby-lang.org/issues/5233
|
|
199
|
-
json_body.force_encoding(Encoding::BINARY) if json_body.respond_to?(:force_encoding)
|
|
200
|
-
headers = build_headers(method, url, headers, json_body, raw)
|
|
201
|
-
|
|
202
|
-
tf, response_body = nil, nil
|
|
203
|
-
|
|
204
|
-
retriable_rest_request(method, url, json_body, headers) do |rest_request|
|
|
205
|
-
|
|
206
|
-
res = rest_request.call do |response|
|
|
207
|
-
if raw
|
|
208
|
-
tf = stream_to_tempfile(url, response)
|
|
209
|
-
else
|
|
210
|
-
response_body = decompress_body(response)
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
case res
|
|
215
|
-
when Net::HTTPSuccess
|
|
216
|
-
if res['content-type'] =~ /json/
|
|
217
|
-
Chef::JSONCompat.from_json(response_body)
|
|
218
|
-
else
|
|
219
|
-
if method == :HEAD
|
|
220
|
-
true
|
|
221
|
-
elsif raw
|
|
222
|
-
tf
|
|
223
|
-
else
|
|
224
|
-
response_body
|
|
225
|
-
end
|
|
226
|
-
end
|
|
227
|
-
when Net::HTTPNotModified # Must be tested before Net::HTTPRedirection because it's subclass.
|
|
228
|
-
false
|
|
229
|
-
when Net::HTTPRedirection
|
|
230
|
-
follow_redirect {run_request(method, create_url(res['location']), headers, false, nil, raw)}
|
|
231
|
-
else
|
|
232
|
-
if res['content-type'] =~ /json/
|
|
233
|
-
exception = Chef::JSONCompat.from_json(response_body)
|
|
234
|
-
msg = "HTTP Request Returned #{res.code} #{res.message}: "
|
|
235
|
-
msg << (exception["error"].respond_to?(:join) ? exception["error"].join(", ") : exception["error"].to_s)
|
|
236
|
-
Chef::Log.warn(msg)
|
|
237
|
-
end
|
|
238
|
-
res.error!
|
|
239
|
-
end
|
|
240
|
-
end
|
|
241
|
-
end
|
|
242
|
-
|
|
243
151
|
# Runs an HTTP request to a JSON API with JSON body. File Download not supported.
|
|
244
152
|
def api_request(method, url, headers={}, data=false)
|
|
245
153
|
json_body = data ? Chef::JSONCompat.to_json(data) : nil
|
|
@@ -267,26 +175,20 @@ class Chef
|
|
|
267
175
|
|
|
268
176
|
response_body = decompress_body(response)
|
|
269
177
|
|
|
270
|
-
|
|
271
|
-
# Don't attempt to parse it.
|
|
272
|
-
if response.kind_of?(Net::HTTPNoContent)
|
|
273
|
-
response_body
|
|
274
|
-
elsif response.kind_of?(Net::HTTPSuccess)
|
|
178
|
+
if response.kind_of?(Net::HTTPSuccess)
|
|
275
179
|
if response['content-type'] =~ /json/
|
|
276
180
|
Chef::JSONCompat.from_json(response_body.chomp)
|
|
277
181
|
else
|
|
278
182
|
Chef::Log.warn("Expected JSON response, but got content-type '#{response['content-type']}'")
|
|
279
|
-
response_body
|
|
183
|
+
response_body.to_s
|
|
280
184
|
end
|
|
185
|
+
elsif response.kind_of?(Net::HTTPNotModified) # Must be tested before Net::HTTPRedirection because it's subclass.
|
|
186
|
+
false
|
|
281
187
|
elsif redirect_location = redirected_to(response)
|
|
282
|
-
|
|
283
|
-
follow_redirect {api_request(method, create_url(redirect_location), headers)}
|
|
284
|
-
else
|
|
285
|
-
raise Exceptions::InvalidRedirect, "#{method} request was redirected from #{url} to #{redirect_location}. Only GET and HEAD support redirects."
|
|
286
|
-
end
|
|
188
|
+
follow_redirect {api_request(:GET, create_url(redirect_location))}
|
|
287
189
|
else
|
|
288
190
|
# have to decompress the body before making an exception for it. But the body could be nil.
|
|
289
|
-
response.body.replace(
|
|
191
|
+
response.body.replace(response_body) if response.body.respond_to?(:replace)
|
|
290
192
|
|
|
291
193
|
if response['content-type'] =~ /json/
|
|
292
194
|
exception = Chef::JSONCompat.from_json(response_body)
|
|
@@ -306,7 +208,7 @@ class Chef
|
|
|
306
208
|
end
|
|
307
209
|
|
|
308
210
|
def decompress_body(response)
|
|
309
|
-
if gzip_disabled?
|
|
211
|
+
if gzip_disabled? || response.body.nil?
|
|
310
212
|
response.body
|
|
311
213
|
else
|
|
312
214
|
case response[CONTENT_ENCODING]
|
|
@@ -340,7 +242,7 @@ class Chef
|
|
|
340
242
|
tempfile = stream_to_tempfile(url, r, &block)
|
|
341
243
|
yield tempfile
|
|
342
244
|
ensure
|
|
343
|
-
tempfile
|
|
245
|
+
tempfile.close!
|
|
344
246
|
end
|
|
345
247
|
else
|
|
346
248
|
tempfile = stream_to_tempfile(url, r)
|
|
@@ -449,10 +351,9 @@ class Chef
|
|
|
449
351
|
|
|
450
352
|
def build_headers(method, url, headers={}, json_body=false, raw=false)
|
|
451
353
|
headers = @default_headers.merge(headers)
|
|
452
|
-
headers['Host'] = "#{url.host}:#{url.port}"
|
|
453
354
|
#headers['Accept'] = "application/json" unless raw
|
|
454
355
|
headers['Accept'] = "application/json" unless raw
|
|
455
|
-
headers["Content-Type"] = 'application/json' if json_body
|
|
356
|
+
headers["Content-Type"] = 'application/json' if json_body
|
|
456
357
|
headers['Content-Length'] = json_body.bytesize.to_s if json_body
|
|
457
358
|
headers[RESTRequest::ACCEPT_ENCODING] = RESTRequest::ENCODING_GZIP_DEFLATE unless gzip_disabled?
|
|
458
359
|
headers.merge!(authentication_headers(method, url, json_body)) if sign_requests?
|
|
@@ -515,5 +416,23 @@ class Chef
|
|
|
515
416
|
end
|
|
516
417
|
end
|
|
517
418
|
|
|
419
|
+
def load_signing_key(key_file, raw_key = nil)
|
|
420
|
+
if (!!key_file)
|
|
421
|
+
@raw_key = IO.read(key_file).strip
|
|
422
|
+
elsif (!!raw_key)
|
|
423
|
+
@raw_key = raw_key.strip
|
|
424
|
+
else
|
|
425
|
+
return nil
|
|
426
|
+
end
|
|
427
|
+
@key = OpenSSL::PKey::RSA.new(@raw_key)
|
|
428
|
+
rescue SystemCallError, IOError => e
|
|
429
|
+
Chef::Log.warn "Failed to read the private key #{key_file}: #{e.inspect}"
|
|
430
|
+
raise Chef::Exceptions::PrivateKeyMissing, "I cannot read #{key_file}, which you told me to use to sign requests!"
|
|
431
|
+
rescue OpenSSL::PKey::RSAError
|
|
432
|
+
msg = "The file #{key_file} or :raw_key option does not contain a correctly formatted private key.\n"
|
|
433
|
+
msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
|
|
434
|
+
raise Chef::Exceptions::InvalidPrivateKey, msg
|
|
435
|
+
end
|
|
436
|
+
|
|
518
437
|
end
|
|
519
438
|
end
|
|
@@ -20,22 +20,20 @@
|
|
|
20
20
|
# See the License for the specific language governing permissions and
|
|
21
21
|
# limitations under the License.
|
|
22
22
|
#
|
|
23
|
-
require 'chef/exceptions'
|
|
24
23
|
require 'chef/log'
|
|
25
24
|
require 'mixlib/authentication/signedheaderauth'
|
|
26
25
|
|
|
27
26
|
class Chef
|
|
28
27
|
class REST
|
|
29
28
|
class AuthCredentials
|
|
30
|
-
attr_reader :
|
|
29
|
+
attr_reader :client_name, :key
|
|
31
30
|
|
|
32
|
-
def initialize(client_name=nil,
|
|
33
|
-
@client_name, @
|
|
34
|
-
load_signing_key if sign_requests?
|
|
31
|
+
def initialize(client_name=nil, key=nil)
|
|
32
|
+
@client_name, @key = client_name, key
|
|
35
33
|
end
|
|
36
34
|
|
|
37
35
|
def sign_requests?
|
|
38
|
-
!!
|
|
36
|
+
!!key
|
|
39
37
|
end
|
|
40
38
|
|
|
41
39
|
def signature_headers(request_params={})
|
|
@@ -54,20 +52,6 @@ class Chef
|
|
|
54
52
|
signed.inject({}){|memo, kv| memo["#{kv[0].to_s.upcase}"] = kv[1];memo}
|
|
55
53
|
end
|
|
56
54
|
|
|
57
|
-
private
|
|
58
|
-
|
|
59
|
-
def load_signing_key
|
|
60
|
-
@raw_key = IO.read(key_file).strip
|
|
61
|
-
@key = OpenSSL::PKey::RSA.new(@raw_key)
|
|
62
|
-
rescue SystemCallError, IOError => e
|
|
63
|
-
Chef::Log.warn "Failed to read the private key #{key_file}: #{e.inspect}"
|
|
64
|
-
raise Chef::Exceptions::PrivateKeyMissing, "I cannot read #{key_file}, which you told me to use to sign requests!"
|
|
65
|
-
rescue OpenSSL::PKey::RSAError
|
|
66
|
-
msg = "The file #{key_file} does not contain a correctly formatted private key.\n"
|
|
67
|
-
msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
|
|
68
|
-
raise Chef::Exceptions::InvalidPrivateKey, msg
|
|
69
|
-
end
|
|
70
|
-
|
|
71
55
|
end
|
|
72
56
|
end
|
|
73
57
|
end
|
|
@@ -82,10 +82,6 @@ class Chef
|
|
|
82
82
|
@url.host
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
def hostname
|
|
86
|
-
@url.hostname
|
|
87
|
-
end
|
|
88
|
-
|
|
89
85
|
def port
|
|
90
86
|
@url.port
|
|
91
87
|
end
|
|
@@ -159,12 +155,12 @@ class Chef
|
|
|
159
155
|
def configure_http_client
|
|
160
156
|
http_proxy = proxy_uri
|
|
161
157
|
if http_proxy.nil?
|
|
162
|
-
@http_client = Net::HTTP.new(
|
|
158
|
+
@http_client = Net::HTTP.new(host, port)
|
|
163
159
|
else
|
|
164
160
|
Chef::Log.debug("Using #{http_proxy.host}:#{http_proxy.port} for proxy")
|
|
165
161
|
user = Chef::Config["#{url.scheme}_proxy_user"]
|
|
166
162
|
pass = Chef::Config["#{url.scheme}_proxy_pass"]
|
|
167
|
-
@http_client = Net::HTTP.Proxy(http_proxy.host, http_proxy.port, user, pass).new(
|
|
163
|
+
@http_client = Net::HTTP.Proxy(http_proxy.host, http_proxy.port, user, pass).new(host, port)
|
|
168
164
|
end
|
|
169
165
|
if url.scheme == HTTPS
|
|
170
166
|
@http_client.use_ssl = true
|
|
@@ -200,7 +196,6 @@ class Chef
|
|
|
200
196
|
end
|
|
201
197
|
|
|
202
198
|
@http_client.read_timeout = config[:rest_timeout]
|
|
203
|
-
@http_client.open_timeout = config[:rest_timeout]
|
|
204
199
|
end
|
|
205
200
|
|
|
206
201
|
|
data/lib/chef/role.rb
CHANGED
|
@@ -21,9 +21,7 @@
|
|
|
21
21
|
require 'chef/config'
|
|
22
22
|
require 'chef/mixin/params_validate'
|
|
23
23
|
require 'chef/mixin/from_file'
|
|
24
|
-
require 'chef/couchdb'
|
|
25
24
|
require 'chef/run_list'
|
|
26
|
-
require 'chef/index_queue'
|
|
27
25
|
require 'chef/mash'
|
|
28
26
|
require 'chef/json_compat'
|
|
29
27
|
require 'chef/search/query'
|
|
@@ -33,51 +31,14 @@ class Chef
|
|
|
33
31
|
|
|
34
32
|
include Chef::Mixin::FromFile
|
|
35
33
|
include Chef::Mixin::ParamsValidate
|
|
36
|
-
include Chef::IndexQueue::Indexable
|
|
37
|
-
|
|
38
|
-
DESIGN_DOCUMENT = {
|
|
39
|
-
"version" => 6,
|
|
40
|
-
"language" => "javascript",
|
|
41
|
-
"views" => {
|
|
42
|
-
"all" => {
|
|
43
|
-
"map" => <<-EOJS
|
|
44
|
-
function(doc) {
|
|
45
|
-
if (doc.chef_type == "role") {
|
|
46
|
-
emit(doc.name, doc);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
EOJS
|
|
50
|
-
},
|
|
51
|
-
"all_id" => {
|
|
52
|
-
"map" => <<-EOJS
|
|
53
|
-
function(doc) {
|
|
54
|
-
if (doc.chef_type == "role") {
|
|
55
|
-
emit(doc.name, doc.name);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
EOJS
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
attr_accessor :couchdb_rev, :couchdb
|
|
64
|
-
attr_reader :couchdb_id
|
|
65
34
|
|
|
66
35
|
# Create a new Chef::Role object.
|
|
67
|
-
def initialize
|
|
36
|
+
def initialize
|
|
68
37
|
@name = ''
|
|
69
38
|
@description = ''
|
|
70
39
|
@default_attributes = Mash.new
|
|
71
40
|
@override_attributes = Mash.new
|
|
72
41
|
@env_run_lists = {"_default" => Chef::RunList.new}
|
|
73
|
-
@couchdb_rev = nil
|
|
74
|
-
@couchdb_id = nil
|
|
75
|
-
@couchdb = couchdb || Chef::CouchDB.new
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def couchdb_id=(value)
|
|
79
|
-
@couchdb_id = value
|
|
80
|
-
self.index_id = value
|
|
81
42
|
end
|
|
82
43
|
|
|
83
44
|
def chef_server_rest
|
|
@@ -177,7 +138,6 @@ class Chef
|
|
|
177
138
|
accumulator
|
|
178
139
|
end
|
|
179
140
|
}
|
|
180
|
-
result["_rev"] = couchdb_rev if couchdb_rev
|
|
181
141
|
result
|
|
182
142
|
end
|
|
183
143
|
|
|
@@ -214,20 +174,9 @@ class Chef
|
|
|
214
174
|
end
|
|
215
175
|
role.env_run_lists(env_run_list_hash)
|
|
216
176
|
|
|
217
|
-
role.couchdb_rev = o["_rev"] if o.has_key?("_rev")
|
|
218
|
-
role.index_id = role.couchdb_id
|
|
219
|
-
role.couchdb_id = o["_id"] if o.has_key?("_id")
|
|
220
177
|
role
|
|
221
178
|
end
|
|
222
179
|
|
|
223
|
-
# List all the Chef::Role objects in the CouchDB. If inflate is set to true, you will get
|
|
224
|
-
# the full list of all Roles, fully inflated.
|
|
225
|
-
def self.cdb_list(inflate=false, couchdb=nil)
|
|
226
|
-
rs = (couchdb || Chef::CouchDB.new).list("roles", inflate)
|
|
227
|
-
lookup = (inflate ? "value" : "key")
|
|
228
|
-
rs["rows"].collect { |r| r[lookup] }
|
|
229
|
-
end
|
|
230
|
-
|
|
231
180
|
# Get the list of all roles from the API.
|
|
232
181
|
def self.list(inflate=false)
|
|
233
182
|
if inflate
|
|
@@ -241,24 +190,11 @@ class Chef
|
|
|
241
190
|
end
|
|
242
191
|
end
|
|
243
192
|
|
|
244
|
-
# Load a role by name from CouchDB
|
|
245
|
-
def self.cdb_load(name, couchdb=nil)
|
|
246
|
-
(couchdb || Chef::CouchDB.new).load("role", name)
|
|
247
|
-
end
|
|
248
|
-
|
|
249
193
|
# Load a role by name from the API
|
|
250
194
|
def self.load(name)
|
|
251
195
|
chef_server_rest.get_rest("roles/#{name}")
|
|
252
196
|
end
|
|
253
197
|
|
|
254
|
-
def self.exists?(rolename, couchdb)
|
|
255
|
-
begin
|
|
256
|
-
self.cdb_load(rolename, couchdb)
|
|
257
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
|
258
|
-
nil
|
|
259
|
-
end
|
|
260
|
-
end
|
|
261
|
-
|
|
262
198
|
def environment(env_name)
|
|
263
199
|
chef_server_rest.get_rest("roles/#{@name}/environments/#{env_name}")
|
|
264
200
|
end
|
|
@@ -267,21 +203,11 @@ class Chef
|
|
|
267
203
|
chef_server_rest.get_rest("roles/#{@name}/environments")
|
|
268
204
|
end
|
|
269
205
|
|
|
270
|
-
# Remove this role from the CouchDB
|
|
271
|
-
def cdb_destroy
|
|
272
|
-
couchdb.delete("role", @name, couchdb_rev)
|
|
273
|
-
end
|
|
274
|
-
|
|
275
206
|
# Remove this role via the REST API
|
|
276
207
|
def destroy
|
|
277
208
|
chef_server_rest.delete_rest("roles/#{@name}")
|
|
278
209
|
end
|
|
279
210
|
|
|
280
|
-
# Save this role to the CouchDB
|
|
281
|
-
def cdb_save
|
|
282
|
-
self.couchdb_rev = couchdb.store("role", @name, self)["rev"]
|
|
283
|
-
end
|
|
284
|
-
|
|
285
211
|
# Save this role via the REST API
|
|
286
212
|
def save
|
|
287
213
|
begin
|
|
@@ -299,11 +225,6 @@ class Chef
|
|
|
299
225
|
self
|
|
300
226
|
end
|
|
301
227
|
|
|
302
|
-
# Set up our CouchDB design document
|
|
303
|
-
def self.create_design_document(couchdb=nil)
|
|
304
|
-
(couchdb || Chef::CouchDB.new).create_design_document("roles", DESIGN_DOCUMENT)
|
|
305
|
-
end
|
|
306
|
-
|
|
307
228
|
# As a string
|
|
308
229
|
def to_s
|
|
309
230
|
"role[#{@name}]"
|
|
@@ -328,22 +249,5 @@ class Chef
|
|
|
328
249
|
end
|
|
329
250
|
end
|
|
330
251
|
|
|
331
|
-
# Sync all the json roles with couchdb from disk
|
|
332
|
-
def self.sync_from_disk_to_couchdb
|
|
333
|
-
Dir[File.join(Chef::Config[:role_path], "*.json")].each do |role_file|
|
|
334
|
-
short_name = File.basename(role_file, ".json")
|
|
335
|
-
Chef::Log.warn("Loading #{short_name}")
|
|
336
|
-
r = Chef::Role.from_disk(short_name, "json")
|
|
337
|
-
begin
|
|
338
|
-
couch_role = Chef::Role.cdb_load(short_name)
|
|
339
|
-
r.couchdb_rev = couch_role.couchdb_rev
|
|
340
|
-
Chef::Log.debug("Replacing role #{short_name} with data from #{role_file}")
|
|
341
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
|
342
|
-
Chef::Log.debug("Creating role #{short_name} with data from #{role_file}")
|
|
343
|
-
end
|
|
344
|
-
r.cdb_save
|
|
345
|
-
end
|
|
346
|
-
end
|
|
347
|
-
|
|
348
252
|
end
|
|
349
253
|
end
|