chef 11.4.4 → 11.6.0.hotfix.1
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/README.md +1 -1
- data/Rakefile +18 -1
- data/bin/chef-service-manager +37 -0
- 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/chef-shell.1.html +4 -4
- data/distro/common/html/chef-solo.8.html +12 -18
- 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 +7 -10
- data/distro/common/html/knife-data-bag.1.html +7 -10
- data/distro/common/html/knife-environment.1.html +6 -8
- data/distro/common/html/knife-exec.1.html +4 -4
- 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 +4 -4
- data/distro/common/man/man1/chef-shell.1 +1 -1
- 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 +2 -15
- data/distro/common/man/man1/knife-data-bag.1 +2 -15
- data/distro/common/man/man1/knife-environment.1 +2 -12
- data/distro/common/man/man1/knife-exec.1 +1 -1
- 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 +1 -1
- 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 +4 -36
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/debian/etc/init.d/chef-client +4 -2
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +1 -1
- data/lib/chef/application.rb +5 -12
- data/lib/chef/application/apply.rb +2 -0
- data/lib/chef/application/client.rb +12 -12
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +4 -5
- data/lib/chef/application/windows_service.rb +113 -56
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/chef_fs.rb +2 -4
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +145 -93
- data/lib/chef/chef_fs/config.rb +205 -0
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -0
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +29 -0
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -0
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +56 -0
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +128 -0
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +51 -0
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -0
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -0
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +27 -0
- data/lib/chef/chef_fs/file_system.rb +195 -127
- data/lib/chef/chef_fs/file_system/acl_dir.rb +64 -0
- data/lib/chef/chef_fs/file_system/acl_entry.rb +58 -0
- data/lib/chef/chef_fs/file_system/acls_dir.rb +68 -0
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +98 -39
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +85 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +71 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +36 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +14 -63
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +93 -3
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +35 -9
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +67 -32
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +13 -6
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +102 -21
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +12 -21
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +14 -8
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +36 -0
- data/lib/chef/chef_fs/file_system/environments_dir.rb +60 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/file_system_error.rb +3 -1
- data/lib/chef/chef_fs/file_system/memory_dir.rb +52 -0
- data/lib/chef/chef_fs/file_system/memory_file.rb +17 -0
- data/lib/chef/chef_fs/file_system/memory_root.rb +21 -0
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +48 -0
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +2 -2
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +17 -9
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
- data/lib/chef/chef_fs/file_system/not_found_error.rb +2 -2
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +34 -0
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +48 -0
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +42 -13
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +81 -27
- data/lib/chef/chef_fs/knife.rb +68 -29
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +29 -3
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +46 -20
- data/lib/chef/config.rb +59 -61
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/synchronizer.rb +8 -6
- data/lib/chef/cookbook/syntax_check.rb +17 -2
- data/lib/chef/cookbook_uploader.rb +10 -1
- data/lib/chef/cookbook_version.rb +0 -109
- data/lib/chef/data_bag.rb +15 -6
- data/lib/chef/deprecation/mixin/template.rb +49 -0
- data/lib/chef/deprecation/provider/cookbook_file.rb +55 -0
- data/lib/chef/deprecation/provider/file.rb +197 -0
- data/lib/chef/deprecation/provider/remote_file.rb +86 -0
- data/lib/chef/deprecation/provider/template.rb +63 -0
- data/lib/chef/deprecation/warnings.rb +38 -0
- data/lib/chef/encrypted_data_bag_item.rb +153 -61
- data/lib/chef/environment.rb +34 -3
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +27 -2
- data/lib/chef/file_access_control/unix.rb +64 -7
- data/lib/chef/file_access_control/windows.rb +22 -11
- data/lib/chef/file_content_management/content_base.rb +56 -0
- data/lib/chef/file_content_management/deploy.rb +38 -0
- data/lib/chef/file_content_management/deploy/cp.rb +48 -0
- data/lib/chef/file_content_management/deploy/mv_unix.rb +77 -0
- data/lib/chef/file_content_management/deploy/mv_windows.rb +95 -0
- data/lib/chef/file_content_management/tempfile.rb +61 -0
- data/lib/chef/formatters/doc.rb +1 -1
- data/lib/chef/formatters/error_descriptor.rb +5 -4
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +23 -3
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +4 -0
- data/lib/chef/json_compat.rb +3 -0
- data/lib/chef/knife.rb +12 -3
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/centos5-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/chef-full.erb +4 -4
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +3 -3
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +3 -3
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +3 -3
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +1 -0
- data/lib/chef/knife/cookbook_upload.rb +4 -9
- data/lib/chef/knife/core/bootstrap_context.rb +10 -4
- data/lib/chef/knife/core/generic_presenter.rb +16 -0
- data/lib/chef/knife/core/node_editor.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/ui.rb +19 -4
- data/lib/chef/knife/delete.rb +76 -9
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +22 -5
- data/lib/chef/knife/download.rb +16 -3
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -7
- data/lib/chef/knife/list.rb +91 -47
- data/lib/chef/knife/node_run_list_set.rb +66 -0
- data/lib/chef/knife/node_show.rb +1 -7
- data/lib/chef/knife/raw.rb +20 -64
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +5 -6
- data/lib/chef/knife/show.rb +34 -11
- data/lib/chef/knife/ssh.rb +8 -0
- data/lib/chef/knife/upload.rb +23 -4
- data/lib/chef/knife/user_show.rb +2 -5
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language_include_recipe.rb +1 -1
- data/lib/chef/mixin/params_validate.rb +19 -9
- data/lib/chef/mixin/template.rb +126 -36
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/monkey_patches/file.rb +26 -0
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +4 -0
- data/lib/chef/platform.rb +4 -490
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{monkey_patches/dir.rb → platform/query_helpers.rb} +25 -19
- data/lib/chef/provider.rb +12 -9
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/cookbook_file.rb +9 -78
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +24 -20
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +19 -22
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +299 -217
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- data/lib/chef/provider/group/usermod.rb +2 -2
- data/lib/chef/provider/ifconfig.rb +25 -35
- data/lib/chef/provider/ifconfig/debian.rb +71 -0
- data/lib/chef/provider/ifconfig/redhat.rb +47 -0
- data/lib/chef/provider/link.rb +10 -3
- data/lib/chef/provider/mount.rb +1 -1
- data/lib/chef/provider/mount/mount.rb +8 -3
- data/lib/chef/provider/mount/windows.rb +4 -1
- data/lib/chef/provider/package/portage.rb +9 -4
- data/lib/chef/provider/package/rubygems.rb +45 -10
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/yum.rb +19 -12
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/remote_directory.rb +5 -6
- data/lib/chef/provider/remote_file.rb +12 -108
- data/lib/chef/provider/remote_file/cache_control_data.rb +165 -0
- data/lib/chef/provider/remote_file/content.rb +75 -0
- data/lib/chef/provider/remote_file/fetcher.rb +43 -0
- data/lib/chef/provider/remote_file/ftp.rb +183 -0
- data/lib/chef/provider/remote_file/http.rb +124 -0
- data/lib/chef/provider/remote_file/local_file.rb +47 -0
- data/lib/chef/provider/route.rb +6 -2
- data/lib/chef/provider/script.rb +14 -2
- data/lib/chef/provider/service/macosx.rb +16 -10
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -78
- data/lib/chef/provider/template/content.rb +61 -0
- data/lib/chef/provider/user/solaris.rb +90 -0
- data/lib/chef/provider/user/useradd.rb +76 -63
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +16 -0
- data/lib/chef/resource.rb +23 -2
- data/lib/chef/resource/batch.rb +31 -0
- data/lib/chef/resource/conditional.rb +4 -0
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -0
- data/lib/chef/resource/file.rb +31 -3
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +1 -1
- data/lib/chef/resource/mount.rb +29 -2
- data/lib/chef/resource/powershell_script.rb +31 -0
- data/lib/chef/resource/remote_file.rb +47 -1
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +45 -11
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/rest.rb +13 -4
- data/lib/chef/rest/rest_request.rb +5 -1
- data/lib/chef/run_context/cookbook_compiler.rb +3 -3
- data/lib/chef/run_list/run_list_expansion.rb +1 -1
- data/lib/chef/run_lock.rb +7 -1
- data/lib/chef/runner.rb +0 -1
- data/lib/chef/scan_access_control.rb +6 -1
- data/lib/chef/search/query.rb +2 -2
- data/lib/chef/shell/shell_session.rb +2 -2
- data/lib/chef/util/backup.rb +84 -0
- data/lib/chef/util/diff.rb +145 -0
- data/lib/chef/util/file_edit.rb +1 -1
- data/lib/chef/util/selinux.rb +100 -0
- data/lib/chef/util/windows/net_user.rb +14 -1
- data/lib/chef/util/windows/volume.rb +2 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version/platform.rb +42 -0
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/version_constraint.rb +6 -5
- data/lib/chef/version_constraint/platform.rb +26 -0
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/version.rb +25 -8
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.0.orig.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -0
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test_1.1.orig.tar.gz +0 -0
- data/spec/data/apt/var/www/apt/conf/distributions +7 -0
- data/spec/data/apt/var/www/apt/conf/incoming +4 -0
- data/spec/data/apt/var/www/apt/conf/pulls +3 -0
- data/spec/data/apt/var/www/apt/db/checksums.db +0 -0
- data/spec/data/apt/var/www/apt/db/contents.cache.db +0 -0
- data/spec/data/apt/var/www/apt/db/packages.db +0 -0
- data/spec/data/apt/var/www/apt/db/references.db +0 -0
- data/spec/data/apt/var/www/apt/db/release.caches.db +0 -0
- data/spec/data/apt/var/www/apt/db/version +4 -0
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages.gz +0 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -0
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-i386/Packages +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/var/www/apt/pool/main/c/chef-integration-test/chef-integration-test_1.1-1_amd64.deb +0 -0
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -0
- data/spec/data/bootstrap/secret.erb +9 -0
- data/spec/data/cookbooks/ignorken/recipes/default.rb +1 -0
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +2 -0
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -0
- data/spec/data/cookbooks/openldap/files/default/.ssh/id_rsa +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -0
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -0
- data/spec/data/cookbooks/openldap/templates/default/all_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/openldap/templates/default/some_windows_line_endings.erb +4 -0
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -0
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -0
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -0
- data/spec/data/git_bundles/example-repo.gitbundle +0 -0
- data/spec/data/knife-home/.chef/plugins/knife/example_home_subcommand.rb +0 -0
- data/spec/data/knife_subcommand/test_yourself.rb +8 -0
- data/spec/data/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/remote_file/nyan_cat.png.gz +0 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/exec_spec.rb +2 -2
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +101 -0
- data/spec/functional/resource/batch_spec.rb +64 -0
- data/spec/functional/resource/cookbook_file_spec.rb +2 -3
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +2 -2
- data/spec/functional/resource/file_spec.rb +17 -1
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +422 -388
- data/spec/functional/resource/package_spec.rb +297 -0
- data/spec/functional/resource/powershell_spec.rb +188 -0
- data/spec/functional/resource/registry_spec.rb +8 -4
- data/spec/functional/resource/remote_directory_spec.rb +2 -2
- data/spec/functional/resource/remote_file_spec.rb +97 -29
- data/spec/functional/resource/template_spec.rb +173 -17
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +5 -0
- data/spec/functional/shell_spec.rb +2 -1
- data/spec/functional/win32/service_manager_spec.rb +269 -0
- data/spec/functional/win32/versions_spec.rb +78 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +805 -0
- data/spec/integration/knife/chef_repository_file_system_spec.rb +276 -0
- data/spec/integration/knife/chefignore_spec.rb +271 -0
- data/spec/integration/knife/delete_spec.rb +944 -0
- data/spec/integration/knife/deps_spec.rb +648 -0
- data/spec/integration/knife/diff_spec.rb +536 -0
- data/spec/integration/knife/download_spec.rb +962 -0
- data/spec/integration/knife/list_spec.rb +633 -0
- data/spec/integration/knife/raw_spec.rb +166 -0
- data/spec/integration/knife/redirection_spec.rb +57 -0
- data/spec/integration/knife/show_spec.rb +158 -0
- data/spec/integration/knife/upload_spec.rb +1060 -0
- data/spec/integration/solo/solo_spec.rb +41 -0
- data/spec/spec_helper.rb +55 -1
- data/spec/support/chef_helpers.rb +32 -0
- data/spec/support/platform_helpers.rb +40 -0
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/directory_resource.rb +43 -16
- data/spec/support/shared/functional/file_resource.rb +661 -20
- data/spec/support/shared/functional/securable_resource.rb +109 -8
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +39 -31
- data/spec/support/shared/integration/integration_helper.rb +166 -0
- data/spec/support/shared/integration/knife_support.rb +171 -0
- data/spec/support/shared/unit/execute_resource.rb +125 -0
- data/spec/support/shared/unit/file_system_support.rb +8 -48
- data/spec/support/shared/unit/provider/file.rb +609 -0
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +407 -0
- data/spec/support/shared/unit/script_resource.rb +52 -0
- data/spec/support/shared/unit/windows_script_resource.rb +48 -0
- data/spec/tiny_server.rb +13 -11
- data/spec/unit/application/client_spec.rb +39 -1
- data/spec/unit/application/knife_spec.rb +12 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +57 -2
- data/spec/unit/chef_fs/diff_spec.rb +30 -31
- data/spec/unit/chef_fs/file_pattern_spec.rb +2 -2
- data/spec/unit/chef_fs/file_system_spec.rb +2 -3
- data/spec/unit/client_spec.rb +20 -1
- data/spec/unit/config_spec.rb +70 -52
- data/spec/unit/cookbook/synchronizer_spec.rb +49 -1
- data/spec/unit/cookbook/syntax_check_spec.rb +28 -3
- data/spec/unit/cookbook_loader_spec.rb +3 -2
- data/spec/unit/daemon_spec.rb +7 -7
- data/spec/unit/data_bag_spec.rb +7 -0
- data/spec/unit/deprecation_spec.rb +86 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +183 -88
- data/spec/unit/environment_spec.rb +98 -0
- data/spec/unit/exceptions_spec.rb +6 -1
- data/spec/unit/file_access_control_spec.rb +21 -1
- data/spec/unit/file_content_management/deploy/cp_spec.rb +46 -0
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +103 -0
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +179 -0
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +38 -2
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +3 -2
- data/spec/unit/knife/bootstrap_spec.rb +128 -29
- data/spec/unit/knife/configure_spec.rb +42 -26
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- data/spec/unit/knife/cookbook_upload_spec.rb +8 -4
- data/spec/unit/knife/core/bootstrap_context_spec.rb +78 -61
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +41 -0
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife_spec.rb +21 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +1 -0
- data/spec/unit/mixin/params_validate_spec.rb +35 -0
- data/spec/unit/mixin/template_spec.rb +69 -57
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node_spec.rb +7 -0
- data/spec/unit/platform_spec.rb +15 -1
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -183
- data/spec/unit/provider/cron/solaris_spec.rb +1 -1
- data/spec/unit/provider/deploy/revision_spec.rb +19 -11
- data/spec/unit/provider/deploy_spec.rb +2 -2
- data/spec/unit/provider/directory_spec.rb +23 -23
- data/spec/unit/provider/execute_spec.rb +27 -1
- data/spec/unit/provider/file/content_spec.rb +101 -0
- data/spec/unit/provider/file_spec.rb +25 -484
- data/spec/unit/provider/git_spec.rb +224 -28
- data/spec/unit/provider/group/usermod_spec.rb +3 -1
- data/spec/unit/provider/ifconfig/debian_spec.rb +89 -0
- data/spec/unit/provider/ifconfig/redhat_spec.rb +71 -0
- data/spec/unit/provider/ifconfig_spec.rb +0 -33
- data/spec/unit/provider/mount/mount_spec.rb +33 -2
- data/spec/unit/provider/mount/windows_spec.rb +4 -1
- data/spec/unit/provider/mount_spec.rb +16 -6
- data/spec/unit/provider/package/portage_spec.rb +44 -0
- data/spec/unit/provider/package/rubygems_spec.rb +44 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/yum_spec.rb +36 -39
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +0 -4
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/remote_directory_spec.rb +0 -4
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +211 -0
- data/spec/unit/provider/remote_file/content_spec.rb +230 -0
- data/spec/unit/provider/remote_file/fetcher_spec.rb +75 -0
- data/spec/unit/provider/remote_file/ftp_spec.rb +224 -0
- data/spec/unit/provider/remote_file/http_spec.rb +319 -0
- data/spec/unit/provider/remote_file/local_file_spec.rb +60 -0
- data/spec/unit/provider/remote_file_spec.rb +33 -295
- data/spec/unit/provider/route_spec.rb +25 -9
- data/spec/unit/provider/service/macosx_spec.rb +176 -152
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +21 -18
- data/spec/unit/provider/service/systemd_service_spec.rb +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +2 -2
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -184
- data/spec/unit/provider/user/solaris_spec.rb +80 -0
- data/spec/unit/provider/user/useradd_spec.rb +12 -358
- data/spec/unit/resource/batch_spec.rb +48 -0
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -0
- data/spec/unit/resource/execute_spec.rb +3 -101
- data/spec/unit/resource/file_spec.rb +0 -5
- data/spec/unit/resource/group_spec.rb +9 -0
- data/spec/unit/resource/ifconfig_spec.rb +60 -1
- data/spec/unit/resource/link_spec.rb +1 -0
- data/spec/unit/resource/mount_spec.rb +37 -0
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/remote_file_spec.rb +44 -4
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/template_spec.rb +111 -8
- data/spec/unit/resource/user_spec.rb +7 -0
- data/spec/unit/resource_collection_spec.rb +61 -32
- data/spec/unit/resource_reporter_spec.rb +115 -102
- data/spec/unit/resource_spec.rb +170 -1
- data/spec/unit/rest/auth_credentials_spec.rb +2 -2
- data/spec/unit/rest_spec.rb +6 -2
- data/spec/unit/run_context/cookbook_compiler_spec.rb +9 -0
- data/spec/unit/runner_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +4 -2
- data/spec/unit/shell/shell_session_spec.rb +15 -2
- data/spec/unit/util/backup_spec.rb +149 -0
- data/spec/unit/util/diff_spec.rb +596 -0
- data/spec/unit/util/selinux_spec.rb +172 -0
- data/spec/unit/version/platform_spec.rb +61 -0
- data/spec/unit/version_constraint/platform_spec.rb +46 -0
- data/spec/unit/version_constraint_spec.rb +5 -0
- metadata +233 -10
- data/lib/chef/chef_fs/file_system/data_bag_item.rb +0 -59
- data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +0 -237
- data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +0 -568
- data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +0 -220
|
@@ -32,7 +32,11 @@ class Chef
|
|
|
32
32
|
super
|
|
33
33
|
@resource_name = :remote_file
|
|
34
34
|
@action = "create"
|
|
35
|
-
@source =
|
|
35
|
+
@source = []
|
|
36
|
+
@use_etag = true
|
|
37
|
+
@use_last_modified = true
|
|
38
|
+
@ftp_active_mode = false
|
|
39
|
+
@headers = {}
|
|
36
40
|
@provider = Chef::Provider::RemoteFile
|
|
37
41
|
end
|
|
38
42
|
|
|
@@ -54,6 +58,48 @@ class Chef
|
|
|
54
58
|
)
|
|
55
59
|
end
|
|
56
60
|
|
|
61
|
+
# Disable or enable ETag and Last Modified conditional GET. Equivalent to
|
|
62
|
+
# use_etag(true_or_false)
|
|
63
|
+
# use_last_modified(true_or_false)
|
|
64
|
+
def use_conditional_get(true_or_false)
|
|
65
|
+
use_etag(true_or_false)
|
|
66
|
+
use_last_modified(true_or_false)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def use_etag(args=nil)
|
|
70
|
+
set_or_return(
|
|
71
|
+
:use_etag,
|
|
72
|
+
args,
|
|
73
|
+
:kind_of => [ TrueClass, FalseClass ]
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
alias :use_etags :use_etag
|
|
78
|
+
|
|
79
|
+
def use_last_modified(args=nil)
|
|
80
|
+
set_or_return(
|
|
81
|
+
:use_last_modified,
|
|
82
|
+
args,
|
|
83
|
+
:kind_of => [ TrueClass, FalseClass ]
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def ftp_active_mode(args=nil)
|
|
88
|
+
set_or_return(
|
|
89
|
+
:ftp_active_mode,
|
|
90
|
+
args,
|
|
91
|
+
:kind_of => [ TrueClass, FalseClass ]
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def headers(args=nil)
|
|
96
|
+
set_or_return(
|
|
97
|
+
:headers,
|
|
98
|
+
args,
|
|
99
|
+
:kind_of => Hash
|
|
100
|
+
)
|
|
101
|
+
end
|
|
102
|
+
|
|
57
103
|
def after_created
|
|
58
104
|
validate_source(@source)
|
|
59
105
|
end
|
data/lib/chef/resource/route.rb
CHANGED
|
@@ -29,6 +29,9 @@ class Chef
|
|
|
29
29
|
|
|
30
30
|
provides :template, :on_platforms => :all
|
|
31
31
|
|
|
32
|
+
attr_reader :inline_helper_blocks
|
|
33
|
+
attr_reader :inline_helper_modules
|
|
34
|
+
|
|
32
35
|
def initialize(name, run_context=nil)
|
|
33
36
|
super
|
|
34
37
|
@resource_name = :template
|
|
@@ -38,6 +41,9 @@ class Chef
|
|
|
38
41
|
@local = false
|
|
39
42
|
@variables = Hash.new
|
|
40
43
|
@provider = Chef::Provider::Template
|
|
44
|
+
@inline_helper_blocks = {}
|
|
45
|
+
@inline_helper_modules = []
|
|
46
|
+
@helper_modules = []
|
|
41
47
|
end
|
|
42
48
|
|
|
43
49
|
def source(file=nil)
|
|
@@ -71,6 +77,145 @@ class Chef
|
|
|
71
77
|
:kind_of => [ TrueClass, FalseClass ]
|
|
72
78
|
)
|
|
73
79
|
end
|
|
80
|
+
|
|
81
|
+
# Declares a helper method to be defined in the template context when
|
|
82
|
+
# rendering.
|
|
83
|
+
#
|
|
84
|
+
# === Example:
|
|
85
|
+
#
|
|
86
|
+
# ==== Basic usage:
|
|
87
|
+
# Given the following helper:
|
|
88
|
+
# helper(:static_value) { "hello from helper" }
|
|
89
|
+
# A template with the following code:
|
|
90
|
+
# <%= static_value %>
|
|
91
|
+
# Will render as;
|
|
92
|
+
# hello from helper
|
|
93
|
+
#
|
|
94
|
+
# ==== Referencing Instance Variables:
|
|
95
|
+
# Any instance variables available to the template can be referenced in
|
|
96
|
+
# the method body. For example, you can simplify accessing app-specific
|
|
97
|
+
# node attributes like this:
|
|
98
|
+
# helper(:app) { @node[:my_app_attributes] }
|
|
99
|
+
# And use it in a template like this:
|
|
100
|
+
# <%= app[:listen_ports] %>
|
|
101
|
+
# This is equivalent to the non-helper template code:
|
|
102
|
+
# <%= @node[:my_app_attributes][:listen_ports] %>
|
|
103
|
+
#
|
|
104
|
+
# ==== Method Arguments:
|
|
105
|
+
# Helper methods can also take arguments. The syntax available for
|
|
106
|
+
# argument specification will be dependent on ruby version. Ruby 1.8 only
|
|
107
|
+
# supports a subset of the argument specification syntax available for
|
|
108
|
+
# method definition, whereas 1.9 supports the full syntax.
|
|
109
|
+
#
|
|
110
|
+
# Continuing the above example of simplifying attribute access, we can
|
|
111
|
+
# define a helper to look up app-specific attributes like this:
|
|
112
|
+
# helper(:app) { |setting| @node[:my_app_attributes][setting] }
|
|
113
|
+
# The template can then look up attributes like this:
|
|
114
|
+
# <%= app(:listen_ports) %>
|
|
115
|
+
def helper(method_name, &block)
|
|
116
|
+
unless block_given?
|
|
117
|
+
raise Exceptions::ValidationFailed,
|
|
118
|
+
"`helper(:method)` requires a block argument (e.g., `helper(:method) { code }`)"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
unless method_name.kind_of?(Symbol)
|
|
122
|
+
raise Exceptions::ValidationFailed,
|
|
123
|
+
"method_name argument to `helper(method_name)` must be a symbol (e.g., `helper(:method) { code }`)"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
@inline_helper_blocks[method_name] = block
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Declares a module to define helper methods in the template's context
|
|
130
|
+
# when rendering. There are two primary forms.
|
|
131
|
+
#
|
|
132
|
+
# === Inline Module Definition
|
|
133
|
+
# When a block is given, the block is used to define a module which is
|
|
134
|
+
# then mixed in to the template context w/ `extend`.
|
|
135
|
+
#
|
|
136
|
+
# ==== Inline Module Example
|
|
137
|
+
# Given the following code in the template resource:
|
|
138
|
+
# helpers do
|
|
139
|
+
# # Add "syntax sugar" for referencing app-specific attributes
|
|
140
|
+
# def app(attribute)
|
|
141
|
+
# @node[:my_app_attributes][attribute]
|
|
142
|
+
# end
|
|
143
|
+
# end
|
|
144
|
+
# You can use it in the template like so:
|
|
145
|
+
# <%= app(:listen_ports) %>
|
|
146
|
+
# Which is equivalent to:
|
|
147
|
+
# <%= @node[:my_app_attributes][:listen_ports] %>
|
|
148
|
+
#
|
|
149
|
+
# === External Module Form
|
|
150
|
+
# When a module name is given, the template context will be extended with
|
|
151
|
+
# that module. This is the recommended way to customize template contexts
|
|
152
|
+
# when you need to define more than an handful of helper functions (but
|
|
153
|
+
# also try to keep your template helpers from getting out of hand--if you
|
|
154
|
+
# have very complex logic in your template helpers, you should further
|
|
155
|
+
# extract your code into separate libraries).
|
|
156
|
+
#
|
|
157
|
+
# ==== External Module Example
|
|
158
|
+
# To extract the above inline module code to a library, you'd create a
|
|
159
|
+
# library file like this:
|
|
160
|
+
# module MyTemplateHelper
|
|
161
|
+
# # Add "syntax sugar" for referencing app-specific attributes
|
|
162
|
+
# def app(attribute)
|
|
163
|
+
# @node[:my_app_attributes][attribute]
|
|
164
|
+
# end
|
|
165
|
+
# end
|
|
166
|
+
# And in the template resource:
|
|
167
|
+
# helpers(MyTemplateHelper)
|
|
168
|
+
# The template code in the above example will work unmodified.
|
|
169
|
+
def helpers(module_name=nil,&block)
|
|
170
|
+
if block_given? and !module_name.nil?
|
|
171
|
+
raise Exceptions::ValidationFailed,
|
|
172
|
+
"Passing both a module and block to #helpers is not supported. Call #helpers multiple times instead"
|
|
173
|
+
elsif block_given?
|
|
174
|
+
@inline_helper_modules << block
|
|
175
|
+
elsif module_name.kind_of?(::Module)
|
|
176
|
+
@helper_modules << module_name
|
|
177
|
+
elsif module_name.nil?
|
|
178
|
+
raise Exceptions::ValidationFailed,
|
|
179
|
+
"#helpers requires either a module name or inline module code as a block.\n" +
|
|
180
|
+
"e.g.: helpers do; helper_code; end;\n" +
|
|
181
|
+
"OR: helpers(MyHelpersModule)"
|
|
182
|
+
else
|
|
183
|
+
raise Exceptions::ValidationFailed,
|
|
184
|
+
"Argument to #helpers must be a module. You gave #{module_name.inspect} (#{module_name.class})"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Compiles all helpers from inline method definitions, inline module
|
|
189
|
+
# definitions, and external modules into an Array of Modules. The context
|
|
190
|
+
# object for the template is extended with these modules to provide
|
|
191
|
+
# per-resource template logic.
|
|
192
|
+
def helper_modules
|
|
193
|
+
compiled_helper_methods + compiled_helper_modules + @helper_modules
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
private
|
|
197
|
+
|
|
198
|
+
# compiles helper methods into a module that can be included in template context
|
|
199
|
+
def compiled_helper_methods
|
|
200
|
+
if inline_helper_blocks.empty?
|
|
201
|
+
[]
|
|
202
|
+
else
|
|
203
|
+
resource_helper_blocks = inline_helper_blocks
|
|
204
|
+
helper_mod = Module.new do
|
|
205
|
+
resource_helper_blocks.each do |method_name, method_body|
|
|
206
|
+
define_method(method_name, &method_body)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
[ helper_mod ]
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def compiled_helper_modules
|
|
214
|
+
@inline_helper_modules.map do |module_body|
|
|
215
|
+
Module.new(&module_body)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
74
219
|
end
|
|
75
220
|
end
|
|
76
221
|
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Edwards (<adamed@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2013 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 'chef/resource/script'
|
|
20
|
+
require 'chef/mixin/windows_architecture_helper'
|
|
21
|
+
|
|
22
|
+
class Chef
|
|
23
|
+
class Resource
|
|
24
|
+
class WindowsScript < Chef::Resource::Script
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def initialize(name, run_context, resource_name, interpreter_command)
|
|
29
|
+
super(name, run_context)
|
|
30
|
+
@interpreter = interpreter_command
|
|
31
|
+
@resource_name = resource_name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
include Chef::Mixin::WindowsArchitectureHelper
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
|
|
38
|
+
def architecture(arg=nil)
|
|
39
|
+
assert_architecture_compatible!(arg) if ! arg.nil?
|
|
40
|
+
result = set_or_return(
|
|
41
|
+
:architecture,
|
|
42
|
+
arg,
|
|
43
|
+
:kind_of => Symbol
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
protected
|
|
48
|
+
|
|
49
|
+
def assert_architecture_compatible!(desired_architecture)
|
|
50
|
+
if ! node_supports_windows_architecture?(node, desired_architecture)
|
|
51
|
+
raise Chef::Exceptions::Win32ArchitectureIncorrect,
|
|
52
|
+
"cannot execute script with requested architecture '#{desired_architecture.to_s}' on a system with architecture '#{node_windows_architecture(node)}'"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def node
|
|
57
|
+
run_context && run_context.node
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -24,6 +24,14 @@ class Chef
|
|
|
24
24
|
class ResourceCollection
|
|
25
25
|
include Enumerable
|
|
26
26
|
|
|
27
|
+
# Matches a multiple resource lookup specification,
|
|
28
|
+
# e.g., "service[nginx,unicorn]"
|
|
29
|
+
MULTIPLE_RESOURCE_MATCH = /^(.+)\[(.+?),(.+)\]$/
|
|
30
|
+
|
|
31
|
+
# Matches a single resource lookup specification,
|
|
32
|
+
# e.g., "service[nginx]"
|
|
33
|
+
SINGLE_RESOURCE_MATCH = /^(.+)\[(.+)\]$/
|
|
34
|
+
|
|
27
35
|
attr_reader :iterator
|
|
28
36
|
|
|
29
37
|
def initialize
|
|
@@ -52,8 +60,12 @@ class Chef
|
|
|
52
60
|
@resources << a
|
|
53
61
|
@resources_by_name[a.to_s] = @resources.length - 1
|
|
54
62
|
end
|
|
63
|
+
self
|
|
55
64
|
end
|
|
56
65
|
|
|
66
|
+
# 'push' is an alias method to <<
|
|
67
|
+
alias_method :push, :<<
|
|
68
|
+
|
|
57
69
|
def insert(resource)
|
|
58
70
|
is_chef_resource(resource)
|
|
59
71
|
if @insert_after_idx
|
|
@@ -73,14 +85,6 @@ class Chef
|
|
|
73
85
|
end
|
|
74
86
|
end
|
|
75
87
|
|
|
76
|
-
def push(*args)
|
|
77
|
-
args.flatten.each do |arg|
|
|
78
|
-
is_chef_resource(arg)
|
|
79
|
-
@resources.push(arg)
|
|
80
|
-
@resources_by_name[arg.to_s] = @resources.length - 1
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
88
|
def each
|
|
85
89
|
@resources.each do |resource|
|
|
86
90
|
yield resource
|
|
@@ -154,6 +158,36 @@ class Chef
|
|
|
154
158
|
# compat.
|
|
155
159
|
alias_method :resources, :find
|
|
156
160
|
|
|
161
|
+
|
|
162
|
+
# Returns true if +query_object+ is a valid string for looking up a
|
|
163
|
+
# resource, or raises InvalidResourceSpecification if not.
|
|
164
|
+
# === Arguments
|
|
165
|
+
# * query_object should be a string of the form
|
|
166
|
+
# "resource_type[resource_name]", a single element Hash (e.g., :service =>
|
|
167
|
+
# "apache2"), or a Chef::Resource (this is the happy path). Other arguments
|
|
168
|
+
# will raise an exception.
|
|
169
|
+
# === Returns
|
|
170
|
+
# * true returns true for all valid input.
|
|
171
|
+
# === Raises
|
|
172
|
+
# * Chef::Exceptions::InvalidResourceSpecification for all invalid input.
|
|
173
|
+
def validate_lookup_spec!(query_object)
|
|
174
|
+
case query_object
|
|
175
|
+
when Chef::Resource
|
|
176
|
+
true
|
|
177
|
+
when SINGLE_RESOURCE_MATCH, MULTIPLE_RESOURCE_MATCH
|
|
178
|
+
true
|
|
179
|
+
when Hash
|
|
180
|
+
true
|
|
181
|
+
when String
|
|
182
|
+
raise Chef::Exceptions::InvalidResourceSpecification,
|
|
183
|
+
"The string `#{query_object}' is not valid for resource collection lookup. Correct syntax is `resource_type[resource_name]'"
|
|
184
|
+
else
|
|
185
|
+
raise Chef::Exceptions::InvalidResourceSpecification,
|
|
186
|
+
"The object `#{query_object.inspect}' is not valid for resource collection lookup. " +
|
|
187
|
+
"Use a String like `resource_type[resource_name]' or a Chef::Resource object"
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
157
191
|
# Serialize this object as a hash
|
|
158
192
|
def to_json(*a)
|
|
159
193
|
instance_vars = Hash.new
|
|
@@ -192,7 +226,7 @@ class Chef
|
|
|
192
226
|
def find_resource_by_string(arg)
|
|
193
227
|
results = Array.new
|
|
194
228
|
case arg
|
|
195
|
-
when
|
|
229
|
+
when MULTIPLE_RESOURCE_MATCH
|
|
196
230
|
resource_type = $1
|
|
197
231
|
arg =~ /^.+\[(.+)\]$/
|
|
198
232
|
resource_list = $1
|
|
@@ -200,13 +234,13 @@ class Chef
|
|
|
200
234
|
resource_name = "#{resource_type}[#{name}]"
|
|
201
235
|
results << lookup(resource_name)
|
|
202
236
|
end
|
|
203
|
-
when
|
|
237
|
+
when SINGLE_RESOURCE_MATCH
|
|
204
238
|
resource_type = $1
|
|
205
239
|
name = $2
|
|
206
240
|
resource_name = "#{resource_type}[#{name}]"
|
|
207
241
|
results << lookup(resource_name)
|
|
208
242
|
else
|
|
209
|
-
raise ArgumentError, "
|
|
243
|
+
raise ArgumentError, "Bad string format #{arg}, you must have a string like resource_type[name]!"
|
|
210
244
|
end
|
|
211
245
|
return results
|
|
212
246
|
end
|
|
@@ -20,13 +20,12 @@
|
|
|
20
20
|
#
|
|
21
21
|
|
|
22
22
|
require 'uri'
|
|
23
|
+
require 'chef/monkey_patches/securerandom'
|
|
23
24
|
require 'chef/event_dispatch/base'
|
|
24
25
|
|
|
25
26
|
class Chef
|
|
26
27
|
class ResourceReporter < EventDispatch::Base
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
29
|
class ResourceReport < Struct.new(:new_resource,
|
|
31
30
|
:current_resource,
|
|
32
31
|
:action,
|
|
@@ -65,10 +64,12 @@ class Chef
|
|
|
65
64
|
else
|
|
66
65
|
#as_hash["result"] = "failed"
|
|
67
66
|
end
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
if new_resource.cookbook_name
|
|
68
|
+
as_hash["cookbook_name"] = new_resource.cookbook_name
|
|
69
|
+
as_hash["cookbook_version"] = new_resource.cookbook_version.version
|
|
70
|
+
end
|
|
71
71
|
|
|
72
|
+
as_hash
|
|
72
73
|
end
|
|
73
74
|
|
|
74
75
|
def finish
|
|
@@ -78,14 +79,16 @@ class Chef
|
|
|
78
79
|
def success?
|
|
79
80
|
!self.exception
|
|
80
81
|
end
|
|
81
|
-
|
|
82
|
+
|
|
83
|
+
end # End class ResouceReport
|
|
82
84
|
|
|
83
85
|
attr_reader :updated_resources
|
|
84
86
|
attr_reader :status
|
|
85
87
|
attr_reader :exception
|
|
86
88
|
attr_reader :run_id
|
|
87
89
|
attr_reader :error_descriptions
|
|
88
|
-
|
|
90
|
+
|
|
91
|
+
PROTOCOL_VERSION = '0.1.0'
|
|
89
92
|
|
|
90
93
|
def initialize(rest_client)
|
|
91
94
|
if Chef::Config[:enable_reporting] && !Chef::Config[:why_run]
|
|
@@ -98,37 +101,55 @@ class Chef
|
|
|
98
101
|
@pending_update = nil
|
|
99
102
|
@status = "success"
|
|
100
103
|
@exception = nil
|
|
101
|
-
@run_id =
|
|
104
|
+
@run_id = SecureRandom.uuid
|
|
102
105
|
@rest_client = rest_client
|
|
103
|
-
@node = nil
|
|
104
106
|
@error_descriptions = {}
|
|
105
|
-
@summary_only = true
|
|
106
107
|
end
|
|
107
108
|
|
|
108
|
-
def
|
|
109
|
-
@
|
|
109
|
+
def run_started(run_status)
|
|
110
|
+
@run_status = run_status
|
|
111
|
+
|
|
110
112
|
if reporting_enabled?
|
|
111
113
|
begin
|
|
112
|
-
resource_history_url = "reports/nodes/#{
|
|
113
|
-
server_response = @rest_client.post_rest(resource_history_url, {:action => :
|
|
114
|
-
|
|
115
|
-
@run_id = ::File.basename(run_uri.path)
|
|
116
|
-
Chef::Log.info("Chef server generated run history id: #{@run_id}")
|
|
117
|
-
@summary_only = server_response["summary_only"]
|
|
114
|
+
resource_history_url = "reports/nodes/#{node_name}/runs"
|
|
115
|
+
server_response = @rest_client.post_rest(resource_history_url, {:action => :start, :run_id => @run_id,
|
|
116
|
+
:start_time => start_time.to_s}, headers)
|
|
118
117
|
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
118
|
+
handle_error_starting_run(e, resource_history_url)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def handle_error_starting_run(e, url)
|
|
124
|
+
message = "Reporting error starting run. URL: #{url} "
|
|
125
|
+
code = if e.response.code
|
|
126
|
+
e.response.code.to_s
|
|
127
|
+
else
|
|
128
|
+
"Exception Code Empty"
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
if !e.response || (code != "404" && code != "406")
|
|
132
|
+
exception = "Exception: #{code} "
|
|
133
|
+
if Chef::Config[:enable_reporting_url_fatals]
|
|
134
|
+
reporting_status = "Reporting fatals enabled. Aborting run. "
|
|
135
|
+
Chef::Log.error(message + exception + reporting_status)
|
|
136
|
+
raise
|
|
137
|
+
else
|
|
138
|
+
reporting_status = "Disabling reporting for run."
|
|
139
|
+
Chef::Log.info(message + exception + reporting_status)
|
|
140
|
+
end
|
|
141
|
+
else
|
|
142
|
+
reason = "Received #{code}. "
|
|
143
|
+
if code == "406"
|
|
144
|
+
reporting_status = "Client version not supported. Please update the client. Disabling reporting for run."
|
|
145
|
+
Chef::Log.info(message + reason + reporting_status)
|
|
146
|
+
else
|
|
147
|
+
reporting_status = "Disabling reporting for run."
|
|
148
|
+
Chef::Log.debug(message + reason + reporting_status)
|
|
130
149
|
end
|
|
131
150
|
end
|
|
151
|
+
|
|
152
|
+
@reporting_enabled = false
|
|
132
153
|
end
|
|
133
154
|
|
|
134
155
|
def resource_current_state_loaded(new_resource, action, current_resource)
|
|
@@ -177,29 +198,25 @@ class Chef
|
|
|
177
198
|
def run_failed(exception)
|
|
178
199
|
@exception = exception
|
|
179
200
|
@status = "failure"
|
|
180
|
-
|
|
201
|
+
# If we failed before we received the run_started callback, there's not much we can do
|
|
202
|
+
# in terms of reporting
|
|
203
|
+
if @run_status
|
|
204
|
+
post_reporting_data
|
|
205
|
+
end
|
|
181
206
|
end
|
|
182
207
|
|
|
183
208
|
def post_reporting_data
|
|
184
209
|
if reporting_enabled?
|
|
185
210
|
run_data = prepare_run_data
|
|
186
|
-
resource_history_url = "reports/nodes/#{
|
|
211
|
+
resource_history_url = "reports/nodes/#{node_name}/runs/#{@run_id}"
|
|
187
212
|
Chef::Log.info("Sending resource update report (run-id: #{@run_id})")
|
|
188
213
|
Chef::Log.debug run_data.inspect
|
|
189
214
|
compressed_data = encode_gzip(run_data.to_json)
|
|
190
215
|
begin
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
@rest_client.post_rest(resource_history_url, run_data)
|
|
196
|
-
else
|
|
197
|
-
Chef::Log.debug("Sending compressed run data...")
|
|
198
|
-
# Since we're posting compressed data we can not directly call
|
|
199
|
-
# post_rest which expects JSON
|
|
200
|
-
reporting_url = @rest_client.create_url(resource_history_url)
|
|
201
|
-
@rest_client.raw_http_request(:POST, reporting_url, {'Content-Encoding' => 'gzip'}, compressed_data)
|
|
202
|
-
end
|
|
216
|
+
Chef::Log.debug("Sending compressed run data...")
|
|
217
|
+
# Since we're posting compressed data we can not directly call post_rest which expects JSON
|
|
218
|
+
reporting_url = @rest_client.create_url(resource_history_url)
|
|
219
|
+
@rest_client.raw_http_request(:POST, reporting_url, headers({'Content-Encoding' => 'gzip'}), compressed_data)
|
|
203
220
|
rescue Net::HTTPServerException => e
|
|
204
221
|
if e.response.code.to_s == "400"
|
|
205
222
|
Chef::FileCache.store("failed-reporting-data.json", Chef::JSONCompat.to_json_pretty(run_data), 0640)
|
|
@@ -212,7 +229,24 @@ class Chef
|
|
|
212
229
|
Chef::Log.debug("Server doesn't support resource history, skipping resource report.")
|
|
213
230
|
end
|
|
214
231
|
end
|
|
215
|
-
|
|
232
|
+
|
|
233
|
+
def headers(additional_headers = {})
|
|
234
|
+
options = {'X-Ops-Reporting-Protocol-Version' => PROTOCOL_VERSION}
|
|
235
|
+
options.merge(additional_headers)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def node_name
|
|
239
|
+
@run_status.node.name
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def start_time
|
|
243
|
+
@run_status.start_time
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def end_time
|
|
247
|
+
@run_status.end_time
|
|
248
|
+
end
|
|
249
|
+
|
|
216
250
|
def prepare_run_data
|
|
217
251
|
run_data = {}
|
|
218
252
|
run_data["action"] = "end"
|
|
@@ -220,9 +254,11 @@ class Chef
|
|
|
220
254
|
resource_record.for_json
|
|
221
255
|
end
|
|
222
256
|
run_data["status"] = @status
|
|
223
|
-
run_data["run_list"] = @node.run_list.to_json
|
|
257
|
+
run_data["run_list"] = @run_status.node.run_list.to_json
|
|
224
258
|
run_data["total_res_count"] = @total_res_count.to_s
|
|
225
259
|
run_data["data"] = {}
|
|
260
|
+
run_data["start_time"] = start_time.to_s
|
|
261
|
+
run_data["end_time"] = end_time.to_s
|
|
226
262
|
|
|
227
263
|
if exception
|
|
228
264
|
exception_data = {}
|
|
@@ -235,13 +271,6 @@ class Chef
|
|
|
235
271
|
run_data
|
|
236
272
|
end
|
|
237
273
|
|
|
238
|
-
def report_summary(run_data, compressed_data)
|
|
239
|
-
run_data["updated_res_count"] = updated_resources.count.to_s
|
|
240
|
-
run_data["post_size"] = compressed_data.bytesize.to_s
|
|
241
|
-
run_data["resources"] = []
|
|
242
|
-
run_data
|
|
243
|
-
end
|
|
244
|
-
|
|
245
274
|
def run_list_expand_failed(node, exception)
|
|
246
275
|
description = Formatters::ErrorMapper.run_list_expand_failed(node, exception)
|
|
247
276
|
@error_descriptions = description.for_json
|