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
|
@@ -82,7 +82,7 @@ describe Chef::Provider::Git do
|
|
|
82
82
|
context "resolving revisions to a SHA" do
|
|
83
83
|
|
|
84
84
|
before do
|
|
85
|
-
@git_ls_remote = "git ls-remote git://github.com/opscode/chef.git "
|
|
85
|
+
@git_ls_remote = "git ls-remote \"git://github.com/opscode/chef.git\" "
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
it "returns resource.revision as is if revision is already a full SHA" do
|
|
@@ -91,15 +91,25 @@ describe Chef::Provider::Git do
|
|
|
91
91
|
|
|
92
92
|
it "converts resource.revision from a tag to a SHA" do
|
|
93
93
|
@resource.revision "v1.0"
|
|
94
|
-
@stdout = "
|
|
95
|
-
|
|
94
|
+
@stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
|
|
95
|
+
"503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n")
|
|
96
|
+
@provider.should_receive(:shell_out!).with(@git_ls_remote + "v1.0*", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
|
|
96
97
|
@provider.target_revision.should eql("503c22a5e41f5ae3193460cca044ed1435029f53")
|
|
97
98
|
end
|
|
98
99
|
|
|
100
|
+
it "converts resource.revision from an annotated tag to the tagged SHA (not SHA of tag)" do
|
|
101
|
+
@resource.revision "v1.0"
|
|
102
|
+
@stdout = ("d03c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n" +
|
|
103
|
+
"503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0\n" +
|
|
104
|
+
"663c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/v1.0^{}\n")
|
|
105
|
+
@provider.should_receive(:shell_out!).with(@git_ls_remote + "v1.0*", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
|
|
106
|
+
@provider.target_revision.should eql("663c22a5e41f5ae3193460cca044ed1435029f53")
|
|
107
|
+
end
|
|
108
|
+
|
|
99
109
|
it "raises an invalid remote reference error if you try to deploy from ``origin'' and assertions are run" do
|
|
100
110
|
@resource.revision "origin/"
|
|
101
111
|
@provider.action = :checkout
|
|
102
|
-
@provider.define_resource_requirements
|
|
112
|
+
@provider.define_resource_requirements
|
|
103
113
|
::File.stub!(:directory?).with("/my/deploy").and_return(true)
|
|
104
114
|
lambda {@provider.process_resource_requirements}.should raise_error(Chef::Exceptions::InvalidRemoteGitReference)
|
|
105
115
|
end
|
|
@@ -108,7 +118,7 @@ describe Chef::Provider::Git do
|
|
|
108
118
|
@resource.revision "FAIL, that's the revision I want"
|
|
109
119
|
@provider.action = :checkout
|
|
110
120
|
@provider.should_receive(:shell_out!).and_return(mock("ShellOut result", :stdout => "\n"))
|
|
111
|
-
@provider.define_resource_requirements
|
|
121
|
+
@provider.define_resource_requirements
|
|
112
122
|
lambda { @provider.process_resource_requirements }.should raise_error(Chef::Exceptions::UnresolvableGitReference)
|
|
113
123
|
end
|
|
114
124
|
|
|
@@ -118,13 +128,13 @@ describe Chef::Provider::Git do
|
|
|
118
128
|
@provider.target_revision.should == nil
|
|
119
129
|
end
|
|
120
130
|
|
|
121
|
-
it "does not raise an error when the revision is valid and assertions are run." do
|
|
122
|
-
@resource.revision "
|
|
131
|
+
it "does not raise an error when the revision is valid and assertions are run." do
|
|
132
|
+
@resource.revision "0.8-alpha"
|
|
123
133
|
@stdout = "503c22a5e41f5ae3193460cca044ed1435029f53\trefs/heads/0.8-alpha\n"
|
|
124
|
-
@provider.should_receive(:shell_out!).with(@git_ls_remote + "
|
|
134
|
+
@provider.should_receive(:shell_out!).with(@git_ls_remote + "0.8-alpha*", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
|
|
125
135
|
@provider.action = :checkout
|
|
126
136
|
::File.stub!(:directory?).with("/my/deploy").and_return(true)
|
|
127
|
-
@provider.define_resource_requirements
|
|
137
|
+
@provider.define_resource_requirements
|
|
128
138
|
lambda { @provider.process_resource_requirements }.should_not raise_error(RuntimeError)
|
|
129
139
|
end
|
|
130
140
|
|
|
@@ -146,7 +156,7 @@ b7d19519a1c15f1c1a324e2683bd728b6198ce5a\trefs/tags/0.7.8^{}
|
|
|
146
156
|
ebc1b392fe7e8f0fbabc305c299b4d365d2b4d9b\trefs/tags/chef-server-package
|
|
147
157
|
SHAS
|
|
148
158
|
@resource.revision ''
|
|
149
|
-
@provider.should_receive(:shell_out!).with(@git_ls_remote, {:log_tag=>"git[web2.0 app]"
|
|
159
|
+
@provider.should_receive(:shell_out!).with(@git_ls_remote + "HEAD", {:log_tag=>"git[web2.0 app]"}).and_return(mock("ShellOut result", :stdout => @stdout))
|
|
150
160
|
@provider.target_revision.should eql("28af684d8460ba4793eda3e7ac238c864a5d029a")
|
|
151
161
|
end
|
|
152
162
|
end
|
|
@@ -158,9 +168,10 @@ SHAS
|
|
|
158
168
|
it "runs a clone command with default git options" do
|
|
159
169
|
@resource.user "deployNinja"
|
|
160
170
|
@resource.ssh_wrapper "do_it_this_way.sh"
|
|
161
|
-
expected_cmd = "git clone git://github.com/opscode/chef.git /my/deploy/dir"
|
|
171
|
+
expected_cmd = "git clone \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
|
|
162
172
|
@provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
|
|
163
|
-
:environment =>{"GIT_SSH"=>"do_it_this_way.sh"},
|
|
173
|
+
:environment =>{"GIT_SSH"=>"do_it_this_way.sh"},
|
|
174
|
+
:log_tag => "git[web2.0 app]" )
|
|
164
175
|
|
|
165
176
|
@provider.clone
|
|
166
177
|
end
|
|
@@ -169,36 +180,41 @@ SHAS
|
|
|
169
180
|
@resource.user "deployNinja"
|
|
170
181
|
@resource.destination "/Application Support/with/space"
|
|
171
182
|
@resource.ssh_wrapper "do_it_this_way.sh"
|
|
172
|
-
expected_cmd = "git clone git://github.com/opscode/chef.git /Application
|
|
183
|
+
expected_cmd = "git clone \"git://github.com/opscode/chef.git\" \"/Application Support/with/space\""
|
|
173
184
|
@provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
|
|
174
|
-
:environment =>{"GIT_SSH"=>"do_it_this_way.sh"},
|
|
185
|
+
:environment =>{"GIT_SSH"=>"do_it_this_way.sh"},
|
|
186
|
+
:log_tag => "git[web2.0 app]")
|
|
175
187
|
@provider.clone
|
|
176
188
|
end
|
|
177
189
|
|
|
178
190
|
it "compiles a clone command using --depth for shallow cloning" do
|
|
179
191
|
@resource.depth 5
|
|
180
|
-
expected_cmd =
|
|
181
|
-
@provider.should_receive(:shell_out!).with(expected_cmd,
|
|
192
|
+
expected_cmd = "git clone --depth 5 \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
|
|
193
|
+
@provider.should_receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
|
|
182
194
|
@provider.clone
|
|
183
195
|
end
|
|
184
196
|
|
|
185
197
|
it "compiles a clone command with a remote other than ``origin''" do
|
|
186
198
|
@resource.remote "opscode"
|
|
187
|
-
expected_cmd =
|
|
188
|
-
@provider.should_receive(:shell_out!).with(expected_cmd,
|
|
199
|
+
expected_cmd = "git clone -o opscode \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\""
|
|
200
|
+
@provider.should_receive(:shell_out!).with(expected_cmd, :log_tag => "git[web2.0 app]")
|
|
189
201
|
@provider.clone
|
|
190
202
|
end
|
|
191
203
|
|
|
192
204
|
it "runs a checkout command with default options" do
|
|
193
205
|
expected_cmd = 'git checkout -b deploy d35af14d41ae22b19da05d7d03a0bafc321b244c'
|
|
194
|
-
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
|
|
206
|
+
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
|
|
207
|
+
:log_tag => "git[web2.0 app]")
|
|
195
208
|
@provider.checkout
|
|
196
209
|
end
|
|
197
210
|
|
|
198
211
|
it "runs an enable_submodule command" do
|
|
199
212
|
@resource.enable_submodules true
|
|
213
|
+
expected_cmd = "git submodule sync"
|
|
214
|
+
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
|
|
215
|
+
:log_tag => "git[web2.0 app]")
|
|
200
216
|
expected_cmd = "git submodule update --init --recursive"
|
|
201
|
-
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :
|
|
217
|
+
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
|
|
202
218
|
@provider.enable_submodules
|
|
203
219
|
end
|
|
204
220
|
|
|
@@ -208,37 +224,150 @@ SHAS
|
|
|
208
224
|
end
|
|
209
225
|
|
|
210
226
|
it "runs a sync command with default options" do
|
|
227
|
+
@provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
|
|
211
228
|
expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
|
|
212
|
-
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :
|
|
229
|
+
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :log_tag => "git[web2.0 app]")
|
|
213
230
|
@provider.fetch_updates
|
|
214
231
|
end
|
|
215
232
|
|
|
216
233
|
it "runs a sync command with the user and group specified in the resource" do
|
|
217
234
|
@resource.user("whois")
|
|
218
235
|
@resource.group("thisis")
|
|
236
|
+
@provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
|
|
219
237
|
expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
|
|
220
238
|
@provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
|
|
221
|
-
:user => "whois", :group => "thisis", :
|
|
239
|
+
:user => "whois", :group => "thisis", :log_tag => "git[web2.0 app]")
|
|
240
|
+
@provider.fetch_updates
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
it "configures remote tracking branches when remote is ``origin''" do
|
|
244
|
+
@resource.remote "origin"
|
|
245
|
+
@provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
|
|
246
|
+
fetch_command = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
|
|
247
|
+
@provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
|
|
222
248
|
@provider.fetch_updates
|
|
223
249
|
end
|
|
224
250
|
|
|
225
251
|
it "configures remote tracking branches when remote is not ``origin''" do
|
|
226
252
|
@resource.remote "opscode"
|
|
227
|
-
|
|
228
|
-
"git config remote.opscode.fetch +refs/heads/*:refs/remotes/opscode/*"
|
|
229
|
-
@provider.should_receive(:shell_out!).with(conf_tracking_branches, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]", :log_level => :debug)
|
|
253
|
+
@provider.should_receive(:setup_remote_tracking_branches).with(@resource.remote, @resource.repository)
|
|
230
254
|
fetch_command = "git fetch opscode && git fetch opscode --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
|
|
231
|
-
@provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :
|
|
255
|
+
@provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_tag => "git[web2.0 app]")
|
|
232
256
|
@provider.fetch_updates
|
|
233
257
|
end
|
|
234
258
|
|
|
259
|
+
context "configuring remote tracking branches" do
|
|
260
|
+
|
|
261
|
+
it "checks if a remote with this name already exists" do
|
|
262
|
+
command_response = double('shell_out')
|
|
263
|
+
command_response.stub(:exitstatus) { 1 }
|
|
264
|
+
expected_command = "git config --get remote.#{@resource.remote}.url"
|
|
265
|
+
@provider.should_receive(:shell_out!).with(expected_command,
|
|
266
|
+
:cwd => "/my/deploy/dir",
|
|
267
|
+
:log_tag => "git[web2.0 app]",
|
|
268
|
+
:returns => [0,1,2]).and_return(command_response)
|
|
269
|
+
add_remote_command = "git remote add #{@resource.remote} #{@resource.repository}"
|
|
270
|
+
@provider.should_receive(:shell_out!).with(add_remote_command,
|
|
271
|
+
:cwd => "/my/deploy/dir",
|
|
272
|
+
:log_tag => "git[web2.0 app]")
|
|
273
|
+
@provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
it "runs the config with the user and group specified in the resource" do
|
|
277
|
+
@resource.user("whois")
|
|
278
|
+
@resource.group("thisis")
|
|
279
|
+
command_response = double('shell_out')
|
|
280
|
+
command_response.stub(:exitstatus) { 1 }
|
|
281
|
+
expected_command = "git config --get remote.#{@resource.remote}.url"
|
|
282
|
+
@provider.should_receive(:shell_out!).with(expected_command,
|
|
283
|
+
:cwd => "/my/deploy/dir",
|
|
284
|
+
:log_tag => "git[web2.0 app]",
|
|
285
|
+
:user => "whois",
|
|
286
|
+
:group => "thisis",
|
|
287
|
+
:returns => [0,1,2]).and_return(command_response)
|
|
288
|
+
add_remote_command = "git remote add #{@resource.remote} #{@resource.repository}"
|
|
289
|
+
@provider.should_receive(:shell_out!).with(add_remote_command,
|
|
290
|
+
:cwd => "/my/deploy/dir",
|
|
291
|
+
:log_tag => "git[web2.0 app]",
|
|
292
|
+
:user => "whois",
|
|
293
|
+
:group => "thisis")
|
|
294
|
+
@provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
describe "when a remote with a given name hasn't been configured yet" do
|
|
298
|
+
it "adds a new remote " do
|
|
299
|
+
command_response = double('shell_out')
|
|
300
|
+
command_response.stub(:exitstatus) { 1 }
|
|
301
|
+
check_remote_command = "git config --get remote.#{@resource.remote}.url"
|
|
302
|
+
@provider.should_receive(:shell_out!).with(check_remote_command,
|
|
303
|
+
:cwd => "/my/deploy/dir",
|
|
304
|
+
:log_tag => "git[web2.0 app]",
|
|
305
|
+
:returns => [0,1,2]).and_return(command_response)
|
|
306
|
+
expected_command = "git remote add #{@resource.remote} #{@resource.repository}"
|
|
307
|
+
@provider.should_receive(:shell_out!).with(expected_command,
|
|
308
|
+
:cwd => "/my/deploy/dir",
|
|
309
|
+
:log_tag => "git[web2.0 app]")
|
|
310
|
+
@provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
describe "when a remote with a given name has already been configured" do
|
|
315
|
+
it "updates remote url when the url is different" do
|
|
316
|
+
command_response = double('shell_out')
|
|
317
|
+
command_response.stub(:exitstatus) { 0 }
|
|
318
|
+
command_response.stub(:stdout) { "some_other_url" }
|
|
319
|
+
check_remote_command = "git config --get remote.#{@resource.remote}.url"
|
|
320
|
+
@provider.should_receive(:shell_out!).with(check_remote_command,
|
|
321
|
+
:cwd => "/my/deploy/dir",
|
|
322
|
+
:log_tag => "git[web2.0 app]",
|
|
323
|
+
:returns => [0,1,2]).and_return(command_response)
|
|
324
|
+
expected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
|
|
325
|
+
@provider.should_receive(:shell_out!).with(expected_command,
|
|
326
|
+
:cwd => "/my/deploy/dir",
|
|
327
|
+
:log_tag => "git[web2.0 app]")
|
|
328
|
+
@provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
it "doesn't update remote url when the url is the same" do
|
|
332
|
+
command_response = double('shell_out')
|
|
333
|
+
command_response.stub(:exitstatus) { 0 }
|
|
334
|
+
command_response.stub(:stdout) { @resource.repository }
|
|
335
|
+
check_remote_command = "git config --get remote.#{@resource.remote}.url"
|
|
336
|
+
@provider.should_receive(:shell_out!).with(check_remote_command,
|
|
337
|
+
:cwd => "/my/deploy/dir",
|
|
338
|
+
:log_tag => "git[web2.0 app]",
|
|
339
|
+
:returns => [0,1,2]).and_return(command_response)
|
|
340
|
+
unexpected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
|
|
341
|
+
@provider.should_not_receive(:shell_out!).with(unexpected_command,
|
|
342
|
+
:cwd => "/my/deploy/dir",
|
|
343
|
+
:log_tag => "git[web2.0 app]")
|
|
344
|
+
@provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
it "resets remote url when it has multiple values" do
|
|
348
|
+
command_response = double('shell_out')
|
|
349
|
+
command_response.stub(:exitstatus) { 2 }
|
|
350
|
+
check_remote_command = "git config --get remote.#{@resource.remote}.url"
|
|
351
|
+
@provider.should_receive(:shell_out!).with(check_remote_command,
|
|
352
|
+
:cwd => "/my/deploy/dir",
|
|
353
|
+
:log_tag => "git[web2.0 app]",
|
|
354
|
+
:returns => [0,1,2]).and_return(command_response)
|
|
355
|
+
expected_command = "git config --replace-all remote.#{@resource.remote}.url #{@resource.repository}"
|
|
356
|
+
@provider.should_receive(:shell_out!).with(expected_command,
|
|
357
|
+
:cwd => "/my/deploy/dir",
|
|
358
|
+
:log_tag => "git[web2.0 app]")
|
|
359
|
+
@provider.setup_remote_tracking_branches(@resource.remote, @resource.repository)
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
235
364
|
it "raises an error if the git clone command would fail because the enclosing directory doesn't exist" do
|
|
236
365
|
@provider.stub!(:shell_out!)
|
|
237
366
|
lambda {@provider.run_action(:sync)}.should raise_error(Chef::Exceptions::MissingParentDirectory)
|
|
238
367
|
end
|
|
239
368
|
|
|
240
369
|
it "does a checkout by cloning the repo and then enabling submodules" do
|
|
241
|
-
# will be invoked in load_current_resource
|
|
370
|
+
# will be invoked in load_current_resource
|
|
242
371
|
::File.stub!(:exist?).with("/my/deploy/dir/.git").and_return(false)
|
|
243
372
|
|
|
244
373
|
::File.stub!(:exist?).with("/my/deploy/dir").and_return(true)
|
|
@@ -263,12 +392,13 @@ SHAS
|
|
|
263
392
|
@provider.should_receive(:clone)
|
|
264
393
|
@provider.should_receive(:checkout)
|
|
265
394
|
@provider.should_receive(:enable_submodules)
|
|
395
|
+
@provider.should_receive(:add_remotes)
|
|
266
396
|
@provider.run_action(:checkout)
|
|
267
397
|
# @resource.should be_updated
|
|
268
398
|
end
|
|
269
399
|
|
|
270
400
|
it "should not checkout if the destination exists or is a non empty directory" do
|
|
271
|
-
# will be invoked in load_current_resource
|
|
401
|
+
# will be invoked in load_current_resource
|
|
272
402
|
::File.stub!(:exist?).with("/my/deploy/dir/.git").and_return(false)
|
|
273
403
|
|
|
274
404
|
::File.stub!(:exist?).with("/my/deploy/dir").and_return(true)
|
|
@@ -277,6 +407,7 @@ SHAS
|
|
|
277
407
|
@provider.should_not_receive(:clone)
|
|
278
408
|
@provider.should_not_receive(:checkout)
|
|
279
409
|
@provider.should_not_receive(:enable_submodules)
|
|
410
|
+
@provider.should_not_receive(:add_remotes)
|
|
280
411
|
@provider.run_action(:checkout)
|
|
281
412
|
@resource.should_not be_updated
|
|
282
413
|
end
|
|
@@ -286,6 +417,7 @@ SHAS
|
|
|
286
417
|
::File.stub!(:directory?).with("/my/deploy").and_return(true)
|
|
287
418
|
@provider.should_receive(:find_current_revision).exactly(2).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
|
|
288
419
|
@provider.should_not_receive(:fetch_updates)
|
|
420
|
+
@provider.should_receive(:add_remotes)
|
|
289
421
|
@provider.run_action(:sync)
|
|
290
422
|
@resource.should_not be_updated
|
|
291
423
|
end
|
|
@@ -298,6 +430,7 @@ SHAS
|
|
|
298
430
|
@provider.stub!(:target_revision).and_return('28af684d8460ba4793eda3e7ac238c864a5d029a')
|
|
299
431
|
@provider.should_receive(:fetch_updates)
|
|
300
432
|
@provider.should_receive(:enable_submodules)
|
|
433
|
+
@provider.should_receive(:add_remotes)
|
|
301
434
|
@provider.run_action(:sync)
|
|
302
435
|
# @resource.should be_updated
|
|
303
436
|
end
|
|
@@ -308,6 +441,7 @@ SHAS
|
|
|
308
441
|
@provider.stub!(:find_current_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
|
|
309
442
|
@provider.stub!(:target_revision).and_return('d35af14d41ae22b19da05d7d03a0bafc321b244c')
|
|
310
443
|
@provider.should_not_receive(:fetch_updates)
|
|
444
|
+
@provider.should_receive(:add_remotes)
|
|
311
445
|
@provider.run_action(:sync)
|
|
312
446
|
@resource.should_not be_updated
|
|
313
447
|
end
|
|
@@ -339,4 +473,66 @@ SHAS
|
|
|
339
473
|
@resource.should be_updated
|
|
340
474
|
end
|
|
341
475
|
|
|
476
|
+
describe "calling add_remotes" do
|
|
477
|
+
it "adds a new remote for each entry in additional remotes hash" do
|
|
478
|
+
@resource.additional_remotes({:opscode => "opscode_repo_url",
|
|
479
|
+
:another_repo => "some_other_repo_url"})
|
|
480
|
+
STDOUT.stub(:tty?).and_return(false)
|
|
481
|
+
command_response = double('shell_out')
|
|
482
|
+
command_response.stub(:exitstatus) { 0 }
|
|
483
|
+
@resource.additional_remotes.each_pair do |remote_name, remote_url|
|
|
484
|
+
@provider.should_receive(:setup_remote_tracking_branches).with(remote_name, remote_url)
|
|
485
|
+
end
|
|
486
|
+
@provider.add_remotes
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
describe "calling multiple_remotes?" do
|
|
491
|
+
before(:each) do
|
|
492
|
+
@command_response = double('shell_out')
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
describe "when check remote command returns with status 2" do
|
|
496
|
+
it "returns true" do
|
|
497
|
+
@command_response.stub(:exitstatus) { 2 }
|
|
498
|
+
@provider.multiple_remotes?(@command_response).should be_true
|
|
499
|
+
end
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
describe "when check remote command returns with status 0" do
|
|
503
|
+
it "returns false" do
|
|
504
|
+
@command_response.stub(:exitstatus) { 0 }
|
|
505
|
+
@provider.multiple_remotes?(@command_response).should be_false
|
|
506
|
+
end
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
describe "when check remote command returns with status 0" do
|
|
510
|
+
it "returns false" do
|
|
511
|
+
@command_response.stub(:exitstatus) { 1 }
|
|
512
|
+
@provider.multiple_remotes?(@command_response).should be_false
|
|
513
|
+
end
|
|
514
|
+
end
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
describe "calling remote_matches?" do
|
|
518
|
+
before(:each) do
|
|
519
|
+
@command_response = double('shell_out')
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
describe "when output of the check remote command matches the repository url" do
|
|
523
|
+
it "returns true" do
|
|
524
|
+
@command_response.stub(:exitstatus) { 0 }
|
|
525
|
+
@command_response.stub(:stdout) { @resource.repository }
|
|
526
|
+
@provider.remote_matches?(@resource.repository, @command_response).should be_true
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
describe "when output of the check remote command doesn't match the repository url" do
|
|
531
|
+
it "returns false" do
|
|
532
|
+
@command_response.stub(:exitstatus) { 0 }
|
|
533
|
+
@command_response.stub(:stdout) { @resource.repository + "test" }
|
|
534
|
+
@provider.remote_matches?(@resource.repository, @command_response).should be_false
|
|
535
|
+
end
|
|
536
|
+
end
|
|
537
|
+
end
|
|
342
538
|
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Xabier de Zuazo (xabier@onddo.com)
|
|
3
|
+
# Copyright:: Copyright (c) 2013 Onddo Labs, SL.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
require 'chef/exceptions'
|
|
21
|
+
|
|
22
|
+
describe Chef::Provider::Ifconfig::Debian do
|
|
23
|
+
before do
|
|
24
|
+
@node = Chef::Node.new
|
|
25
|
+
@cookbook_collection = Chef::CookbookCollection.new([])
|
|
26
|
+
@events = Chef::EventDispatch::Dispatcher.new
|
|
27
|
+
@run_context = Chef::RunContext.new(@node, @cookbook_collection, @events)
|
|
28
|
+
#This new_resource can be called anything --> it is not the same as in ifconfig.rb
|
|
29
|
+
@new_resource = Chef::Resource::Ifconfig.new("10.0.0.1", @run_context)
|
|
30
|
+
@new_resource.mask "255.255.254.0"
|
|
31
|
+
@new_resource.metric "1"
|
|
32
|
+
@new_resource.mtu "1500"
|
|
33
|
+
@new_resource.device "eth0"
|
|
34
|
+
@provider = Chef::Provider::Ifconfig::Debian.new(@new_resource, @run_context)
|
|
35
|
+
@current_resource = Chef::Resource::Ifconfig.new("10.0.0.1", @run_context)
|
|
36
|
+
|
|
37
|
+
status = mock("Status", :exitstatus => 0)
|
|
38
|
+
@provider.instance_variable_set("@status", status)
|
|
39
|
+
@provider.current_resource = @current_resource
|
|
40
|
+
@provider.stub!(:load_current_resource)
|
|
41
|
+
@provider.stub!(:run_command)
|
|
42
|
+
|
|
43
|
+
@config_filename_ifaces = "/etc/network/interfaces"
|
|
44
|
+
@config_filename_ifcfg = "/etc/network/interfaces.d/ifcfg-#{@new_resource.device}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "generate_config for action_add" do
|
|
48
|
+
before do
|
|
49
|
+
@config_file_ifaces = StringIO.new
|
|
50
|
+
@config_file_ifcfg = StringIO.new
|
|
51
|
+
FileUtils.should_receive(:cp)
|
|
52
|
+
File.should_receive(:new).with(@config_filename_ifaces).and_return(StringIO.new)
|
|
53
|
+
File.should_receive(:open).with(@config_filename_ifaces, "w").and_yield(@config_file_ifaces)
|
|
54
|
+
File.should_receive(:new).with(@config_filename_ifcfg, "w").and_return(@config_file_ifcfg)
|
|
55
|
+
File.should_receive(:exist?).with(@config_filename_ifaces).and_return(true)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should create network-scripts directory" do
|
|
59
|
+
File.should_receive(:directory?).with(File.dirname(@config_filename_ifcfg)).and_return(false)
|
|
60
|
+
Dir.should_receive(:mkdir).with(File.dirname(@config_filename_ifcfg))
|
|
61
|
+
@provider.run_action(:add)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should write configure network-scripts directory" do
|
|
65
|
+
File.should_receive(:directory?).with(File.dirname(@config_filename_ifcfg)).and_return(true)
|
|
66
|
+
@provider.run_action(:add)
|
|
67
|
+
@config_file_ifaces.string.should match(/^\s*source\s+\/etc\/network\/interfaces[.]d\/[*]\s*$/)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should write a network-script" do
|
|
71
|
+
File.should_receive(:directory?).with(File.dirname(@config_filename_ifcfg)).and_return(true)
|
|
72
|
+
@provider.run_action(:add)
|
|
73
|
+
@config_file_ifcfg.string.should match(/^iface eth0 inet static\s*$/)
|
|
74
|
+
@config_file_ifcfg.string.should match(/^\s+address 10\.0\.0\.1\s*$/)
|
|
75
|
+
@config_file_ifcfg.string.should match(/^\s+netmask 255\.255\.254\.0\s*$/)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "delete_config for action_delete" do
|
|
80
|
+
|
|
81
|
+
it "should delete network-script if it exists" do
|
|
82
|
+
@current_resource.device @new_resource.device
|
|
83
|
+
File.should_receive(:exist?).with(@config_filename_ifcfg).and_return(true)
|
|
84
|
+
FileUtils.should_receive(:rm_f).with(@config_filename_ifcfg, :verbose => false)
|
|
85
|
+
|
|
86
|
+
@provider.run_action(:delete)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|