chef 12.0.0.alpha.2-x86-mingw32 → 12.0.0.rc.0-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTING.md +9 -0
- data/README.md +1 -1
- data/Rakefile +12 -0
- data/bin/chef-service-manager +1 -1
- data/bin/chef-windows-service +35 -0
- data/distro/common/html/_sources/ctl_chef_server.txt +307 -10
- data/distro/common/html/ctl_chef_client.html +3 -7
- data/distro/common/html/ctl_chef_server.html +609 -41
- data/distro/common/html/ctl_chef_shell.html +2 -2
- data/distro/common/html/ctl_chef_solo.html +1 -1
- data/distro/common/html/index.html +13 -13
- data/distro/common/html/knife.html +10 -10
- data/distro/common/html/knife_bootstrap.html +8 -8
- data/distro/common/html/knife_client.html +12 -12
- data/distro/common/html/knife_common_options.html +7 -7
- data/distro/common/html/knife_configure.html +3 -3
- data/distro/common/html/knife_cookbook.html +19 -19
- data/distro/common/html/knife_cookbook_site.html +28 -28
- data/distro/common/html/knife_data_bag.html +28 -13
- data/distro/common/html/knife_delete.html +2 -2
- data/distro/common/html/knife_deps.html +3 -3
- data/distro/common/html/knife_diff.html +4 -4
- data/distro/common/html/knife_download.html +3 -3
- data/distro/common/html/knife_edit.html +2 -2
- data/distro/common/html/knife_environment.html +14 -14
- data/distro/common/html/knife_exec.html +11 -11
- data/distro/common/html/knife_index_rebuild.html +2 -2
- data/distro/common/html/knife_list.html +3 -3
- data/distro/common/html/knife_node.html +23 -23
- data/distro/common/html/knife_raw.html +4 -4
- data/distro/common/html/knife_recipe_list.html +3 -3
- data/distro/common/html/knife_role.html +11 -11
- data/distro/common/html/knife_search.html +4 -4
- data/distro/common/html/knife_serve.html +3 -3
- data/distro/common/html/knife_show.html +3 -3
- data/distro/common/html/knife_ssh.html +7 -7
- data/distro/common/html/knife_ssl_check.html +7 -7
- data/distro/common/html/knife_ssl_fetch.html +9 -9
- data/distro/common/html/knife_status.html +3 -3
- data/distro/common/html/knife_tag.html +9 -9
- data/distro/common/html/knife_upload.html +3 -3
- data/distro/common/html/knife_user.html +9 -9
- data/distro/common/html/knife_using.html +11 -11
- data/distro/common/html/knife_xargs.html +14 -5
- data/distro/common/html/search.html +2 -2
- data/distro/common/html/searchindex.js +1 -1
- data/distro/common/man/man1/chef-shell.1 +2 -2
- data/distro/common/man/man1/knife-bootstrap.1 +7 -7
- data/distro/common/man/man1/knife-client.1 +10 -10
- data/distro/common/man/man1/knife-configure.1 +5 -5
- data/distro/common/man/man1/knife-cookbook-site.1 +24 -24
- data/distro/common/man/man1/knife-cookbook.1 +12 -12
- data/distro/common/man/man1/knife-data-bag.1 +34 -10
- data/distro/common/man/man1/knife-delete.1 +5 -5
- data/distro/common/man/man1/knife-deps.1 +5 -5
- data/distro/common/man/man1/knife-diff.1 +7 -7
- data/distro/common/man/man1/knife-download.1 +5 -5
- data/distro/common/man/man1/knife-edit.1 +5 -5
- data/distro/common/man/man1/knife-environment.1 +11 -11
- data/distro/common/man/man1/knife-exec.1 +11 -11
- data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
- data/distro/common/man/man1/knife-list.1 +5 -5
- data/distro/common/man/man1/knife-node.1 +16 -16
- data/distro/common/man/man1/knife-raw.1 +6 -6
- data/distro/common/man/man1/knife-recipe-list.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +7 -7
- data/distro/common/man/man1/knife-search.1 +6 -6
- data/distro/common/man/man1/knife-serve.1 +6 -6
- data/distro/common/man/man1/knife-show.1 +5 -5
- data/distro/common/man/man1/knife-ssh.1 +9 -9
- data/distro/common/man/man1/knife-ssl-check.1 +7 -7
- data/distro/common/man/man1/knife-ssl-fetch.1 +9 -9
- data/distro/common/man/man1/knife-status.1 +5 -5
- data/distro/common/man/man1/knife-tag.1 +8 -8
- data/distro/common/man/man1/knife-upload.1 +5 -5
- data/distro/common/man/man1/knife-user.1 +8 -8
- data/distro/common/man/man1/knife-xargs.1 +36 -10
- data/distro/common/man/man1/knife.1 +14 -14
- data/distro/common/man/man8/chef-client.8 +3 -10
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/ext/win32-eventlog/Rakefile +50 -0
- data/ext/win32-eventlog/chef-log.man +26 -0
- data/lib/chef/application.rb +313 -241
- data/lib/chef/application/apply.rb +10 -8
- data/lib/chef/application/client.rb +58 -33
- data/lib/chef/application/solo.rb +33 -12
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/command_line.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -1
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +2 -1
- data/lib/chef/client.rb +18 -48
- data/lib/chef/config.rb +43 -11
- data/lib/chef/cookbook/cookbook_version_loader.rb +14 -7
- data/lib/chef/cookbook/metadata.rb +81 -38
- data/lib/chef/cookbook/syntax_check.rb +18 -52
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/cookbook_version.rb +58 -39
- data/lib/chef/data_bag.rb +2 -2
- data/lib/chef/deprecation/provider/file.rb +2 -1
- data/lib/chef/dsl/data_query.rb +2 -29
- data/lib/chef/dsl/recipe.rb +8 -22
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -0
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +1 -1
- data/lib/chef/event_loggers/base.rb +62 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +104 -0
- data/lib/chef/exceptions.rb +18 -1
- data/lib/chef/file_cache.rb +3 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +15 -6
- data/lib/chef/http.rb +20 -13
- data/lib/chef/http/ssl_policies.rb +2 -1
- data/lib/chef/json_compat.rb +9 -3
- data/lib/chef/knife.rb +2 -1
- data/lib/chef/knife/bootstrap.rb +12 -18
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-aix.erb +2 -2
- data/lib/chef/knife/bootstrap/chef-full.erb +2 -2
- data/lib/chef/knife/cookbook_create.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +43 -8
- data/lib/chef/knife/core/bootstrap_context.rb +6 -11
- data/lib/chef/knife/core/object_loader.rb +5 -5
- data/lib/chef/knife/core/status_presenter.rb +156 -0
- data/lib/chef/knife/core/subcommand_loader.rb +6 -5
- data/lib/chef/knife/core/ui.rb +4 -4
- data/lib/chef/knife/data_bag_create.rb +7 -32
- data/lib/chef/knife/data_bag_edit.rb +24 -43
- data/lib/chef/knife/data_bag_from_file.rb +6 -31
- data/lib/chef/knife/data_bag_secret_options.rb +142 -0
- data/lib/chef/knife/data_bag_show.rb +19 -33
- data/lib/chef/knife/node_from_file.rb +9 -8
- data/lib/chef/knife/ssh.rb +0 -7
- data/lib/chef/knife/ssl_check.rb +70 -6
- data/lib/chef/knife/status.rb +11 -58
- data/lib/chef/mixin/command/unix.rb +2 -2
- data/lib/chef/mixin/convert_to_class_name.rb +54 -0
- data/lib/chef/mixin/descendants_tracker.rb +82 -0
- data/lib/chef/mixin/homebrew_user.rb +68 -0
- data/lib/chef/mixin/shell_out.rb +0 -4
- data/lib/chef/mixin/windows_architecture_helper.rb +16 -0
- data/lib/chef/mixin/windows_env_helper.rb +56 -0
- data/lib/chef/node.rb +2 -2
- data/lib/chef/node_map.rb +146 -0
- data/lib/chef/platform/provider_mapping.rb +11 -39
- data/lib/chef/platform/provider_priority_map.rb +80 -0
- data/lib/chef/platform/query_helpers.rb +5 -1
- data/lib/chef/platform/service_helpers.rb +113 -0
- data/lib/chef/provider.rb +24 -0
- data/lib/chef/provider/breakpoint.rb +2 -0
- data/lib/chef/provider/cookbook_file.rb +2 -0
- data/lib/chef/provider/cron.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +13 -9
- data/lib/chef/provider/deploy.rb +3 -2
- data/lib/chef/provider/deploy/revision.rb +4 -2
- data/lib/chef/provider/deploy/timestamped.rb +2 -0
- data/lib/chef/provider/directory.rb +2 -0
- data/lib/chef/provider/dsc_script.rb +179 -0
- data/lib/chef/provider/env.rb +25 -10
- data/lib/chef/provider/env/windows.rb +9 -16
- data/lib/chef/provider/erl_call.rb +2 -0
- data/lib/chef/provider/execute.rb +5 -2
- data/lib/chef/provider/file.rb +2 -0
- data/lib/chef/provider/git.rb +51 -23
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/pw.rb +9 -13
- data/lib/chef/provider/http_request.rb +2 -0
- data/lib/chef/provider/link.rb +3 -0
- data/lib/chef/provider/log.rb +2 -0
- data/lib/chef/provider/lwrp_base.rb +11 -9
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/package/aix.rb +2 -0
- data/lib/chef/provider/package/apt.rb +2 -0
- data/lib/chef/provider/package/dpkg.rb +2 -0
- data/lib/chef/provider/package/easy_install.rb +2 -0
- data/lib/chef/provider/package/freebsd/pkg.rb +2 -1
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/freebsd/port.rb +1 -9
- data/lib/chef/provider/package/homebrew.rb +127 -0
- data/lib/chef/provider/package/ips.rb +2 -0
- data/lib/chef/provider/package/macports.rb +3 -0
- data/lib/chef/provider/package/pacman.rb +5 -4
- data/lib/chef/provider/package/paludis.rb +4 -2
- data/lib/chef/provider/package/portage.rb +4 -1
- data/lib/chef/provider/package/rpm.rb +2 -0
- data/lib/chef/provider/package/rubygems.rb +4 -0
- data/lib/chef/provider/package/smartos.rb +2 -0
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/windows.rb +5 -2
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/powershell_script.rb +3 -1
- data/lib/chef/provider/remote_directory.rb +25 -10
- data/lib/chef/provider/route.rb +2 -0
- data/lib/chef/provider/ruby_block.rb +2 -0
- data/lib/chef/provider/script.rb +6 -0
- data/lib/chef/provider/service/aix.rb +128 -0
- data/lib/chef/provider/service/aixinit.rb +117 -0
- data/lib/chef/provider/service/arch.rb +6 -0
- data/lib/chef/provider/service/debian.rb +35 -29
- data/lib/chef/provider/service/freebsd.rb +7 -1
- data/lib/chef/provider/service/gentoo.rb +5 -1
- data/lib/chef/provider/service/init.rb +2 -0
- data/lib/chef/provider/service/insserv.rb +15 -8
- data/lib/chef/provider/service/invokercd.rb +6 -0
- data/lib/chef/provider/service/macosx.rb +4 -1
- data/lib/chef/provider/service/redhat.rb +9 -3
- data/lib/chef/provider/service/simple.rb +2 -0
- data/lib/chef/provider/service/solaris.rb +2 -0
- data/lib/chef/provider/service/systemd.rb +7 -0
- data/lib/chef/provider/service/upstart.rb +7 -0
- data/lib/chef/provider/service/windows.rb +5 -0
- data/lib/chef/provider/subversion.rb +2 -0
- data/lib/chef/provider/template.rb +1 -0
- data/lib/chef/provider/user/dscl.rb +3 -2
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +2 -0
- data/lib/chef/provider_resolver.rb +103 -0
- data/lib/chef/providers.rb +6 -2
- data/lib/chef/recipe.rb +2 -0
- data/lib/chef/resource.rb +69 -78
- data/lib/chef/resource/apt_package.rb +3 -1
- data/lib/chef/resource/bash.rb +1 -0
- data/lib/chef/resource/bff_package.rb +0 -1
- data/lib/chef/resource/breakpoint.rb +1 -1
- data/lib/chef/resource/chef_gem.rb +1 -2
- data/lib/chef/resource/conditional.rb +26 -6
- data/lib/chef/resource/cookbook_file.rb +2 -3
- data/lib/chef/resource/csh.rb +1 -0
- data/lib/chef/resource/deploy.rb +0 -1
- data/lib/chef/resource/deploy_revision.rb +6 -1
- data/lib/chef/resource/directory.rb +1 -2
- data/lib/chef/resource/dpkg_package.rb +2 -1
- data/lib/chef/resource/dsc_script.rb +125 -0
- data/lib/chef/resource/easy_install_package.rb +2 -1
- data/lib/chef/resource/erl_call.rb +1 -0
- data/lib/chef/resource/execute.rb +26 -9
- data/lib/chef/resource/file.rb +1 -3
- data/lib/chef/resource/freebsd_package.rb +10 -23
- data/lib/chef/resource/gem_package.rb +2 -1
- data/lib/chef/resource/git.rb +2 -1
- data/lib/chef/resource/homebrew_package.rb +46 -0
- data/lib/chef/resource/http_request.rb +1 -0
- data/lib/chef/resource/ips_package.rb +3 -1
- data/lib/chef/resource/link.rb +1 -2
- data/lib/chef/resource/log.rb +4 -0
- data/lib/chef/resource/lwrp_base.rb +24 -15
- data/lib/chef/resource/macports_package.rb +3 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +3 -1
- data/lib/chef/resource/perl.rb +1 -0
- data/lib/chef/resource/powershell_script.rb +0 -2
- data/lib/chef/resource/python.rb +1 -1
- data/lib/chef/resource/remote_directory.rb +1 -2
- data/lib/chef/resource/remote_file.rb +1 -1
- data/lib/chef/resource/rpm_package.rb +2 -1
- data/lib/chef/resource/ruby.rb +1 -0
- data/lib/chef/resource/ruby_block.rb +3 -0
- data/lib/chef/resource/script.rb +2 -25
- data/lib/chef/resource/service.rb +0 -4
- data/lib/chef/resource/smartos_package.rb +3 -4
- data/lib/chef/resource/solaris_package.rb +7 -1
- data/lib/chef/resource/subversion.rb +0 -1
- data/lib/chef/resource/template.rb +2 -3
- data/lib/chef/resource/timestamped_deploy.rb +1 -2
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
- data/lib/chef/resource/windows_package.rb +3 -4
- data/lib/chef/resource/windows_script.rb +3 -0
- data/lib/chef/resource/windows_service.rb +2 -2
- data/lib/chef/resource/yum_package.rb +3 -1
- data/lib/chef/resource_collection.rb +50 -227
- data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -0
- data/lib/chef/resource_collection/resource_list.rb +89 -0
- data/lib/chef/resource_collection/resource_set.rb +170 -0
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +5 -1
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/backup.rb +3 -2
- data/lib/chef/util/dsc/configuration_generator.rb +115 -0
- data/lib/chef/util/dsc/lcm_output_parser.rb +133 -0
- data/lib/chef/util/dsc/local_configuration_manager.rb +141 -0
- data/lib/chef/util/dsc/resource_info.rb +26 -0
- data/lib/chef/util/path_helper.rb +12 -0
- data/lib/chef/util/powershell/cmdlet.rb +136 -0
- data/lib/chef/util/powershell/cmdlet_result.rb +46 -0
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/system.rb +9 -0
- data/lib/chef/win32/version.rb +2 -0
- data/spec/.DS_Store +0 -0
- data/spec/data/.DS_Store +0 -0
- data/spec/data/bootstrap/test-hints.erb +1 -1
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/cookbook2/files/test.txt +0 -0
- data/spec/data/cb_version_cookbooks/cookbook2/templates/test.erb +0 -0
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -0
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -0
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -0
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -0
- data/spec/data/lwrp/.DS_Store +0 -0
- data/spec/data/lwrp/providers/.DS_Store +0 -0
- data/spec/data/lwrp/providers/buck_passer.rb +9 -2
- data/spec/data/lwrp/resources/.DS_Store +0 -0
- data/spec/data/lwrp/resources/foo.rb +3 -2
- data/spec/data/lwrp_override/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/.DS_Store +0 -0
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -10
- data/spec/data/lwrp_override/resources/.DS_Store +0 -0
- data/spec/data/lwrp_override/resources/foo.rb +4 -3
- data/spec/functional/assets/chefinittest +34 -0
- data/spec/functional/assets/testchefsubsys +11 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +19 -16
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +82 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +3 -3
- data/spec/functional/knife/exec_spec.rb +1 -1
- data/spec/functional/resource/aix_service_spec.rb +136 -0
- data/spec/functional/resource/aixinit_service_spec.rb +211 -0
- data/spec/functional/resource/base.rb +1 -0
- data/spec/functional/resource/batch_spec.rb +4 -11
- data/spec/functional/resource/cron_spec.rb +7 -1
- data/spec/functional/resource/dsc_script_spec.rb +382 -0
- data/spec/functional/resource/env_spec.rb +54 -0
- data/spec/functional/resource/execute_spec.rb +113 -0
- data/spec/functional/resource/file_spec.rb +2 -0
- data/spec/functional/resource/group_spec.rb +7 -4
- data/spec/functional/resource/powershell_spec.rb +198 -185
- data/spec/functional/resource/rpm_spec.rb +5 -4
- data/spec/functional/resource/user/dscl_spec.rb +2 -1
- data/spec/functional/util/path_helper_spec.rb +37 -0
- data/spec/functional/util/powershell/cmdlet_spec.rb +114 -0
- data/spec/integration/client/client_spec.rb +1 -1
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/chef_fs_data_store_spec.rb +1 -1
- data/spec/integration/knife/chef_repo_path_spec.rb +1 -1
- data/spec/integration/knife/chef_repository_file_system_spec.rb +1 -1
- data/spec/integration/knife/chefignore_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +1 -1
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +2 -2
- data/spec/integration/knife/delete_spec.rb +1 -1
- data/spec/integration/knife/deps_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +1 -1
- data/spec/integration/knife/download_spec.rb +1 -1
- data/spec/integration/knife/list_spec.rb +1 -1
- data/spec/integration/knife/raw_spec.rb +1 -1
- data/spec/integration/knife/redirection_spec.rb +1 -1
- data/spec/integration/knife/serve_spec.rb +1 -1
- data/spec/integration/knife/show_spec.rb +1 -1
- data/spec/integration/knife/upload_spec.rb +4 -3
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -0
- data/spec/support/chef_helpers.rb +1 -0
- data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
- data/spec/support/lib/chef/resource/zen_follower.rb +1 -7
- data/spec/support/platform_helpers.rb +28 -0
- data/spec/support/shared/functional/file_resource.rb +6 -0
- data/spec/support/shared/functional/windows_script.rb +118 -0
- data/spec/support/shared/integration/integration_helper.rb +5 -2
- data/spec/support/shared/matchers/exit_with_code.rb +28 -0
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -0
- data/spec/support/shared/shared_examples.rb +14 -0
- data/spec/support/shared/unit/execute_resource.rb +0 -7
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +71 -0
- data/spec/support/shared/unit/script_resource.rb +1 -1
- data/spec/support/shared/unit/windows_script_resource.rb +35 -2
- data/spec/tiny_server.rb +1 -2
- data/spec/unit/api_client_spec.rb +5 -1
- data/spec/unit/application/{apply.rb → apply_spec.rb} +13 -5
- data/spec/unit/application/client_spec.rb +106 -13
- data/spec/unit/application/solo_spec.rb +25 -1
- data/spec/unit/client_spec.rb +1 -26
- data/spec/unit/config_fetcher_spec.rb +2 -1
- data/spec/unit/config_spec.rb +91 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +8 -0
- data/spec/unit/cookbook/metadata_spec.rb +43 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +8 -2
- data/spec/unit/cookbook_loader_spec.rb +4 -2
- data/spec/unit/cookbook_version_spec.rb +83 -2
- data/spec/unit/data_bag_item_spec.rb +5 -1
- data/spec/unit/data_bag_spec.rb +6 -1
- data/spec/unit/dsl/data_query_spec.rb +8 -110
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +16 -23
- data/spec/unit/environment_spec.rb +6 -2
- data/spec/unit/exceptions_spec.rb +6 -0
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +16 -15
- data/spec/unit/json_compat_spec.rb +12 -2
- data/spec/unit/knife/bootstrap_spec.rb +16 -63
- data/spec/unit/knife/cookbook_site_share_spec.rb +59 -6
- data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -37
- data/spec/unit/knife/core/subcommand_loader_spec.rb +1 -1
- data/spec/unit/knife/core/ui_spec.rb +28 -0
- data/spec/unit/knife/data_bag_create_spec.rb +63 -71
- data/spec/unit/knife/data_bag_edit_spec.rb +83 -49
- data/spec/unit/knife/data_bag_from_file_spec.rb +104 -126
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -0
- data/spec/unit/knife/data_bag_show_spec.rb +74 -72
- data/spec/unit/knife/environment_from_file_spec.rb +3 -2
- data/spec/unit/knife/ssl_check_spec.rb +46 -1
- data/spec/unit/knife/status_spec.rb +1 -2
- data/spec/unit/knife_spec.rb +18 -1
- data/spec/unit/lwrp_spec.rb +29 -8
- data/spec/unit/mixin/homebrew_user_spec.rb +100 -0
- data/spec/unit/node_map_spec.rb +155 -0
- data/spec/unit/node_spec.rb +11 -0
- data/spec/unit/platform/query_helpers_spec.rb +23 -0
- data/spec/unit/platform_spec.rb +23 -0
- data/spec/unit/provider/breakpoint_spec.rb +9 -9
- data/spec/unit/provider/cookbook_file/content_spec.rb +3 -3
- data/spec/unit/provider/cookbook_file_spec.rb +1 -1
- data/spec/unit/provider/cron/unix_spec.rb +78 -60
- data/spec/unit/provider/cron_spec.rb +175 -175
- data/spec/unit/provider/deploy/revision_spec.rb +22 -21
- data/spec/unit/provider/deploy/timestamped_spec.rb +3 -3
- data/spec/unit/provider/deploy_spec.rb +231 -230
- data/spec/unit/provider/directory_spec.rb +55 -55
- data/spec/unit/provider/dsc_script_spec.rb +174 -0
- data/spec/unit/provider/env/windows_spec.rb +70 -34
- data/spec/unit/provider/env_spec.rb +95 -49
- data/spec/unit/provider/erl_call_spec.rb +9 -9
- data/spec/unit/provider/execute_spec.rb +43 -27
- data/spec/unit/provider/file/content_spec.rb +9 -9
- data/spec/unit/provider/file_spec.rb +1 -1
- data/spec/unit/provider/git_spec.rb +221 -159
- data/spec/unit/provider/group/dscl_spec.rb +64 -63
- data/spec/unit/provider/group/gpasswd_spec.rb +14 -14
- data/spec/unit/provider/group/groupadd_spec.rb +33 -33
- data/spec/unit/provider/group/groupmod_spec.rb +23 -23
- data/spec/unit/provider/group/pw_spec.rb +21 -21
- data/spec/unit/provider/group/usermod_spec.rb +20 -20
- data/spec/unit/provider/group/windows_spec.rb +15 -15
- data/spec/unit/provider/group_spec.rb +76 -76
- data/spec/unit/provider/http_request_spec.rb +30 -30
- data/spec/unit/provider/ifconfig/aix_spec.rb +20 -20
- data/spec/unit/provider/ifconfig/debian_spec.rb +25 -9
- data/spec/unit/provider/ifconfig/redhat_spec.rb +13 -13
- data/spec/unit/provider/ifconfig_spec.rb +43 -43
- data/spec/unit/provider/link_spec.rb +60 -60
- data/spec/unit/provider/log_spec.rb +0 -4
- data/spec/unit/provider/mdadm_spec.rb +23 -23
- data/spec/unit/provider/mount/aix_spec.rb +17 -17
- data/spec/unit/provider/mount/mount_spec.rb +115 -119
- data/spec/unit/provider/mount/solaris_spec.rb +72 -72
- data/spec/unit/provider/mount/windows_spec.rb +24 -24
- data/spec/unit/provider/ohai_spec.rb +11 -11
- data/spec/unit/provider/package/aix_spec.rb +34 -34
- data/spec/unit/provider/package/apt_spec.rb +36 -36
- data/spec/unit/provider/package/dpkg_spec.rb +27 -27
- data/spec/unit/provider/package/easy_install_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +53 -53
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +24 -24
- data/spec/unit/provider/package/freebsd/port_spec.rb +45 -35
- data/spec/unit/provider/package/homebrew_spec.rb +266 -0
- data/spec/unit/provider/package/ips_spec.rb +34 -34
- data/spec/unit/provider/package/macports_spec.rb +49 -49
- data/spec/unit/provider/package/pacman_spec.rb +35 -39
- data/spec/unit/provider/package/paludis_spec.rb +20 -20
- data/spec/unit/provider/package/portage_spec.rb +38 -38
- data/spec/unit/provider/package/rpm_spec.rb +29 -29
- data/spec/unit/provider/package/rubygems_spec.rb +284 -270
- data/spec/unit/provider/package/smartos_spec.rb +15 -15
- data/spec/unit/provider/package/solaris_spec.rb +35 -35
- data/spec/unit/provider/package/windows/msi_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +6 -6
- data/spec/unit/provider/package/yum_spec.rb +416 -416
- data/spec/unit/provider/package/zypper_spec.rb +47 -47
- data/spec/unit/provider/package_spec.rb +107 -107
- data/spec/unit/provider/powershell_spec.rb +1 -1
- data/spec/unit/provider/registry_key_spec.rb +61 -61
- data/spec/unit/provider/remote_directory_spec.rb +36 -36
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +24 -24
- data/spec/unit/provider/remote_file/content_spec.rb +45 -45
- data/spec/unit/provider/remote_file/fetcher_spec.rb +9 -9
- data/spec/unit/provider/remote_file/ftp_spec.rb +32 -32
- data/spec/unit/provider/remote_file/http_spec.rb +44 -44
- data/spec/unit/provider/remote_file/local_file_spec.rb +9 -9
- data/spec/unit/provider/remote_file_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +63 -63
- data/spec/unit/provider/ruby_block_spec.rb +4 -4
- data/spec/unit/provider/script_spec.rb +12 -12
- data/spec/unit/provider/service/aix_service_spec.rb +181 -0
- data/spec/unit/provider/service/aixinit_service_spec.rb +269 -0
- data/spec/unit/provider/service/arch_service_spec.rb +48 -48
- data/spec/unit/provider/service/debian_service_spec.rb +40 -40
- data/spec/unit/provider/service/gentoo_service_spec.rb +28 -28
- data/spec/unit/provider/service/init_service_spec.rb +39 -39
- data/spec/unit/provider/service/insserv_service_spec.rb +8 -8
- data/spec/unit/provider/service/invokercd_service_spec.rb +35 -35
- data/spec/unit/provider/service/macosx_spec.rb +49 -49
- data/spec/unit/provider/service/redhat_spec.rb +27 -27
- data/spec/unit/provider/service/simple_service_spec.rb +28 -28
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +43 -46
- data/spec/unit/provider/service/systemd_service_spec.rb +63 -63
- data/spec/unit/provider/service/upstart_service_spec.rb +78 -78
- data/spec/unit/provider/service/windows_spec.rb +92 -92
- data/spec/unit/provider/service_spec.rb +40 -40
- data/spec/unit/provider/subversion_spec.rb +80 -80
- data/spec/unit/provider/template/content_spec.rb +9 -9
- data/spec/unit/provider/template_spec.rb +6 -6
- data/spec/unit/provider/user/dscl_spec.rb +170 -167
- data/spec/unit/provider/user/pw_spec.rb +48 -48
- data/spec/unit/provider/user/solaris_spec.rb +8 -8
- data/spec/unit/provider/user/useradd_spec.rb +1 -1
- data/spec/unit/provider/user/windows_spec.rb +26 -26
- data/spec/unit/provider/user_spec.rb +72 -72
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +4 -4
- data/spec/unit/provider_resolver_spec.rb +387 -0
- data/spec/unit/recipe_spec.rb +33 -12
- data/spec/unit/resource/apt_package_spec.rb +10 -13
- data/spec/unit/resource/bash_spec.rb +4 -4
- data/spec/unit/resource/batch_spec.rb +1 -1
- data/spec/unit/resource/breakpoint_spec.rb +11 -7
- data/spec/unit/resource/chef_gem_spec.rb +8 -15
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +2 -2
- data/spec/unit/resource/conditional_spec.rb +35 -16
- data/spec/unit/resource/cookbook_file_spec.rb +13 -13
- data/spec/unit/resource/cron_spec.rb +37 -37
- data/spec/unit/resource/csh_spec.rb +4 -4
- data/spec/unit/resource/deploy_revision_spec.rb +13 -18
- data/spec/unit/resource/deploy_spec.rb +60 -55
- data/spec/unit/resource/directory_spec.rb +18 -18
- data/spec/unit/resource/dpkg_package_spec.rb +8 -14
- data/spec/unit/resource/dsc_script_spec.rb +98 -0
- data/spec/unit/resource/easy_install_package_spec.rb +9 -18
- data/spec/unit/resource/env_spec.rb +12 -12
- data/spec/unit/resource/erl_call_spec.rb +11 -11
- data/spec/unit/resource/execute_spec.rb +5 -0
- data/spec/unit/resource/file_spec.rb +29 -29
- data/spec/unit/resource/freebsd_package_spec.rb +11 -12
- data/spec/unit/resource/gem_package_spec.rb +8 -15
- data/spec/unit/resource/git_spec.rb +12 -8
- data/spec/unit/resource/group_spec.rb +27 -27
- data/spec/unit/resource/homebrew_package_spec.rb +50 -0
- data/spec/unit/resource/http_request_spec.rb +6 -6
- data/spec/unit/resource/ifconfig_spec.rb +8 -8
- data/spec/unit/resource/ips_package_spec.rb +10 -13
- data/spec/unit/resource/link_spec.rb +25 -25
- data/spec/unit/resource/log_spec.rb +9 -9
- data/spec/unit/resource/macports_package_spec.rb +8 -13
- data/spec/unit/resource/mdadm_spec.rb +18 -18
- data/spec/unit/resource/mount_spec.rb +45 -45
- data/spec/unit/resource/ohai_spec.rb +7 -7
- data/spec/unit/resource/package_spec.rb +12 -12
- data/spec/unit/resource/pacman_package_spec.rb +8 -14
- data/spec/unit/resource/perl_spec.rb +4 -4
- data/spec/unit/resource/portage_package_spec.rb +3 -3
- data/spec/unit/resource/powershell_spec.rb +7 -7
- data/spec/unit/resource/python_spec.rb +4 -4
- data/spec/unit/resource/registry_key_spec.rb +32 -32
- data/spec/unit/resource/remote_directory_spec.rb +17 -17
- data/spec/unit/resource/remote_file_spec.rb +41 -41
- data/spec/unit/resource/route_spec.rb +19 -19
- data/spec/unit/resource/rpm_package_spec.rb +9 -13
- data/spec/unit/resource/ruby_block_spec.rb +8 -8
- data/spec/unit/resource/ruby_spec.rb +4 -4
- data/spec/unit/resource/scm_spec.rb +40 -40
- data/spec/unit/resource/script_spec.rb +2 -2
- data/spec/unit/resource/service_spec.rb +37 -47
- data/spec/unit/resource/smartos_package_spec.rb +10 -15
- data/spec/unit/resource/solaris_package_spec.rb +13 -28
- data/spec/unit/resource/subversion_spec.rb +16 -12
- data/spec/unit/resource/template_spec.rb +35 -35
- data/spec/unit/resource/timestamped_deploy_spec.rb +30 -4
- data/spec/unit/resource/user_spec.rb +23 -23
- data/spec/unit/resource/windows_package_spec.rb +17 -10
- data/spec/unit/resource/windows_service_spec.rb +9 -6
- data/spec/unit/resource/yum_package_spec.rb +16 -21
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -0
- data/spec/unit/resource_collection/resource_set_spec.rb +199 -0
- data/spec/unit/resource_collection_spec.rb +73 -92
- data/spec/unit/resource_definition_spec.rb +38 -40
- data/spec/unit/resource_reporter_spec.rb +3 -3
- data/spec/unit/resource_spec.rb +68 -33
- data/spec/unit/rest_spec.rb +83 -76
- data/spec/unit/role_spec.rb +5 -0
- data/spec/unit/run_list_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +245 -238
- data/spec/unit/shell/shell_ext_spec.rb +1 -1
- data/spec/unit/user_spec.rb +5 -1
- data/spec/unit/util/dsc/configuration_generator_spec.rb +171 -0
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +169 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +139 -0
- data/spec/unit/util/path_helper_spec.rb +23 -1
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -0
- data/spec/unit/workstation_config_loader_spec.rb +1 -1
- metadata +303 -196
- checksums.yaml +0 -7
- data/distro/README +0 -2
- data/distro/arch/etc/conf.d/chef-client.conf +0 -5
- data/distro/arch/etc/conf.d/chef-expander.conf +0 -8
- data/distro/arch/etc/conf.d/chef-server-webui.conf +0 -10
- data/distro/arch/etc/conf.d/chef-server.conf +0 -10
- data/distro/arch/etc/conf.d/chef-solr.conf +0 -8
- data/distro/arch/etc/rc.d/chef-client +0 -90
- data/distro/arch/etc/rc.d/chef-expander +0 -78
- data/distro/arch/etc/rc.d/chef-server +0 -78
- data/distro/arch/etc/rc.d/chef-server-webui +0 -78
- data/distro/arch/etc/rc.d/chef-solr +0 -78
- data/distro/debian/etc/default/chef-client +0 -4
- data/distro/debian/etc/default/chef-expander +0 -8
- data/distro/debian/etc/default/chef-server +0 -9
- data/distro/debian/etc/default/chef-server-webui +0 -9
- data/distro/debian/etc/default/chef-solr +0 -8
- data/distro/debian/etc/init.d/chef-client +0 -212
- data/distro/debian/etc/init.d/chef-expander +0 -176
- data/distro/debian/etc/init.d/chef-server +0 -122
- data/distro/debian/etc/init.d/chef-server-webui +0 -123
- data/distro/debian/etc/init.d/chef-solr +0 -176
- data/distro/debian/etc/init/chef-client.conf +0 -17
- data/distro/debian/etc/init/chef-expander.conf +0 -17
- data/distro/debian/etc/init/chef-server-webui.conf +0 -17
- data/distro/debian/etc/init/chef-server.conf +0 -17
- data/distro/debian/etc/init/chef-solr.conf +0 -17
- data/distro/redhat/etc/init.d/chef-client +0 -121
- data/distro/redhat/etc/init.d/chef-expander +0 -104
- data/distro/redhat/etc/init.d/chef-server +0 -112
- data/distro/redhat/etc/init.d/chef-server-webui +0 -112
- data/distro/redhat/etc/init.d/chef-solr +0 -104
- data/distro/redhat/etc/logrotate.d/chef-client +0 -8
- data/distro/redhat/etc/logrotate.d/chef-expander +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server +0 -8
- data/distro/redhat/etc/logrotate.d/chef-server-webui +0 -8
- data/distro/redhat/etc/logrotate.d/chef-solr +0 -8
- data/distro/redhat/etc/sysconfig/chef-client +0 -15
- data/distro/redhat/etc/sysconfig/chef-expander +0 -7
- data/distro/redhat/etc/sysconfig/chef-server +0 -14
- data/distro/redhat/etc/sysconfig/chef-server-webui +0 -14
- data/distro/redhat/etc/sysconfig/chef-solr +0 -8
- data/distro/windows/service_manager.rb +0 -20
- data/lib/chef/resource_platform_map.rb +0 -151
- data/spec/support/shared/matchers.rb +0 -17
- data/spec/unit/resource_platform_map_spec.rb +0 -164
@@ -21,6 +21,7 @@ require 'spec_helper'
|
|
21
21
|
describe Chef::Provider::Deploy::Revision do
|
22
22
|
|
23
23
|
before do
|
24
|
+
allow(Chef::Platform).to receive(:windows?) { false }
|
24
25
|
@temp_dir = Dir.mktmpdir
|
25
26
|
Chef::Config[:file_cache_path] = @temp_dir
|
26
27
|
@resource = Chef::Resource::Deploy.new("/my/deploy/dir")
|
@@ -31,7 +32,7 @@ describe Chef::Provider::Deploy::Revision do
|
|
31
32
|
@provider = Chef::Provider::Deploy::Revision.new(@resource, @run_context)
|
32
33
|
@provider.load_current_resource
|
33
34
|
@runner = double("runnah")
|
34
|
-
Chef::Runner.
|
35
|
+
allow(Chef::Runner).to receive(:new).and_return(@runner)
|
35
36
|
@expected_release_dir = "/my/deploy/dir/releases/8a3195bf3efa246f743c5dfa83683201880f935c"
|
36
37
|
end
|
37
38
|
|
@@ -42,41 +43,41 @@ describe Chef::Provider::Deploy::Revision do
|
|
42
43
|
|
43
44
|
|
44
45
|
it "uses the resolved revision from the SCM as the release slug" do
|
45
|
-
@provider.scm_provider.
|
46
|
-
@provider.send(:release_slug).
|
46
|
+
allow(@provider.scm_provider).to receive(:revision_slug).and_return("uglySlugly")
|
47
|
+
expect(@provider.send(:release_slug)).to eq("uglySlugly")
|
47
48
|
end
|
48
49
|
|
49
50
|
it "deploys to a dir named after the revision" do
|
50
|
-
@provider.release_path.
|
51
|
+
expect(@provider.release_path).to eq(@expected_release_dir)
|
51
52
|
end
|
52
53
|
|
53
54
|
it "stores the release dir in the file cache in the cleanup step" do
|
54
|
-
FileUtils.
|
55
|
-
FileUtils.
|
55
|
+
allow(FileUtils).to receive(:mkdir_p)
|
56
|
+
allow(FileUtils).to receive(:cp_r)
|
56
57
|
@provider.cleanup!
|
57
|
-
@provider.
|
58
|
+
allow(@provider).to receive(:release_slug).and_return("73219b87e977d9c7ba1aa57e9ad1d88fa91a0ec2")
|
58
59
|
@provider.load_current_resource
|
59
60
|
@provider.cleanup!
|
60
61
|
second_release = "/my/deploy/dir/releases/73219b87e977d9c7ba1aa57e9ad1d88fa91a0ec2"
|
61
62
|
|
62
|
-
@provider.all_releases.
|
63
|
+
expect(@provider.all_releases).to eq([@expected_release_dir,second_release])
|
63
64
|
end
|
64
65
|
|
65
66
|
it "removes a release from the file cache when it's used again in another release and append it to the end" do
|
66
|
-
FileUtils.
|
67
|
-
FileUtils.
|
67
|
+
allow(FileUtils).to receive(:mkdir_p)
|
68
|
+
allow(FileUtils).to receive(:cp_r)
|
68
69
|
@provider.cleanup!
|
69
|
-
@provider.
|
70
|
+
allow(@provider).to receive(:release_slug).and_return("73219b87e977d9c7ba1aa57e9ad1d88fa91a0ec2")
|
70
71
|
@provider.load_current_resource
|
71
72
|
@provider.cleanup!
|
72
73
|
second_release = "/my/deploy/dir/releases/73219b87e977d9c7ba1aa57e9ad1d88fa91a0ec2"
|
73
|
-
@provider.all_releases.
|
74
|
+
expect(@provider.all_releases).to eq([@expected_release_dir,second_release])
|
74
75
|
@provider.cleanup!
|
75
76
|
|
76
|
-
@provider.
|
77
|
+
allow(@provider).to receive(:release_slug).and_return("8a3195bf3efa246f743c5dfa83683201880f935c")
|
77
78
|
@provider.load_current_resource
|
78
79
|
@provider.cleanup!
|
79
|
-
@provider.all_releases.
|
80
|
+
expect(@provider.all_releases).to eq([second_release, @expected_release_dir])
|
80
81
|
end
|
81
82
|
|
82
83
|
it "removes a release from the file cache when it's deleted by :cleanup!" do
|
@@ -86,25 +87,25 @@ describe Chef::Provider::Deploy::Revision do
|
|
86
87
|
release_paths.each do |release_path|
|
87
88
|
@provider.send(:release_created, release_path)
|
88
89
|
end
|
89
|
-
@provider.all_releases.
|
90
|
+
expect(@provider.all_releases).to eq(release_paths)
|
90
91
|
|
91
|
-
FileUtils.
|
92
|
+
allow(FileUtils).to receive(:rm_rf)
|
92
93
|
@provider.cleanup!
|
93
94
|
|
94
95
|
expected_release_paths = (%w{second third fourth fifth} << @resource.revision).map do |release_name|
|
95
96
|
"/my/deploy/dir/releases/#{release_name}"
|
96
97
|
end
|
97
98
|
|
98
|
-
@provider.all_releases.
|
99
|
+
expect(@provider.all_releases).to eq(expected_release_paths)
|
99
100
|
end
|
100
101
|
|
101
102
|
it "regenerates the file cache if it's not available" do
|
102
103
|
oldest = "/my/deploy/dir/releases/oldest"
|
103
104
|
latest = "/my/deploy/dir/releases/latest"
|
104
|
-
Dir.
|
105
|
-
::File.
|
106
|
-
::File.
|
107
|
-
@provider.all_releases.
|
105
|
+
expect(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return([latest, oldest])
|
106
|
+
expect(::File).to receive(:ctime).with(oldest).and_return(Time.now - 10)
|
107
|
+
expect(::File).to receive(:ctime).with(latest).and_return(Time.now - 1)
|
108
|
+
expect(@provider.all_releases).to eq([oldest, latest])
|
108
109
|
end
|
109
110
|
|
110
111
|
end
|
@@ -22,7 +22,7 @@ describe Chef::Provider::Deploy::Timestamped do
|
|
22
22
|
|
23
23
|
before do
|
24
24
|
@release_time = Time.utc( 2004, 8, 15, 16, 23, 42)
|
25
|
-
Time.
|
25
|
+
allow(Time).to receive(:now).and_return(@release_time)
|
26
26
|
@expected_release_dir = "/my/deploy/dir/releases/20040815162342"
|
27
27
|
@resource = Chef::Resource::Deploy.new("/my/deploy/dir")
|
28
28
|
@node = Chef::Node.new
|
@@ -30,11 +30,11 @@ describe Chef::Provider::Deploy::Timestamped do
|
|
30
30
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
31
31
|
@timestamped_deploy = Chef::Provider::Deploy::Timestamped.new(@resource, @run_context)
|
32
32
|
@runner = double("runnah")
|
33
|
-
Chef::Runner.
|
33
|
+
allow(Chef::Runner).to receive(:new).and_return(@runner)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "gives a timestamp for release_slug" do
|
37
|
-
@timestamped_deploy.send(:release_slug).
|
37
|
+
expect(@timestamped_deploy.send(:release_slug)).to eq("20040815162342")
|
38
38
|
end
|
39
39
|
|
40
40
|
end
|
@@ -21,204 +21,205 @@ require 'spec_helper'
|
|
21
21
|
describe Chef::Provider::Deploy do
|
22
22
|
|
23
23
|
before do
|
24
|
+
allow(Chef::Platform).to receive(:windows?) { false }
|
24
25
|
@release_time = Time.utc( 2004, 8, 15, 16, 23, 42)
|
25
|
-
Time.
|
26
|
+
allow(Time).to receive(:now).and_return(@release_time)
|
26
27
|
@expected_release_dir = "/my/deploy/dir/releases/20040815162342"
|
27
28
|
@resource = Chef::Resource::Deploy.new("/my/deploy/dir")
|
28
29
|
@node = Chef::Node.new
|
29
30
|
@events = Chef::EventDispatch::Dispatcher.new
|
30
31
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
31
32
|
@provider = Chef::Provider::Deploy.new(@resource, @run_context)
|
32
|
-
@provider.
|
33
|
-
@provider.
|
33
|
+
allow(@provider).to receive(:release_slug)
|
34
|
+
allow(@provider).to receive(:release_path).and_return(@expected_release_dir)
|
34
35
|
end
|
35
36
|
|
36
37
|
it "loads scm resource" do
|
37
|
-
@provider.scm_provider.
|
38
|
+
expect(@provider.scm_provider).to receive(:load_current_resource)
|
38
39
|
@provider.load_current_resource
|
39
40
|
end
|
40
41
|
|
41
42
|
it "supports :deploy and :rollback actions" do
|
42
|
-
@provider.
|
43
|
-
@provider.
|
43
|
+
expect(@provider).to respond_to(:action_deploy)
|
44
|
+
expect(@provider).to respond_to(:action_rollback)
|
44
45
|
end
|
45
46
|
|
46
47
|
context "when the deploy resource has a timeout attribute" do
|
47
48
|
let(:ten_seconds) { 10 }
|
48
49
|
before { @resource.timeout(ten_seconds) }
|
49
50
|
it "relays the timeout to the scm resource" do
|
50
|
-
@provider.scm_provider.new_resource.timeout.
|
51
|
+
expect(@provider.scm_provider.new_resource.timeout).to eq(ten_seconds)
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
55
|
context "when the deploy resource has no timeout attribute" do
|
55
56
|
it "should not set a timeout on the scm resource" do
|
56
|
-
@provider.scm_provider.new_resource.timeout.
|
57
|
+
expect(@provider.scm_provider.new_resource.timeout).to be_nil
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
60
61
|
context "when the deploy_to dir does not exist yet" do
|
61
62
|
before do
|
62
|
-
FileUtils.
|
63
|
-
FileUtils.
|
64
|
-
::File.
|
65
|
-
@provider.
|
66
|
-
@provider.
|
67
|
-
@provider.
|
63
|
+
expect(FileUtils).to receive(:mkdir_p).with(@resource.deploy_to).ordered
|
64
|
+
expect(FileUtils).to receive(:mkdir_p).with(@resource.shared_path).ordered
|
65
|
+
allow(::File).to receive(:directory?).and_return(false)
|
66
|
+
allow(@provider).to receive(:symlink)
|
67
|
+
allow(@provider).to receive(:migrate)
|
68
|
+
allow(@provider).to receive(:copy_cached_repo)
|
68
69
|
end
|
69
70
|
|
70
71
|
it "creates deploy_to dir" do
|
71
|
-
::Dir.
|
72
|
-
@provider.
|
73
|
-
@provider.
|
72
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).exactly(4).times
|
73
|
+
expect(@provider).to receive(:enforce_ownership).twice
|
74
|
+
allow(@provider).to receive(:update_cached_repo)
|
74
75
|
@provider.deploy
|
75
76
|
end
|
76
77
|
|
77
78
|
end
|
78
79
|
|
79
80
|
it "does not create deploy_to dir if it exists" do
|
80
|
-
::File.
|
81
|
-
::Dir.
|
82
|
-
FileUtils.
|
83
|
-
FileUtils.
|
84
|
-
@provider.
|
85
|
-
@provider.
|
86
|
-
@provider.
|
87
|
-
@provider.
|
88
|
-
@provider.
|
81
|
+
allow(::File).to receive(:directory?).and_return(true)
|
82
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).exactly(4).times
|
83
|
+
expect(FileUtils).not_to receive(:mkdir_p).with(@resource.deploy_to)
|
84
|
+
expect(FileUtils).not_to receive(:mkdir_p).with(@resource.shared_path)
|
85
|
+
expect(@provider).to receive(:enforce_ownership).twice
|
86
|
+
allow(@provider).to receive(:copy_cached_repo)
|
87
|
+
allow(@provider).to receive(:update_cached_repo)
|
88
|
+
allow(@provider).to receive(:symlink)
|
89
|
+
allow(@provider).to receive(:migrate)
|
89
90
|
@provider.deploy
|
90
91
|
end
|
91
92
|
|
92
93
|
it "ensures the deploy_to dir ownership after the verfication that it exists" do
|
93
|
-
::Dir.
|
94
|
-
@provider.
|
95
|
-
@provider.
|
96
|
-
@provider.
|
97
|
-
@provider.
|
98
|
-
@provider.
|
99
|
-
@provider.
|
100
|
-
@provider.
|
101
|
-
@provider.
|
102
|
-
@provider.
|
94
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).exactly(4).times
|
95
|
+
expect(@provider).to receive(:verify_directories_exist).ordered
|
96
|
+
expect(@provider).to receive(:enforce_ownership).ordered
|
97
|
+
allow(@provider).to receive(:copy_cached_repo)
|
98
|
+
allow(@provider).to receive(:update_cached_repo)
|
99
|
+
allow(@provider).to receive(:install_gems)
|
100
|
+
expect(@provider).to receive(:enforce_ownership).ordered
|
101
|
+
allow(@provider).to receive(:enforce_ownership)
|
102
|
+
allow(@provider).to receive(:symlink)
|
103
|
+
allow(@provider).to receive(:migrate)
|
103
104
|
@provider.deploy
|
104
105
|
end
|
105
106
|
|
106
107
|
it "updates and copies the repo, then does a migrate, symlink, restart, restart, cleanup on deploy" do
|
107
|
-
FileUtils.
|
108
|
-
FileUtils.
|
109
|
-
@provider.
|
110
|
-
@provider.
|
111
|
-
@provider.
|
112
|
-
@provider.
|
113
|
-
@provider.
|
114
|
-
@provider.
|
115
|
-
@provider.
|
116
|
-
@provider.
|
117
|
-
@provider.
|
118
|
-
@provider.
|
119
|
-
@provider.
|
120
|
-
@provider.
|
108
|
+
allow(FileUtils).to receive(:mkdir_p).with("/my/deploy/dir")
|
109
|
+
allow(FileUtils).to receive(:mkdir_p).with("/my/deploy/dir/shared")
|
110
|
+
expect(@provider).to receive(:enforce_ownership).twice
|
111
|
+
expect(@provider).to receive(:update_cached_repo)
|
112
|
+
expect(@provider).to receive(:copy_cached_repo)
|
113
|
+
expect(@provider).to receive(:install_gems)
|
114
|
+
expect(@provider).to receive(:callback).with(:before_migrate, nil)
|
115
|
+
expect(@provider).to receive(:migrate)
|
116
|
+
expect(@provider).to receive(:callback).with(:before_symlink, nil)
|
117
|
+
expect(@provider).to receive(:symlink)
|
118
|
+
expect(@provider).to receive(:callback).with(:before_restart, nil)
|
119
|
+
expect(@provider).to receive(:restart)
|
120
|
+
expect(@provider).to receive(:callback).with(:after_restart, nil)
|
121
|
+
expect(@provider).to receive(:cleanup!)
|
121
122
|
@provider.deploy
|
122
123
|
end
|
123
124
|
|
124
125
|
it "should not deploy if there is already a deploy at release_path, and it is the current release" do
|
125
|
-
@provider.
|
126
|
-
@provider.
|
127
|
-
@provider.
|
126
|
+
allow(@provider).to receive(:all_releases).and_return([@expected_release_dir])
|
127
|
+
allow(@provider).to receive(:current_release?).with(@expected_release_dir).and_return(true)
|
128
|
+
expect(@provider).not_to receive(:deploy)
|
128
129
|
@provider.run_action(:deploy)
|
129
130
|
end
|
130
131
|
|
131
132
|
it "should call action_rollback if there is already a deploy of this revision at release_path, and it is not the current release" do
|
132
|
-
@provider.
|
133
|
-
@provider.
|
134
|
-
@provider.
|
135
|
-
@provider.
|
133
|
+
allow(@provider).to receive(:all_releases).and_return([@expected_release_dir, "102021"])
|
134
|
+
allow(@provider).to receive(:current_release?).with(@expected_release_dir).and_return(false)
|
135
|
+
expect(@provider).to receive(:rollback_to).with(@expected_release_dir)
|
136
|
+
expect(@provider).to receive(:current_release?)
|
136
137
|
@provider.run_action(:deploy)
|
137
138
|
end
|
138
139
|
|
139
140
|
it "calls deploy when deploying a new release" do
|
140
|
-
@provider.
|
141
|
-
@provider.
|
141
|
+
allow(@provider).to receive(:all_releases).and_return([])
|
142
|
+
expect(@provider).to receive(:deploy)
|
142
143
|
@provider.run_action(:deploy)
|
143
144
|
end
|
144
145
|
|
145
146
|
it "runs action svn_force_export when new_resource.svn_force_export is true" do
|
146
147
|
@resource.svn_force_export true
|
147
|
-
@provider.scm_provider.
|
148
|
+
expect(@provider.scm_provider).to receive(:run_action).with(:force_export)
|
148
149
|
@provider.update_cached_repo
|
149
150
|
end
|
150
151
|
|
151
152
|
it "Removes the old release before deploying when force deploying over it" do
|
152
|
-
@provider.
|
153
|
-
FileUtils.
|
154
|
-
@provider.
|
153
|
+
allow(@provider).to receive(:all_releases).and_return([@expected_release_dir])
|
154
|
+
expect(FileUtils).to receive(:rm_rf).with(@expected_release_dir)
|
155
|
+
expect(@provider).to receive(:deploy)
|
155
156
|
@provider.run_action(:force_deploy)
|
156
157
|
end
|
157
158
|
|
158
159
|
it "deploys as normal when force deploying and there's no prior release at the same path" do
|
159
|
-
@provider.
|
160
|
-
@provider.
|
160
|
+
allow(@provider).to receive(:all_releases).and_return([])
|
161
|
+
expect(@provider).to receive(:deploy)
|
161
162
|
@provider.run_action(:force_deploy)
|
162
163
|
end
|
163
164
|
|
164
165
|
it "dont care by default if error happens on deploy" do
|
165
|
-
@provider.
|
166
|
-
@provider.
|
167
|
-
@provider.
|
168
|
-
@provider.
|
169
|
-
|
166
|
+
allow(@provider).to receive(:all_releases).and_return(['previous_release'])
|
167
|
+
allow(@provider).to receive(:deploy){ raise "Unexpected error" }
|
168
|
+
allow(@provider).to receive(:previous_release_path).and_return('previous_release')
|
169
|
+
expect(@provider).not_to receive(:rollback)
|
170
|
+
expect {
|
170
171
|
@provider.run_action(:deploy)
|
171
|
-
}.
|
172
|
+
}.to raise_exception(RuntimeError, "Unexpected error")
|
172
173
|
end
|
173
174
|
|
174
175
|
it "rollbacks to previous release if error happens on deploy" do
|
175
176
|
@resource.rollback_on_error true
|
176
|
-
@provider.
|
177
|
-
@provider.
|
178
|
-
@provider.
|
179
|
-
@provider.
|
180
|
-
|
177
|
+
allow(@provider).to receive(:all_releases).and_return(['previous_release'])
|
178
|
+
allow(@provider).to receive(:deploy){ raise "Unexpected error" }
|
179
|
+
allow(@provider).to receive(:previous_release_path).and_return('previous_release')
|
180
|
+
expect(@provider).to receive(:rollback)
|
181
|
+
expect {
|
181
182
|
@provider.run_action(:deploy)
|
182
|
-
}.
|
183
|
+
}.to raise_exception(RuntimeError, "Unexpected error")
|
183
184
|
end
|
184
185
|
|
185
186
|
describe "on systems without broken Dir.glob results" do
|
186
187
|
it "sets the release path to the penultimate release when one is not specified, symlinks, and rm's the last release on rollback" do
|
187
|
-
@provider.
|
188
|
+
allow(@provider).to receive(:release_path).and_return("/my/deploy/dir/releases/3")
|
188
189
|
all_releases = ["/my/deploy/dir/releases/1", "/my/deploy/dir/releases/2", "/my/deploy/dir/releases/3", "/my/deploy/dir/releases/4", "/my/deploy/dir/releases/5"]
|
189
|
-
Dir.
|
190
|
-
@provider.
|
191
|
-
FileUtils.
|
192
|
-
FileUtils.
|
190
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
191
|
+
expect(@provider).to receive(:symlink)
|
192
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/releases/4")
|
193
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/releases/5")
|
193
194
|
@provider.run_action(:rollback)
|
194
|
-
@provider.release_path.
|
195
|
-
@provider.shared_path.
|
195
|
+
expect(@provider.release_path).to eql("/my/deploy/dir/releases/3")
|
196
|
+
expect(@provider.shared_path).to eql("/my/deploy/dir/shared")
|
196
197
|
end
|
197
198
|
|
198
199
|
it "sets the release path to the specified release, symlinks, and rm's any newer releases on rollback" do
|
199
|
-
@provider.
|
200
|
+
allow(@provider).to receive(:release_path).and_call_original
|
200
201
|
all_releases = ["/my/deploy/dir/releases/20040815162342", "/my/deploy/dir/releases/20040700000000",
|
201
202
|
"/my/deploy/dir/releases/20040600000000", "/my/deploy/dir/releases/20040500000000"].sort!
|
202
|
-
Dir.
|
203
|
-
@provider.
|
204
|
-
FileUtils.
|
203
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
204
|
+
expect(@provider).to receive(:symlink)
|
205
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
|
205
206
|
@provider.run_action(:rollback)
|
206
|
-
@provider.release_path.
|
207
|
-
@provider.shared_path.
|
207
|
+
expect(@provider.release_path).to eql("/my/deploy/dir/releases/20040700000000")
|
208
|
+
expect(@provider.shared_path).to eql("/my/deploy/dir/shared")
|
208
209
|
end
|
209
210
|
|
210
211
|
it "sets the release path to the penultimate release, symlinks, and rm's the last release on rollback" do
|
211
|
-
@provider.
|
212
|
+
allow(@provider).to receive(:release_path).and_call_original
|
212
213
|
all_releases = [ "/my/deploy/dir/releases/20040815162342",
|
213
214
|
"/my/deploy/dir/releases/20040700000000",
|
214
215
|
"/my/deploy/dir/releases/20040600000000",
|
215
216
|
"/my/deploy/dir/releases/20040500000000"]
|
216
|
-
Dir.
|
217
|
-
@provider.
|
218
|
-
FileUtils.
|
217
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
218
|
+
expect(@provider).to receive(:symlink)
|
219
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
|
219
220
|
@provider.run_action(:rollback)
|
220
|
-
@provider.release_path.
|
221
|
-
@provider.shared_path.
|
221
|
+
expect(@provider.release_path).to eql("/my/deploy/dir/releases/20040700000000")
|
222
|
+
expect(@provider.shared_path).to eql("/my/deploy/dir/shared")
|
222
223
|
end
|
223
224
|
|
224
225
|
describe "if there are no releases to fallback to" do
|
@@ -226,143 +227,143 @@ describe Chef::Provider::Deploy do
|
|
226
227
|
it "an exception is raised when there is only 1 release" do
|
227
228
|
#@provider.unstub(:release_path) -- unstub the release path on top to feed our own release path
|
228
229
|
all_releases = [ "/my/deploy/dir/releases/20040815162342"]
|
229
|
-
Dir.
|
230
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
230
231
|
#@provider.should_receive(:symlink)
|
231
232
|
#FileUtils.should_receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
|
232
233
|
#@provider.run_action(:rollback)
|
233
234
|
#@provider.release_path.should eql(NIL) -- no check needed since assertions will fail
|
234
|
-
|
235
|
+
expect {
|
235
236
|
@provider.run_action(:rollback)
|
236
|
-
}.
|
237
|
+
}.to raise_exception(RuntimeError, "There is no release to rollback to!")
|
237
238
|
end
|
238
239
|
|
239
240
|
it "an exception is raised when there are no releases" do
|
240
241
|
all_releases = []
|
241
|
-
Dir.
|
242
|
-
|
242
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
243
|
+
expect {
|
243
244
|
@provider.run_action(:rollback)
|
244
|
-
}.
|
245
|
+
}.to raise_exception(RuntimeError, "There is no release to rollback to!")
|
245
246
|
end
|
246
247
|
end
|
247
248
|
end
|
248
249
|
|
249
250
|
describe "CHEF-628: on systems with broken Dir.glob results" do
|
250
251
|
it "sets the release path to the penultimate release, symlinks, and rm's the last release on rollback" do
|
251
|
-
@provider.
|
252
|
+
allow(@provider).to receive(:release_path).and_call_original
|
252
253
|
all_releases = [ "/my/deploy/dir/releases/20040500000000",
|
253
254
|
"/my/deploy/dir/releases/20040600000000",
|
254
255
|
"/my/deploy/dir/releases/20040700000000",
|
255
256
|
"/my/deploy/dir/releases/20040815162342" ]
|
256
|
-
Dir.
|
257
|
-
@provider.
|
258
|
-
FileUtils.
|
257
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
258
|
+
expect(@provider).to receive(:symlink)
|
259
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/releases/20040815162342")
|
259
260
|
@provider.run_action(:rollback)
|
260
|
-
@provider.release_path.
|
261
|
-
@provider.shared_path.
|
261
|
+
expect(@provider.release_path).to eql("/my/deploy/dir/releases/20040700000000")
|
262
|
+
expect(@provider.shared_path).to eql("/my/deploy/dir/shared")
|
262
263
|
end
|
263
264
|
end
|
264
265
|
|
265
266
|
it "raises a runtime error when there's no release to rollback to" do
|
266
267
|
all_releases = []
|
267
|
-
Dir.
|
268
|
-
|
268
|
+
allow(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
269
|
+
expect {@provider.run_action(:rollback)}.to raise_error(RuntimeError)
|
269
270
|
end
|
270
271
|
|
271
272
|
it "runs the new resource collection in the runner during a callback" do
|
272
273
|
@runner = double("Runner")
|
273
|
-
Chef::Runner.
|
274
|
-
@runner.
|
274
|
+
allow(Chef::Runner).to receive(:new).and_return(@runner)
|
275
|
+
expect(@runner).to receive(:converge)
|
275
276
|
callback_code = Proc.new { :noop }
|
276
277
|
@provider.callback(:whatevs, callback_code)
|
277
278
|
end
|
278
279
|
|
279
280
|
it "loads callback files from the release/ dir if the file exists" do
|
280
281
|
foo_callback = @expected_release_dir + "/deploy/foo.rb"
|
281
|
-
::File.
|
282
|
-
::Dir.
|
283
|
-
@provider.
|
282
|
+
expect(::File).to receive(:exist?).with(foo_callback).once.and_return(true)
|
283
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).and_yield
|
284
|
+
expect(@provider).to receive(:from_file).with(foo_callback)
|
284
285
|
@provider.callback(:foo, "deploy/foo.rb")
|
285
286
|
end
|
286
287
|
|
287
288
|
it "raises a runtime error if a callback file is explicitly specified but does not exist" do
|
288
289
|
baz_callback = "/deploy/baz.rb"
|
289
|
-
::File.
|
290
|
+
expect(::File).to receive(:exist?).with("#{@expected_release_dir}/#{baz_callback}").and_return(false)
|
290
291
|
@resource.before_migrate baz_callback
|
291
292
|
@provider.define_resource_requirements
|
292
293
|
@provider.action = :deploy
|
293
|
-
|
294
|
+
expect {@provider.process_resource_requirements}.to raise_error(RuntimeError)
|
294
295
|
end
|
295
296
|
|
296
297
|
it "runs a default callback if the callback code is nil" do
|
297
298
|
bar_callback = @expected_release_dir + "/deploy/bar.rb"
|
298
|
-
::File.
|
299
|
-
::Dir.
|
300
|
-
@provider.
|
299
|
+
expect(::File).to receive(:exist?).with(bar_callback).and_return(true)
|
300
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).and_yield
|
301
|
+
expect(@provider).to receive(:from_file).with(bar_callback)
|
301
302
|
@provider.callback(:bar, nil)
|
302
303
|
end
|
303
304
|
|
304
305
|
it "skips an eval callback if the file doesn't exist" do
|
305
306
|
barbaz_callback = @expected_release_dir + "/deploy/barbaz.rb"
|
306
|
-
::File.
|
307
|
-
::Dir.
|
308
|
-
@provider.
|
307
|
+
expect(::File).to receive(:exist?).with(barbaz_callback).and_return(false)
|
308
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).and_yield
|
309
|
+
expect(@provider).not_to receive(:from_file)
|
309
310
|
@provider.callback(:barbaz, nil)
|
310
311
|
end
|
311
312
|
|
312
313
|
# CHEF-3449 #converge_by is called in #recipe_eval and must happen in sequence
|
313
314
|
# with the other calls to #converge_by to keep the train on the tracks
|
314
315
|
it "evaluates a callback file before the corresponding step" do
|
315
|
-
@provider.
|
316
|
-
@provider.
|
317
|
-
@provider.
|
318
|
-
@provider.
|
319
|
-
@provider.
|
320
|
-
@provider.
|
321
|
-
@provider.
|
322
|
-
@provider.
|
323
|
-
@provider.
|
324
|
-
@provider.
|
325
|
-
@provider.
|
326
|
-
@provider.
|
327
|
-
@provider.
|
328
|
-
@provider.
|
316
|
+
expect(@provider).to receive(:verify_directories_exist)
|
317
|
+
expect(@provider).to receive(:update_cached_repo)
|
318
|
+
expect(@provider).to receive(:enforce_ownership)
|
319
|
+
expect(@provider).to receive(:copy_cached_repo)
|
320
|
+
expect(@provider).to receive(:install_gems)
|
321
|
+
expect(@provider).to receive(:enforce_ownership)
|
322
|
+
expect(@provider).to receive(:converge_by).ordered # before_migrate
|
323
|
+
expect(@provider).to receive(:migrate).ordered
|
324
|
+
expect(@provider).to receive(:converge_by).ordered # before_symlink
|
325
|
+
expect(@provider).to receive(:symlink).ordered
|
326
|
+
expect(@provider).to receive(:converge_by).ordered # before_restart
|
327
|
+
expect(@provider).to receive(:restart).ordered
|
328
|
+
expect(@provider).to receive(:converge_by).ordered # after_restart
|
329
|
+
expect(@provider).to receive(:cleanup!)
|
329
330
|
@provider.deploy
|
330
331
|
end
|
331
332
|
|
332
333
|
it "gets a SCM provider as specified by its resource" do
|
333
|
-
@provider.scm_provider.
|
334
|
-
@provider.scm_provider.new_resource.destination.
|
334
|
+
expect(@provider.scm_provider).to be_an_instance_of(Chef::Provider::Git)
|
335
|
+
expect(@provider.scm_provider.new_resource.destination).to eql("/my/deploy/dir/shared/cached-copy")
|
335
336
|
end
|
336
337
|
|
337
338
|
it "syncs the cached copy of the repo" do
|
338
|
-
@provider.scm_provider.
|
339
|
+
expect(@provider.scm_provider).to receive(:run_action).with(:sync)
|
339
340
|
@provider.update_cached_repo
|
340
341
|
end
|
341
342
|
|
342
343
|
it "makes a copy of the cached repo in releases dir" do
|
343
|
-
FileUtils.
|
344
|
-
FileUtils.
|
344
|
+
expect(FileUtils).to receive(:mkdir_p).with("/my/deploy/dir/releases")
|
345
|
+
expect(FileUtils).to receive(:cp_r).with("/my/deploy/dir/shared/cached-copy/.", @expected_release_dir, :preserve => true)
|
345
346
|
@provider.copy_cached_repo
|
346
347
|
end
|
347
348
|
|
348
349
|
it "calls the internal callback :release_created when cleaning up the releases" do
|
349
|
-
FileUtils.
|
350
|
-
FileUtils.
|
351
|
-
@provider.
|
350
|
+
allow(FileUtils).to receive(:mkdir_p)
|
351
|
+
allow(FileUtils).to receive(:cp_r)
|
352
|
+
expect(@provider).to receive(:release_created)
|
352
353
|
@provider.cleanup!
|
353
354
|
end
|
354
355
|
|
355
356
|
it "chowns the whole release dir to user and group specified in the resource" do
|
356
357
|
@resource.user "foo"
|
357
358
|
@resource.group "bar"
|
358
|
-
FileUtils.
|
359
|
+
expect(FileUtils).to receive(:chown_R).with("foo", "bar", "/my/deploy/dir")
|
359
360
|
@provider.enforce_ownership
|
360
361
|
end
|
361
362
|
|
362
363
|
it "skips the migration when resource.migrate => false but runs symlinks before migration" do
|
363
364
|
@resource.migrate false
|
364
|
-
@provider.
|
365
|
-
@provider.
|
365
|
+
expect(@provider).not_to receive :run_command
|
366
|
+
expect(@provider).to receive :run_symlinks_before_migrate
|
366
367
|
@provider.migrate
|
367
368
|
end
|
368
369
|
|
@@ -372,12 +373,12 @@ describe Chef::Provider::Deploy do
|
|
372
373
|
@resource.user "deployNinja"
|
373
374
|
@resource.group "deployNinjas"
|
374
375
|
@resource.environment "RAILS_ENV" => "production"
|
375
|
-
FileUtils.
|
376
|
-
@provider.
|
376
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/config/database.yml", @expected_release_dir + "/config/database.yml")
|
377
|
+
expect(@provider).to receive(:enforce_ownership)
|
377
378
|
|
378
|
-
STDOUT.
|
379
|
-
Chef::Log.
|
380
|
-
@provider.
|
379
|
+
allow(STDOUT).to receive(:tty?).and_return(true)
|
380
|
+
allow(Chef::Log).to receive(:info?).and_return(true)
|
381
|
+
expect(@provider).to receive(:run_command).with(:command => "migration_foo", :cwd => @expected_release_dir,
|
381
382
|
:user => "deployNinja", :group => "deployNinjas",
|
382
383
|
:log_level => :info, :live_stream => STDOUT,
|
383
384
|
:log_tag => "deploy[/my/deploy/dir]",
|
@@ -386,31 +387,31 @@ describe Chef::Provider::Deploy do
|
|
386
387
|
end
|
387
388
|
|
388
389
|
it "purges the current release's /log /tmp/pids/ and /public/system directories" do
|
389
|
-
FileUtils.
|
390
|
-
FileUtils.
|
391
|
-
FileUtils.
|
390
|
+
expect(FileUtils).to receive(:rm_rf).with(@expected_release_dir + "/log")
|
391
|
+
expect(FileUtils).to receive(:rm_rf).with(@expected_release_dir + "/tmp/pids")
|
392
|
+
expect(FileUtils).to receive(:rm_rf).with(@expected_release_dir + "/public/system")
|
392
393
|
@provider.purge_tempfiles_from_current_release
|
393
394
|
end
|
394
395
|
|
395
396
|
it "symlinks temporary files and logs from the shared dir into the current release" do
|
396
|
-
FileUtils.
|
397
|
-
FileUtils.
|
398
|
-
FileUtils.
|
399
|
-
FileUtils.
|
400
|
-
FileUtils.
|
401
|
-
FileUtils.
|
402
|
-
FileUtils.
|
403
|
-
FileUtils.
|
404
|
-
FileUtils.
|
405
|
-
FileUtils.
|
406
|
-
@provider.
|
397
|
+
allow(FileUtils).to receive(:mkdir_p).with(@resource.shared_path + "/system")
|
398
|
+
allow(FileUtils).to receive(:mkdir_p).with(@resource.shared_path + "/pids")
|
399
|
+
allow(FileUtils).to receive(:mkdir_p).with(@resource.shared_path + "/log")
|
400
|
+
expect(FileUtils).to receive(:mkdir_p).with(@expected_release_dir + "/tmp")
|
401
|
+
expect(FileUtils).to receive(:mkdir_p).with(@expected_release_dir + "/public")
|
402
|
+
expect(FileUtils).to receive(:mkdir_p).with(@expected_release_dir + "/config")
|
403
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/system", @expected_release_dir + "/public/system")
|
404
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/pids", @expected_release_dir + "/tmp/pids")
|
405
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/log", @expected_release_dir + "/log")
|
406
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/config/database.yml", @expected_release_dir + "/config/database.yml")
|
407
|
+
expect(@provider).to receive(:enforce_ownership)
|
407
408
|
@provider.link_tempfiles_to_current_release
|
408
409
|
end
|
409
410
|
|
410
411
|
it "symlinks the current release dir into production" do
|
411
|
-
FileUtils.
|
412
|
-
FileUtils.
|
413
|
-
@provider.
|
412
|
+
expect(FileUtils).to receive(:rm_f).with("/my/deploy/dir/current")
|
413
|
+
expect(FileUtils).to receive(:ln_sf).with(@expected_release_dir, "/my/deploy/dir/current")
|
414
|
+
expect(@provider).to receive(:enforce_ownership)
|
414
415
|
@provider.link_current_release_to_production
|
415
416
|
end
|
416
417
|
|
@@ -424,41 +425,41 @@ describe Chef::Provider::Deploy do
|
|
424
425
|
end
|
425
426
|
|
426
427
|
it "purges the purge_before_symlink directories" do
|
427
|
-
FileUtils.
|
428
|
-
FileUtils.
|
428
|
+
expect(FileUtils).to receive(:rm_rf).with(@expected_release_dir + "/foo")
|
429
|
+
expect(FileUtils).to receive(:rm_rf).with(@expected_release_dir + "/bar")
|
429
430
|
@provider.purge_tempfiles_from_current_release
|
430
431
|
end
|
431
432
|
|
432
433
|
it "symlinks files from the shared directory to the current release directory" do
|
433
|
-
FileUtils.
|
434
|
-
FileUtils.
|
435
|
-
FileUtils.
|
436
|
-
FileUtils.
|
437
|
-
FileUtils.
|
438
|
-
FileUtils.
|
439
|
-
FileUtils.
|
440
|
-
@provider.
|
434
|
+
expect(FileUtils).to receive(:mkdir_p).with(@expected_release_dir + "/baz")
|
435
|
+
expect(FileUtils).to receive(:mkdir_p).with(@expected_release_dir + "/qux")
|
436
|
+
allow(FileUtils).to receive(:mkdir_p).with(@resource.shared_path + "/foo/bar")
|
437
|
+
allow(FileUtils).to receive(:mkdir_p).with(@resource.shared_path + "/baz")
|
438
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/foo/bar", @expected_release_dir + "/foo/bar")
|
439
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/baz", @expected_release_dir + "/qux/baz")
|
440
|
+
expect(FileUtils).to receive(:ln_sf).with("/my/deploy/dir/shared/radiohead/in_rainbows.yml", @expected_release_dir + "/awesome")
|
441
|
+
expect(@provider).to receive(:enforce_ownership)
|
441
442
|
@provider.link_tempfiles_to_current_release
|
442
443
|
end
|
443
444
|
|
444
445
|
end
|
445
446
|
|
446
447
|
it "does nothing for restart if restart_command is empty" do
|
447
|
-
@provider.
|
448
|
+
expect(@provider).not_to receive(:run_command)
|
448
449
|
@provider.restart
|
449
450
|
end
|
450
451
|
|
451
452
|
it "runs the restart command in the current application dir when the resource has a restart_command" do
|
452
453
|
@resource.restart_command "restartcmd"
|
453
|
-
@provider.
|
454
|
+
expect(@provider).to receive(:run_command).with(:command => "restartcmd", :cwd => "/my/deploy/dir/current", :log_tag => "deploy[/my/deploy/dir]", :log_level => :debug)
|
454
455
|
@provider.restart
|
455
456
|
end
|
456
457
|
|
457
458
|
it "lists all available releases" do
|
458
459
|
all_releases = ["/my/deploy/dir/20040815162342", "/my/deploy/dir/20040700000000",
|
459
460
|
"/my/deploy/dir/20040600000000", "/my/deploy/dir/20040500000000"].sort!
|
460
|
-
Dir.
|
461
|
-
@provider.all_releases.
|
461
|
+
expect(Dir).to receive(:glob).with("/my/deploy/dir/releases/*").and_return(all_releases)
|
462
|
+
expect(@provider.all_releases).to eql(all_releases)
|
462
463
|
end
|
463
464
|
|
464
465
|
it "removes all but the 5 newest releases" do
|
@@ -466,10 +467,10 @@ describe Chef::Provider::Deploy do
|
|
466
467
|
"/my/deploy/dir/20040600000000", "/my/deploy/dir/20040500000000",
|
467
468
|
"/my/deploy/dir/20040400000000", "/my/deploy/dir/20040300000000",
|
468
469
|
"/my/deploy/dir/20040200000000", "/my/deploy/dir/20040100000000"].sort!
|
469
|
-
@provider.
|
470
|
-
FileUtils.
|
471
|
-
FileUtils.
|
472
|
-
FileUtils.
|
470
|
+
allow(@provider).to receive(:all_releases).and_return(all_releases)
|
471
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/20040100000000")
|
472
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/20040200000000")
|
473
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/20040300000000")
|
473
474
|
@provider.cleanup!
|
474
475
|
end
|
475
476
|
|
@@ -479,8 +480,8 @@ describe Chef::Provider::Deploy do
|
|
479
480
|
"/my/deploy/dir/20040600000000", "/my/deploy/dir/20040500000000",
|
480
481
|
"/my/deploy/dir/20040400000000", "/my/deploy/dir/20040300000000",
|
481
482
|
"/my/deploy/dir/20040200000000", "/my/deploy/dir/20040100000000"].sort!
|
482
|
-
@provider.
|
483
|
-
FileUtils.
|
483
|
+
allow(@provider).to receive(:all_releases).and_return(all_releases)
|
484
|
+
expect(FileUtils).to receive(:rm_rf).with("/my/deploy/dir/20040100000000")
|
484
485
|
@provider.cleanup!
|
485
486
|
end
|
486
487
|
|
@@ -488,27 +489,27 @@ describe Chef::Provider::Deploy do
|
|
488
489
|
all_releases = ["/my/deploy/dir/20040815162342", "/my/deploy/dir/20040700000000",
|
489
490
|
"/my/deploy/dir/20040600000000", "/my/deploy/dir/20040500000000",
|
490
491
|
"/my/deploy/dir/20040400000000", "/my/deploy/dir/20040300000000"].sort!
|
491
|
-
@provider.
|
492
|
-
FileUtils.
|
493
|
-
@provider.
|
492
|
+
allow(@provider).to receive(:all_releases).and_return(all_releases)
|
493
|
+
allow(FileUtils).to receive(:rm_rf)
|
494
|
+
expect(@provider).to receive(:release_deleted).with("/my/deploy/dir/20040300000000")
|
494
495
|
@provider.cleanup!
|
495
496
|
end
|
496
497
|
|
497
498
|
it "puts resource.to_hash in @configuration for backwards compat with capistano-esque deploy hooks" do
|
498
|
-
@provider.instance_variable_get(:@configuration).
|
499
|
+
expect(@provider.instance_variable_get(:@configuration)).to eq(@resource.to_hash)
|
499
500
|
end
|
500
501
|
|
501
502
|
it "sets @configuration[:environment] to the value of RAILS_ENV for backwards compat reasons" do
|
502
503
|
resource = Chef::Resource::Deploy.new("/my/deploy/dir")
|
503
504
|
resource.environment "production"
|
504
505
|
provider = Chef::Provider::Deploy.new(resource, @run_context)
|
505
|
-
provider.instance_variable_get(:@configuration)[:environment].
|
506
|
+
expect(provider.instance_variable_get(:@configuration)[:environment]).to eql("production")
|
506
507
|
end
|
507
508
|
|
508
509
|
it "shouldn't give a no method error on migrate if the environment is nil" do
|
509
|
-
@provider.
|
510
|
-
@provider.
|
511
|
-
@provider.
|
510
|
+
allow(@provider).to receive(:enforce_ownership)
|
511
|
+
allow(@provider).to receive(:run_symlinks_before_migrate)
|
512
|
+
allow(@provider).to receive(:run_command)
|
512
513
|
@provider.migrate
|
513
514
|
|
514
515
|
end
|
@@ -520,13 +521,13 @@ describe Chef::Provider::Deploy do
|
|
520
521
|
recipe_code = Proc.new {snitch = 42}
|
521
522
|
#@provider.should_receive(:instance_eval).with(&recipe_code)
|
522
523
|
@provider.callback(:whateverz, recipe_code)
|
523
|
-
snitch.
|
524
|
+
expect(snitch).to eq(42)
|
524
525
|
end
|
525
526
|
|
526
527
|
it "loads a recipe file from the specified path and from_file evals it" do
|
527
|
-
::File.
|
528
|
-
::Dir.
|
529
|
-
@provider.
|
528
|
+
expect(::File).to receive(:exist?).with(@expected_release_dir + "/chefz/foobar_callback.rb").once.and_return(true)
|
529
|
+
expect(::Dir).to receive(:chdir).with(@expected_release_dir).and_yield
|
530
|
+
expect(@provider).to receive(:from_file).with(@expected_release_dir + "/chefz/foobar_callback.rb")
|
530
531
|
@provider.callback(:whateverz, "chefz/foobar_callback.rb")
|
531
532
|
end
|
532
533
|
|
@@ -535,40 +536,40 @@ describe Chef::Provider::Deploy do
|
|
535
536
|
restart_cmd = Proc.new {snitch = 42}
|
536
537
|
@resource.restart(&restart_cmd)
|
537
538
|
@provider.restart
|
538
|
-
snitch.
|
539
|
+
expect(snitch).to eq(42)
|
539
540
|
end
|
540
541
|
|
541
542
|
end
|
542
543
|
|
543
544
|
describe "API bridge to capistrano" do
|
544
545
|
it "defines sudo as a forwarder to execute" do
|
545
|
-
@provider.
|
546
|
+
expect(@provider).to receive(:execute).with("the moon, fool")
|
546
547
|
@provider.sudo("the moon, fool")
|
547
548
|
end
|
548
549
|
|
549
550
|
it "defines run as a forwarder to execute, setting the user, group, cwd and environment to new_resource.user" do
|
550
551
|
mock_execution = double("Resource::Execute")
|
551
|
-
@provider.
|
552
|
+
expect(@provider).to receive(:execute).with("iGoToHell4this").and_return(mock_execution)
|
552
553
|
@resource.user("notCoolMan")
|
553
554
|
@resource.group("Ggroup")
|
554
555
|
@resource.environment("APP_ENV" => 'staging')
|
555
556
|
@resource.deploy_to("/my/app")
|
556
|
-
mock_execution.
|
557
|
-
mock_execution.
|
558
|
-
mock_execution.
|
557
|
+
expect(mock_execution).to receive(:user).with("notCoolMan")
|
558
|
+
expect(mock_execution).to receive(:group).with("Ggroup")
|
559
|
+
expect(mock_execution).to receive(:cwd){|*args|
|
559
560
|
if args.empty?
|
560
561
|
nil
|
561
562
|
else
|
562
|
-
args.size.
|
563
|
-
args.first.
|
563
|
+
expect(args.size).to eq(1)
|
564
|
+
expect(args.first).to eq(@provider.release_path)
|
564
565
|
end
|
565
566
|
}.twice
|
566
|
-
mock_execution.
|
567
|
+
expect(mock_execution).to receive(:environment){ |*args|
|
567
568
|
if args.empty?
|
568
569
|
nil
|
569
570
|
else
|
570
|
-
args.size.
|
571
|
-
args.first.
|
571
|
+
expect(args.size).to eq(1)
|
572
|
+
expect(args.first).to eq({"APP_ENV" => "staging"})
|
572
573
|
end
|
573
574
|
}.twice
|
574
575
|
@provider.run("iGoToHell4this")
|
@@ -577,18 +578,18 @@ describe Chef::Provider::Deploy do
|
|
577
578
|
|
578
579
|
it "defines run as a forwarder to execute, setting cwd and environment but not override" do
|
579
580
|
mock_execution = double("Resource::Execute")
|
580
|
-
@provider.
|
581
|
+
expect(@provider).to receive(:execute).with("iGoToHell4this").and_return(mock_execution)
|
581
582
|
@resource.user("notCoolMan")
|
582
|
-
mock_execution.
|
583
|
-
mock_execution.
|
584
|
-
mock_execution.
|
583
|
+
expect(mock_execution).to receive(:user).with("notCoolMan")
|
584
|
+
expect(mock_execution).to receive(:cwd).with(no_args()).and_return("/some/value")
|
585
|
+
expect(mock_execution).to receive(:environment).with(no_args()).and_return({})
|
585
586
|
@provider.run("iGoToHell4this")
|
586
587
|
end
|
587
588
|
|
588
589
|
|
589
590
|
it "converts sudo and run to exec resources in hooks" do
|
590
591
|
runner = double("tehRunner")
|
591
|
-
Chef::Runner.
|
592
|
+
allow(Chef::Runner).to receive(:new).and_return(runner)
|
592
593
|
|
593
594
|
snitch = nil
|
594
595
|
@resource.user("tehCat")
|
@@ -600,40 +601,40 @@ describe Chef::Provider::Deploy do
|
|
600
601
|
snitch = temp_collection.lookup("execute[tehMice]")
|
601
602
|
end
|
602
603
|
|
603
|
-
runner.
|
604
|
+
expect(runner).to receive(:converge)
|
604
605
|
#
|
605
606
|
@provider.callback(:phony, callback_code)
|
606
|
-
snitch.
|
607
|
-
snitch.user.
|
607
|
+
expect(snitch).to be_an_instance_of(Chef::Resource::Execute)
|
608
|
+
expect(snitch.user).to eq("tehCat")
|
608
609
|
end
|
609
610
|
end
|
610
611
|
|
611
612
|
describe "installing gems from a gems.yml" do
|
612
613
|
|
613
614
|
before do
|
614
|
-
::File.
|
615
|
+
allow(::File).to receive(:exist?).with("#{@expected_release_dir}/gems.yml").and_return(true)
|
615
616
|
@gem_list = [{:name=>"eventmachine", :version=>"0.12.9"}]
|
616
617
|
end
|
617
618
|
|
618
619
|
it "reads a gems.yml file, creating gem providers for each with action :upgrade" do
|
619
|
-
IO.
|
620
|
-
YAML.
|
620
|
+
expect(IO).to receive(:read).with("#{@expected_release_dir}/gems.yml").and_return("cookie")
|
621
|
+
expect(YAML).to receive(:load).with("cookie").and_return(@gem_list)
|
621
622
|
|
622
623
|
gems = @provider.send(:gem_packages)
|
623
624
|
|
624
|
-
gems.map { |g| g.action }.
|
625
|
-
gems.map { |g| g.name }.
|
626
|
-
gems.map { |g| g.version }.
|
625
|
+
expect(gems.map { |g| g.action }).to eq([[:install]])
|
626
|
+
expect(gems.map { |g| g.name }).to eq(%w{eventmachine})
|
627
|
+
expect(gems.map { |g| g.version }).to eq(%w{0.12.9})
|
627
628
|
end
|
628
629
|
|
629
630
|
it "takes a list of gem providers converges them" do
|
630
|
-
IO.
|
631
|
-
YAML.
|
631
|
+
allow(IO).to receive(:read)
|
632
|
+
allow(YAML).to receive(:load).and_return(@gem_list)
|
632
633
|
expected_gem_resources = @provider.send(:gem_packages).map { |r| [r.name, r.version] }
|
633
634
|
gem_runner = @provider.send(:gem_resource_collection_runner)
|
634
635
|
# no one has heard of defining == to be meaningful so I have use this monstrosity
|
635
636
|
actual = gem_runner.run_context.resource_collection.all_resources.map { |r| [r.name, r.version] }
|
636
|
-
actual.
|
637
|
+
expect(actual).to eq(expected_gem_resources)
|
637
638
|
end
|
638
639
|
|
639
640
|
end
|