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
data/lib/chef/provider/link.rb
CHANGED
|
@@ -112,21 +112,28 @@ class Chef
|
|
|
112
112
|
end
|
|
113
113
|
if @new_resource.link_type == :symbolic
|
|
114
114
|
if access_controls.requires_changes?
|
|
115
|
-
converge_by(access_controls.describe_changes) do
|
|
115
|
+
converge_by(access_controls.describe_changes) do
|
|
116
116
|
access_controls.set_all
|
|
117
117
|
end
|
|
118
118
|
end
|
|
119
|
-
|
|
119
|
+
end
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
def action_delete
|
|
123
123
|
if @current_resource.to # Exists
|
|
124
|
-
converge_by
|
|
124
|
+
converge_by("delete link at #{@new_resource.target_file}") do
|
|
125
125
|
::File.delete(@new_resource.target_file)
|
|
126
126
|
Chef::Log.info("#{@new_resource} deleted")
|
|
127
127
|
end
|
|
128
128
|
end
|
|
129
129
|
end
|
|
130
|
+
|
|
131
|
+
# Implementation components *should not* follow symlinks when managing
|
|
132
|
+
# access control (e.g., use lchmod instead of chmod) if the resource is a
|
|
133
|
+
# symlink.
|
|
134
|
+
def manage_symlink_access?
|
|
135
|
+
@new_resource.link_type == :symbolic
|
|
136
|
+
end
|
|
130
137
|
end
|
|
131
138
|
end
|
|
132
139
|
end
|
data/lib/chef/provider/mount.rb
CHANGED
|
@@ -44,7 +44,7 @@ class Chef
|
|
|
44
44
|
# only check for existence of non-remote devices
|
|
45
45
|
if (device_should_exist? && !::File.exists?(device_real) )
|
|
46
46
|
raise Chef::Exceptions::Mount, "Device #{@new_resource.device} does not exist"
|
|
47
|
-
elsif( !::File.exists?(@new_resource.mount_point) )
|
|
47
|
+
elsif( @new_resource.mount_point != "none" && !::File.exists?(@new_resource.mount_point) )
|
|
48
48
|
raise Chef::Exceptions::Mount, "Mount point #{@new_resource.mount_point} does not exist"
|
|
49
49
|
end
|
|
50
50
|
return true
|
|
@@ -177,7 +177,8 @@ class Chef
|
|
|
177
177
|
end
|
|
178
178
|
|
|
179
179
|
def device_should_exist?
|
|
180
|
-
(
|
|
180
|
+
( @new_resource.device != "none" ) &&
|
|
181
|
+
( not network_device? ) &&
|
|
181
182
|
( not %w[ tmpfs fuse ].include? @new_resource.fstype )
|
|
182
183
|
end
|
|
183
184
|
|
|
@@ -225,7 +226,11 @@ class Chef
|
|
|
225
226
|
# ignore trailing slash
|
|
226
227
|
Regexp.escape(device_real)+"/?"
|
|
227
228
|
elsif ::File.symlink?(device_real)
|
|
228
|
-
|
|
229
|
+
# This regular expression tries to match device_real. If that does not match it will try to match the target of device_real.
|
|
230
|
+
# So given a symlink like this:
|
|
231
|
+
# /dev/mapper/vgroot-tmp.vol -> /dev/dm-9
|
|
232
|
+
# First it will try to match "/dev/mapper/vgroot-tmp.vol". If there is no match it will try matching for "/dev/dm-9".
|
|
233
|
+
"(?:#{Regexp.escape(device_real)}|#{Regexp.escape(::File.readlink(device_real))})"
|
|
229
234
|
else
|
|
230
235
|
Regexp.escape(device_real)
|
|
231
236
|
end
|
|
@@ -59,7 +59,10 @@ class Chef
|
|
|
59
59
|
|
|
60
60
|
def mount_fs
|
|
61
61
|
unless @current_resource.mounted
|
|
62
|
-
@mount.add(@new_resource.device
|
|
62
|
+
@mount.add(:remote => @new_resource.device,
|
|
63
|
+
:username => @new_resource.username,
|
|
64
|
+
:domainname => @new_resource.domain,
|
|
65
|
+
:password => @new_resource.password)
|
|
63
66
|
Chef::Log.debug("#{@new_resource} is mounted at #{@new_resource.mount_point}")
|
|
64
67
|
else
|
|
65
68
|
Chef::Log.debug("#{@new_resource} is already mounted at #{@new_resource.mount_point}")
|
|
@@ -58,14 +58,19 @@ class Chef
|
|
|
58
58
|
|
|
59
59
|
def parse_emerge(package, txt)
|
|
60
60
|
availables = {}
|
|
61
|
-
package_without_category = package.split("/").last
|
|
62
61
|
found_package_name = nil
|
|
63
62
|
|
|
64
63
|
txt.each_line do |line|
|
|
65
64
|
if line =~ /\*\s+#{PACKAGE_NAME_PATTERN}/
|
|
66
|
-
found_package_name = $&.strip
|
|
67
|
-
if
|
|
68
|
-
|
|
65
|
+
found_package_name = $&.gsub(/\*/, '').strip
|
|
66
|
+
if package =~ /\// #the category is specified
|
|
67
|
+
if found_package_name == package
|
|
68
|
+
availables[found_package_name] = nil
|
|
69
|
+
end
|
|
70
|
+
else #the category is not specified
|
|
71
|
+
if found_package_name.split("/").last == package
|
|
72
|
+
availables[found_package_name] = nil
|
|
73
|
+
end
|
|
69
74
|
end
|
|
70
75
|
end
|
|
71
76
|
|
|
@@ -31,7 +31,14 @@ require 'rubygems/version'
|
|
|
31
31
|
require 'rubygems/dependency'
|
|
32
32
|
require 'rubygems/spec_fetcher'
|
|
33
33
|
require 'rubygems/platform'
|
|
34
|
-
|
|
34
|
+
|
|
35
|
+
# Compatibility note: Rubygems 2.0 removes rubygems/format in favor of
|
|
36
|
+
# rubygems/package.
|
|
37
|
+
begin
|
|
38
|
+
require 'rubygems/format'
|
|
39
|
+
rescue LoadError
|
|
40
|
+
require 'rubygems/package'
|
|
41
|
+
end
|
|
35
42
|
require 'rubygems/dependency_installer'
|
|
36
43
|
require 'rubygems/uninstaller'
|
|
37
44
|
require 'rubygems/specification'
|
|
@@ -105,6 +112,22 @@ class Chef
|
|
|
105
112
|
Gem.sources = original_sources
|
|
106
113
|
end
|
|
107
114
|
|
|
115
|
+
##
|
|
116
|
+
# Extracts the gemspec from a (on-disk) gem package.
|
|
117
|
+
# === Returns
|
|
118
|
+
# Gem::Specification
|
|
119
|
+
#
|
|
120
|
+
#--
|
|
121
|
+
# Compatibility note: Rubygems 1.x uses Gem::Format, 2.0 moved this
|
|
122
|
+
# code into Gem::Package.
|
|
123
|
+
def spec_from_file(file)
|
|
124
|
+
if defined?(Gem::Format) and Gem::Package.respond_to?(:open)
|
|
125
|
+
Gem::Format.from_file_by_path(file).spec
|
|
126
|
+
else
|
|
127
|
+
Gem::Package.new(file).spec
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
108
131
|
##
|
|
109
132
|
# Determines the candidate version for a gem from a .gem file on disk
|
|
110
133
|
# and checks if it matches the version contraints in +gem_dependency+
|
|
@@ -114,7 +137,7 @@ class Chef
|
|
|
114
137
|
# nil returns nil if the gem on disk doesn't match the
|
|
115
138
|
# version constraints for +gem_dependency+
|
|
116
139
|
def candidate_version_from_file(gem_dependency, source)
|
|
117
|
-
spec =
|
|
140
|
+
spec = spec_from_file(source)
|
|
118
141
|
if spec.satisfies_requirement?(gem_dependency)
|
|
119
142
|
logger.debug {"#{@new_resource} found candidate gem version #{spec.version} from local gem package #{source}"}
|
|
120
143
|
spec.version
|
|
@@ -142,17 +165,26 @@ class Chef
|
|
|
142
165
|
# Find the newest gem version available from Gem.sources that satisfies
|
|
143
166
|
# the constraints of +gem_dependency+
|
|
144
167
|
def find_newest_remote_version(gem_dependency, *sources)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
168
|
+
available_gems = dependency_installer.find_gems_with_sources(gem_dependency)
|
|
169
|
+
spec, source = if available_gems.respond_to?(:last)
|
|
170
|
+
# DependencyInstaller sorts the results such that the last one is
|
|
171
|
+
# always the one it considers best.
|
|
172
|
+
spec_with_source = available_gems.last
|
|
173
|
+
spec_with_source && spec_with_source
|
|
174
|
+
else
|
|
175
|
+
# Rubygems 2.0 returns a Gem::Available set, which is a
|
|
176
|
+
# collection of AvailableSet::Tuple structs
|
|
177
|
+
available_gems.pick_best!
|
|
178
|
+
best_gem = available_gems.set.first
|
|
179
|
+
best_gem && [best_gem.spec, best_gem.source]
|
|
180
|
+
end
|
|
148
181
|
|
|
149
|
-
|
|
150
|
-
version = spec && spec_with_source[0].version
|
|
182
|
+
version = spec && spec.version
|
|
151
183
|
if version
|
|
152
|
-
logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{
|
|
184
|
+
logger.debug { "#{@new_resource} found gem #{spec.name} version #{version} for platform #{spec.platform} from #{source}" }
|
|
153
185
|
version
|
|
154
186
|
else
|
|
155
|
-
source_list = sources.compact.empty? ? "[#{Gem.sources.join(', ')}]" : "[#{sources.join(', ')}]"
|
|
187
|
+
source_list = sources.compact.empty? ? "[#{Gem.sources.to_a.join(', ')}]" : "[#{sources.join(', ')}]"
|
|
156
188
|
logger.warn { "#{@new_resource} failed to find gem #{gem_dependency} from #{source_list}" }
|
|
157
189
|
nil
|
|
158
190
|
end
|
|
@@ -393,6 +425,9 @@ class Chef
|
|
|
393
425
|
# URI.parse gets confused by MS Windows paths with forward slashes.
|
|
394
426
|
scheme = nil if scheme =~ /^[a-z]$/
|
|
395
427
|
%w{http https}.include?(scheme)
|
|
428
|
+
rescue URI::InvalidURIError
|
|
429
|
+
Chef::Log.debug("#{@new_resource} failed to parse source '#{@new_resource.source}' as a URI, assuming a local path")
|
|
430
|
+
false
|
|
396
431
|
end
|
|
397
432
|
|
|
398
433
|
def current_version
|
|
@@ -502,7 +537,7 @@ class Chef
|
|
|
502
537
|
if version
|
|
503
538
|
shell_out!("#{gem_binary_path} install #{name} -q --no-rdoc --no-ri -v \"#{version}\"#{src}#{opts}", :env=>nil)
|
|
504
539
|
else
|
|
505
|
-
shell_out!("#{gem_binary_path} install #{name} -q --no-rdoc --no-ri #{src}#{opts}", :env=>nil)
|
|
540
|
+
shell_out!("#{gem_binary_path} install \"#{name}\" -q --no-rdoc --no-ri #{src}#{opts}", :env=>nil)
|
|
506
541
|
end
|
|
507
542
|
end
|
|
508
543
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# Authors:: Trevor O (trevoro@joyent.com)
|
|
3
3
|
# Bryan McLellan (btm@loftninjas.org)
|
|
4
4
|
# Matthew Landauer (matthew@openaustralia.org)
|
|
5
|
+
# Ben Rockwood (benr@joyent.com)
|
|
5
6
|
# Copyright:: Copyright (c) 2009 Bryan McLellan, Matthew Landauer
|
|
6
7
|
# License:: Apache License, Version 2.0
|
|
7
8
|
#
|
|
@@ -17,10 +18,6 @@
|
|
|
17
18
|
# See the License for the specific language governing permissions and
|
|
18
19
|
# limitations under the License.
|
|
19
20
|
#
|
|
20
|
-
# Notes
|
|
21
|
-
#
|
|
22
|
-
# * Supports installing using a local package name
|
|
23
|
-
# * Otherwise reverts to installing from the pkgsrc repositories URL
|
|
24
21
|
|
|
25
22
|
require 'chef/provider/package'
|
|
26
23
|
require 'chef/mixin/shell_out'
|
|
@@ -36,47 +33,61 @@ class Chef
|
|
|
36
33
|
|
|
37
34
|
|
|
38
35
|
def load_current_resource
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
Chef::Log.debug("#{@new_resource} loading current resource")
|
|
37
|
+
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
|
38
|
+
@current_resource.package_name(@new_resource.package_name)
|
|
39
|
+
@current_resource.version(nil)
|
|
43
40
|
check_package_state(@new_resource.package_name)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
version = info.stdout[/^#{@new_resource.package_name}-(.+)/, 1]
|
|
41
|
+
@current_resource # modified by check_package_state
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def check_package_state(name)
|
|
45
|
+
Chef::Log.debug("#{@new_resource} checking package #{name}")
|
|
46
|
+
version = nil
|
|
47
|
+
info = shell_out!("/opt/local/sbin/pkg_info -E \"#{name}*\"", :env => nil, :returns => [0,1])
|
|
48
|
+
|
|
49
|
+
if info.stdout
|
|
50
|
+
version = info.stdout[/^#{@new_resource.package_name}-(.+)/, 1]
|
|
55
51
|
end
|
|
56
52
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
if !version
|
|
54
|
+
@current_resource.version(nil)
|
|
55
|
+
else
|
|
56
|
+
@current_resource.version(version)
|
|
57
|
+
end
|
|
62
58
|
end
|
|
63
59
|
|
|
60
|
+
def candidate_version
|
|
61
|
+
return @candidate_version if @candidate_version
|
|
62
|
+
name = nil
|
|
63
|
+
version = nil
|
|
64
|
+
pkg = shell_out!("/opt/local/bin/pkgin se #{new_resource.package_name}", :env => nil, :returns => [0,1])
|
|
65
|
+
pkg.stdout.each_line do |line|
|
|
66
|
+
case line
|
|
67
|
+
when /^#{name}/
|
|
68
|
+
name, version = line.split[0].split(/-([^-]+)$/)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
@candidate_version = version
|
|
72
|
+
version
|
|
73
|
+
end
|
|
74
|
+
|
|
64
75
|
def install_package(name, version)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
out = shell_out!("pkgin -y install #{package}", :env => nil)
|
|
76
|
+
Chef::Log.debug("#{@new_resource} installing package #{name} version #{version}")
|
|
77
|
+
package = "#{name}-#{version}"
|
|
78
|
+
out = shell_out!("/opt/local/bin/pkgin -y install #{package}", :env => nil)
|
|
68
79
|
end
|
|
69
80
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
81
|
+
def upgrade_package(name, version)
|
|
82
|
+
Chef::Log.debug("#{@new_resource} upgrading package #{name} version #{version}")
|
|
83
|
+
install_package(name, version)
|
|
84
|
+
end
|
|
74
85
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
out = shell_out!("pkgin -y remove #{package}", :env => nil)
|
|
79
|
-
|
|
86
|
+
def remove_package(name, version)
|
|
87
|
+
Chef::Log.debug("#{@new_resource} removing package #{name} version #{version}")
|
|
88
|
+
package = "#{name}"
|
|
89
|
+
out = shell_out!("/opt/local/bin/pkgin -y remove #{package}", :env => nil)
|
|
90
|
+
end
|
|
80
91
|
|
|
81
92
|
end
|
|
82
93
|
end
|
|
@@ -16,8 +16,10 @@
|
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
#
|
|
18
18
|
|
|
19
|
+
require 'chef/config'
|
|
19
20
|
require 'chef/provider/package'
|
|
20
21
|
require 'chef/mixin/command'
|
|
22
|
+
require 'chef/mixin/shell_out'
|
|
21
23
|
require 'chef/resource/package'
|
|
22
24
|
require 'singleton'
|
|
23
25
|
require 'chef/mixin/get_source_from_package'
|
|
@@ -645,6 +647,7 @@ class Chef
|
|
|
645
647
|
# Cache for our installed and available packages, pulled in from yum-dump.py
|
|
646
648
|
class YumCache
|
|
647
649
|
include Chef::Mixin::Command
|
|
650
|
+
include Chef::Mixin::ShellOut
|
|
648
651
|
include Singleton
|
|
649
652
|
|
|
650
653
|
def initialize
|
|
@@ -705,9 +708,11 @@ class Chef
|
|
|
705
708
|
error = nil
|
|
706
709
|
|
|
707
710
|
helper = ::File.join(::File.dirname(__FILE__), 'yum-dump.py')
|
|
711
|
+
status = nil
|
|
708
712
|
|
|
709
|
-
|
|
710
|
-
|
|
713
|
+
begin
|
|
714
|
+
status = shell_out!("/usr/bin/python #{helper}#{opts}", :timeout => Chef::Config[:yum_timeout])
|
|
715
|
+
status.stdout.each_line do |line|
|
|
711
716
|
one_line = true
|
|
712
717
|
|
|
713
718
|
line.chomp!
|
|
@@ -754,7 +759,10 @@ class Chef
|
|
|
754
759
|
@rpmdb << pkg
|
|
755
760
|
end
|
|
756
761
|
|
|
757
|
-
error = stderr
|
|
762
|
+
error = status.stderr
|
|
763
|
+
rescue Mixlib::ShellOut::CommandTimeout => e
|
|
764
|
+
Chef::Log.error("#{helper} exceeded timeout #{Chef::Config[:yum_timeout]}")
|
|
765
|
+
raise(e)
|
|
758
766
|
end
|
|
759
767
|
|
|
760
768
|
if status.exitstatus != 0
|
|
@@ -939,6 +947,7 @@ class Chef
|
|
|
939
947
|
end # YumCache
|
|
940
948
|
|
|
941
949
|
include Chef::Mixin::GetSourceFromPackage
|
|
950
|
+
include Chef::Mixin::ShellOut
|
|
942
951
|
|
|
943
952
|
def initialize(new_resource, run_context)
|
|
944
953
|
super
|
|
@@ -981,7 +990,7 @@ class Chef
|
|
|
981
990
|
end
|
|
982
991
|
|
|
983
992
|
def yum_command(command)
|
|
984
|
-
status, stdout, stderr = output_of_command(command, {})
|
|
993
|
+
status, stdout, stderr = output_of_command(command, {:timeout => Chef::Config[:yum_timeout]})
|
|
985
994
|
|
|
986
995
|
# This is fun: rpm can encounter errors in the %post/%postun scripts which aren't
|
|
987
996
|
# considered fatal - meaning the rpm is still successfully installed. These issue
|
|
@@ -998,7 +1007,7 @@ class Chef
|
|
|
998
1007
|
if l =~ %r{^error: %(post|postun)\(.*\) scriptlet failed, exit status \d+$}
|
|
999
1008
|
Chef::Log.warn("#{@new_resource} caught non-fatal scriptlet issue: \"#{l}\". Can't trust yum exit status " +
|
|
1000
1009
|
"so running install again to verify.")
|
|
1001
|
-
status, stdout, stderr = output_of_command(command, {})
|
|
1010
|
+
status, stdout, stderr = output_of_command(command, {:timeout => Chef::Config[:yum_timeout]})
|
|
1002
1011
|
break
|
|
1003
1012
|
end
|
|
1004
1013
|
end
|
|
@@ -1062,13 +1071,11 @@ class Chef
|
|
|
1062
1071
|
end
|
|
1063
1072
|
|
|
1064
1073
|
Chef::Log.debug("#{@new_resource} checking rpm status")
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
@new_resource.version($2)
|
|
1071
|
-
end
|
|
1074
|
+
shell_out!("rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}\n' #{@new_resource.source}", :timeout => Chef::Config[:yum_timeout]).stdout.each_line do |line|
|
|
1075
|
+
case line
|
|
1076
|
+
when /([\w\d_.-]+)\s([\w\d_.-]+)/
|
|
1077
|
+
@current_resource.package_name($1)
|
|
1078
|
+
@new_resource.version($2)
|
|
1072
1079
|
end
|
|
1073
1080
|
end
|
|
1074
1081
|
end
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
1
2
|
#
|
|
2
|
-
#
|
|
3
|
+
# Authors:: Adam Jacob (<adam@opscode.com>)
|
|
4
|
+
# Ionuț Arțăriși (<iartarisi@suse.cz>)
|
|
3
5
|
# Copyright:: Copyright (c) 2008 Opscode, Inc.
|
|
6
|
+
# Copyright (c) 2013 SUSE Linux GmbH
|
|
4
7
|
# License:: Apache License, Version 2.0
|
|
5
8
|
#
|
|
6
9
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
10
|
# you may not use this file except in compliance with the License.
|
|
8
11
|
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
12
|
+
#
|
|
10
13
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
14
|
+
#
|
|
12
15
|
# Unless required by applicable law or agreed to in writing, software
|
|
13
16
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
17
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
@@ -19,14 +22,16 @@
|
|
|
19
22
|
require 'chef/provider/package'
|
|
20
23
|
require 'chef/mixin/command'
|
|
21
24
|
require 'chef/resource/package'
|
|
25
|
+
require 'chef/mixin/shell_out'
|
|
22
26
|
require 'singleton'
|
|
23
27
|
|
|
24
28
|
class Chef
|
|
25
29
|
class Provider
|
|
26
30
|
class Package
|
|
27
|
-
class Zypper < Chef::Provider::Package
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
class Zypper < Chef::Provider::Package
|
|
32
|
+
|
|
33
|
+
include Chef::Mixin::ShellOut
|
|
34
|
+
|
|
30
35
|
def load_current_resource
|
|
31
36
|
@current_resource = Chef::Resource::Package.new(@new_resource.name)
|
|
32
37
|
@current_resource.package_name(@new_resource.package_name)
|
|
@@ -36,7 +41,7 @@ class Chef
|
|
|
36
41
|
version=''
|
|
37
42
|
oud_version=''
|
|
38
43
|
Chef::Log.debug("#{@new_resource} checking zypper")
|
|
39
|
-
status = popen4("zypper info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
|
|
44
|
+
status = popen4("zypper --non-interactive info #{@new_resource.package_name}") do |pid, stdin, stdout, stderr|
|
|
40
45
|
stdout.each do |line|
|
|
41
46
|
case line
|
|
42
47
|
when /^Version: (.+)$/
|
|
@@ -45,7 +50,7 @@ class Chef
|
|
|
45
50
|
when /^Installed: Yes$/
|
|
46
51
|
is_installed=true
|
|
47
52
|
Chef::Log.debug("#{@new_resource} is installed")
|
|
48
|
-
|
|
53
|
+
|
|
49
54
|
when /^Installed: No$/
|
|
50
55
|
is_installed=false
|
|
51
56
|
Chef::Log.debug("#{@new_resource} is not installed")
|
|
@@ -61,12 +66,12 @@ class Chef
|
|
|
61
66
|
@candidate_version=version
|
|
62
67
|
@current_resource.version(nil)
|
|
63
68
|
end
|
|
64
|
-
|
|
69
|
+
|
|
65
70
|
if is_installed==true
|
|
66
71
|
if is_out_of_date==true
|
|
67
72
|
@current_resource.version(oud_version)
|
|
68
73
|
@candidate_version=version
|
|
69
|
-
else
|
|
74
|
+
else
|
|
70
75
|
@current_resource.version(version)
|
|
71
76
|
@candidate_version=version
|
|
72
77
|
end
|
|
@@ -75,69 +80,54 @@ class Chef
|
|
|
75
80
|
unless status.exitstatus == 0
|
|
76
81
|
raise Chef::Exceptions::Package, "zypper failed - #{status.inspect}!"
|
|
77
82
|
end
|
|
78
|
-
|
|
83
|
+
|
|
79
84
|
@current_resource
|
|
80
85
|
end
|
|
81
|
-
|
|
82
|
-
#Gets the zypper Version from command output (Returns Floating Point number)
|
|
86
|
+
|
|
83
87
|
def zypper_version()
|
|
84
88
|
`zypper -V 2>&1`.scan(/\d+/).join(".").to_f
|
|
85
89
|
end
|
|
86
90
|
|
|
87
91
|
def install_package(name, version)
|
|
88
|
-
|
|
89
|
-
run_command(
|
|
90
|
-
:command => "zypper install -y #{name}"
|
|
91
|
-
)
|
|
92
|
-
elsif version
|
|
93
|
-
run_command(
|
|
94
|
-
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
|
95
|
-
)
|
|
96
|
-
else
|
|
97
|
-
run_command(
|
|
98
|
-
:command => "zypper -n --no-gpg-checks install -l #{name}"
|
|
99
|
-
)
|
|
100
|
-
end
|
|
92
|
+
zypper_package("install --auto-agree-with-licenses", name, version)
|
|
101
93
|
end
|
|
102
94
|
|
|
103
95
|
def upgrade_package(name, version)
|
|
104
|
-
|
|
105
|
-
run_command(
|
|
106
|
-
:command => "zypper install -y #{name}"
|
|
107
|
-
)
|
|
108
|
-
elsif version
|
|
109
|
-
run_command(
|
|
110
|
-
:command => "zypper -n --no-gpg-checks install -l #{name}=#{version}"
|
|
111
|
-
)
|
|
112
|
-
else
|
|
113
|
-
run_command(
|
|
114
|
-
:command => "zypper -n --no-gpg-checks install -l #{name}"
|
|
115
|
-
)
|
|
116
|
-
end
|
|
96
|
+
install_package(name, version)
|
|
117
97
|
end
|
|
118
98
|
|
|
119
99
|
def remove_package(name, version)
|
|
100
|
+
zypper_package("remove", name, version)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def purge_package(name, version)
|
|
104
|
+
zypper_package("remove --clean-deps", name, version)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
def zypper_package(command, pkgname, version)
|
|
109
|
+
version = "=#{version}" unless version.empty?
|
|
120
110
|
if zypper_version < 1.0
|
|
121
|
-
|
|
122
|
-
:command => "zypper remove -y #{name}"
|
|
123
|
-
)
|
|
124
|
-
elsif version
|
|
125
|
-
run_command(
|
|
126
|
-
:command => "zypper -n --no-gpg-checks remove #{name}=#{version}"
|
|
127
|
-
)
|
|
111
|
+
shell_out!("zypper#{gpg_checks} #{command} -y #{pkgname}")
|
|
128
112
|
else
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
)
|
|
113
|
+
shell_out!("zypper --non-interactive#{gpg_checks} "+
|
|
114
|
+
"#{command} #{pkgname}#{version}")
|
|
132
115
|
end
|
|
133
|
-
|
|
134
|
-
|
|
135
116
|
end
|
|
136
|
-
|
|
137
|
-
def
|
|
138
|
-
|
|
117
|
+
|
|
118
|
+
def gpg_checks()
|
|
119
|
+
case Chef::Config[:zypper_check_gpg]
|
|
120
|
+
when true
|
|
121
|
+
""
|
|
122
|
+
when false
|
|
123
|
+
" --no-gpg-checks"
|
|
124
|
+
when nil
|
|
125
|
+
Chef::Log.warn("Chef::Config[:zypper_check_gpg] was not set. " +
|
|
126
|
+
"All packages will be installed without gpg signature checks. " +
|
|
127
|
+
"This is a security hazard.")
|
|
128
|
+
" --no-gpg-checks"
|
|
129
|
+
end
|
|
139
130
|
end
|
|
140
|
-
|
|
141
131
|
end
|
|
142
132
|
end
|
|
143
133
|
end
|