chef 10.34.6-x86-mingw32 → 11.6.2-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.
- checksums.yaml +5 -13
- data/CONTRIBUTING.md +155 -0
- data/README.md +89 -0
- data/Rakefile +18 -1
- data/bin/chef-apply +25 -0
- data/bin/chef-service-manager +37 -0
- data/bin/chef-shell +34 -0
- data/bin/shef +6 -5
- data/distro/common/html/chef-client.8.html +4 -4
- data/distro/common/html/chef-expander.8.html +4 -4
- data/distro/common/html/chef-expanderctl.8.html +4 -4
- data/distro/common/html/chef-server-webui.8.html +4 -4
- data/distro/common/html/chef-server.8.html +4 -4
- data/distro/common/html/{shef.1.html → chef-shell.1.html} +49 -46
- data/distro/common/html/chef-solo.8.html +4 -4
- data/distro/common/html/chef-solr.8.html +5 -5
- 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 +4 -4
- data/distro/common/html/knife-data-bag.1.html +4 -4
- data/distro/common/html/knife-environment.1.html +4 -4
- data/distro/common/html/knife-exec.1.html +9 -9
- data/distro/common/html/knife-index.1.html +4 -4
- data/distro/common/html/knife-node.1.html +4 -4
- data/distro/common/html/knife-role.1.html +4 -4
- data/distro/common/html/knife-search.1.html +4 -4
- data/distro/common/html/knife-ssh.1.html +4 -4
- data/distro/common/html/knife-status.1.html +4 -4
- data/distro/common/html/knife-tag.1.html +4 -4
- data/distro/common/html/knife.1.html +8 -13
- data/distro/common/man/man1/{shef.1 → chef-shell.1} +21 -57
- data/distro/common/man/man1/knife-bootstrap.1 +1 -1
- data/distro/common/man/man1/knife-client.1 +0 -99
- 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 +1 -1
- data/distro/common/man/man1/knife-data-bag.1 +1 -1
- data/distro/common/man/man1/knife-environment.1 +0 -168
- data/distro/common/man/man1/knife-exec.1 +4 -7
- data/distro/common/man/man1/knife-index.1 +1 -1
- data/distro/common/man/man1/knife-node.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +1 -1
- data/distro/common/man/man1/knife-search.1 +1 -1
- data/distro/common/man/man1/knife-ssh.1 +1 -1
- data/distro/common/man/man1/knife-status.1 +1 -1
- data/distro/common/man/man1/knife-tag.1 +1 -1
- data/distro/common/man/man1/knife.1 +3 -6
- data/distro/common/man/man8/chef-client.8 +1 -1
- data/distro/common/man/man8/chef-expander.8 +1 -1
- data/distro/common/man/man8/chef-expanderctl.8 +1 -1
- data/distro/common/man/man8/chef-server-webui.8 +1 -1
- data/distro/common/man/man8/chef-server.8 +1 -1
- data/distro/common/man/man8/chef-solo.8 +1 -1
- data/distro/common/man/man8/chef-solr.8 +1 -1
- data/distro/common/markdown/man1/{shef.mkd → chef-shell.mkd} +49 -43
- data/distro/common/markdown/man1/knife-exec.mkd +11 -6
- data/distro/common/markdown/man1/knife.mkd +4 -9
- data/distro/debian/etc/default/chef-client +0 -1
- data/distro/debian/etc/init.d/chef-client +6 -4
- data/distro/windows/service_manager.rb +2 -146
- data/lib/chef.rb +3 -6
- data/lib/chef/api_client.rb +20 -130
- data/lib/chef/api_client/registration.rb +126 -0
- data/lib/chef/application.rb +68 -18
- data/lib/chef/application/apply.rb +162 -0
- data/lib/chef/application/client.rb +37 -22
- data/lib/chef/application/knife.rb +2 -4
- data/lib/chef/application/solo.rb +27 -13
- data/lib/chef/application/windows_service.rb +114 -54
- data/lib/chef/application/windows_service_manager.rb +179 -0
- data/lib/chef/applications.rb +1 -0
- data/lib/chef/chef_fs.rb +9 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +371 -0
- data/lib/chef/chef_fs/command_line.rb +284 -0
- 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_pattern.rb +312 -0
- data/lib/chef/chef_fs/file_system.rb +426 -0
- 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_dir.rb +47 -0
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +180 -0
- 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 +60 -0
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +121 -0
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +110 -0
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +223 -0
- data/lib/chef/chef_fs/file_system/cookbook_file.rb +85 -0
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +31 -0
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +54 -0
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +41 -0
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +149 -0
- data/lib/chef/chef_fs/file_system/data_bag_dir.rb +69 -0
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +72 -0
- 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 +90 -0
- data/lib/chef/chef_fs/file_system/file_system_error.rb +33 -0
- data/lib/chef/chef_fs/file_system/file_system_root_dir.rb +31 -0
- 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 +31 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +55 -0
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -0
- data/lib/chef/chef_fs/file_system/not_found_error.rb +31 -0
- 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 +113 -0
- data/lib/chef/chef_fs/file_system/rest_list_entry.rb +177 -0
- data/lib/chef/chef_fs/knife.rb +116 -0
- data/lib/chef/chef_fs/parallelizer.rb +129 -0
- data/lib/chef/chef_fs/path_utils.rb +90 -0
- data/lib/chef/chef_fs/raw_request.rb +79 -0
- data/lib/chef/client.rb +111 -34
- data/lib/chef/config.rb +111 -102
- data/lib/chef/cookbook/chefignore.rb +2 -1
- data/lib/chef/cookbook/metadata.rb +0 -2
- data/lib/chef/cookbook/syntax_check.rb +76 -14
- data/lib/chef/cookbook_loader.rb +39 -26
- data/lib/chef/cookbook_uploader.rb +16 -9
- data/lib/chef/cookbook_version.rb +2 -410
- data/lib/chef/daemon.rb +24 -19
- data/lib/chef/data_bag.rb +20 -104
- data/lib/chef/data_bag_item.rb +2 -65
- 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/digester.rb +73 -0
- data/lib/chef/dsl.rb +6 -0
- data/lib/chef/dsl/data_query.rb +71 -0
- data/lib/chef/dsl/include_attribute.rb +63 -0
- data/lib/chef/dsl/include_recipe.rb +45 -0
- data/lib/chef/dsl/platform_introspection.rb +218 -0
- data/lib/chef/dsl/recipe.rb +87 -0
- data/lib/chef/dsl/registry_helper.rb +59 -0
- data/lib/chef/encrypted_data_bag_item.rb +171 -24
- data/lib/chef/environment.rb +39 -179
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +107 -8
- 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/base.rb +4 -1
- 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/resource_failure_inspector.rb +8 -0
- data/lib/chef/json_compat.rb +15 -14
- data/lib/chef/knife.rb +99 -41
- data/lib/chef/knife/bootstrap.rb +46 -2
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/centos5-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/chef-full.erb +1 -1
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +1 -1
- data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +1 -1
- data/lib/chef/knife/client_show.rb +2 -5
- data/lib/chef/knife/configure.rb +19 -17
- data/lib/chef/knife/cookbook_create.rb +6 -5
- data/lib/chef/knife/cookbook_download.rb +13 -5
- data/lib/chef/knife/cookbook_metadata.rb +1 -0
- data/lib/chef/knife/cookbook_site_share.rb +1 -0
- data/lib/chef/knife/cookbook_test.rb +4 -2
- data/lib/chef/knife/cookbook_upload.rb +4 -4
- data/lib/chef/knife/core/bootstrap_context.rb +11 -5
- data/lib/chef/knife/core/generic_presenter.rb +42 -13
- data/lib/chef/knife/core/node_editor.rb +36 -16
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +43 -12
- data/lib/chef/knife/core/text_formatter.rb +23 -37
- data/lib/chef/knife/core/ui.rb +34 -13
- data/lib/chef/knife/delete.rb +106 -0
- data/lib/chef/knife/deps.rb +139 -0
- data/lib/chef/knife/diff.rb +63 -0
- data/lib/chef/knife/download.rb +63 -0
- data/lib/chef/knife/edit.rb +76 -0
- data/lib/chef/knife/environment_show.rb +2 -0
- data/lib/chef/knife/exec.rb +5 -5
- data/lib/chef/knife/help_topics.rb +1 -1
- data/lib/chef/knife/index_rebuild.rb +91 -7
- data/lib/chef/knife/list.rb +153 -0
- 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 +64 -0
- data/lib/chef/knife/role_show.rb +2 -4
- data/lib/chef/knife/search.rb +45 -28
- data/lib/chef/knife/show.rb +55 -0
- data/lib/chef/knife/ssh.rb +14 -2
- data/lib/chef/knife/upload.rb +69 -0
- data/lib/chef/knife/user_create.rb +93 -0
- data/lib/chef/knife/user_delete.rb +46 -0
- data/lib/chef/knife/user_edit.rb +53 -0
- data/lib/chef/{provider/whyrun_safe_ruby_block.rb → knife/user_list.rb} +21 -9
- data/lib/chef/knife/user_reregister.rb +59 -0
- data/lib/chef/knife/user_show.rb +49 -0
- data/lib/chef/knife/xargs.rb +265 -0
- data/lib/chef/log.rb +2 -2
- data/lib/chef/mixin/checksum.rb +3 -3
- data/lib/chef/mixin/deep_merge.rb +78 -194
- data/lib/chef/mixin/deprecation.rb +35 -0
- data/lib/chef/mixin/file_class.rb +0 -9
- data/lib/chef/mixin/language.rb +22 -223
- data/lib/chef/mixin/language_include_attribute.rb +10 -36
- data/lib/chef/mixin/language_include_recipe.rb +7 -33
- data/lib/chef/mixin/params_validate.rb +0 -3
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +10 -61
- data/lib/chef/mixin/securable.rb +32 -7
- data/lib/chef/mixin/template.rb +156 -26
- data/lib/chef/mixin/windows_architecture_helper.rb +91 -0
- data/lib/chef/mixins.rb +1 -5
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/monkey_patches/file.rb} +6 -14
- data/lib/chef/monkey_patches/net-ssh-multi.rb +140 -0
- data/lib/chef/monkey_patches/net_http.rb +0 -34
- data/lib/chef/monkey_patches/securerandom.rb +44 -0
- data/lib/chef/monologger.rb +93 -0
- data/lib/chef/node.rb +139 -308
- data/lib/chef/node/attribute.rb +367 -473
- data/lib/chef/node/attribute_collections.rb +206 -0
- data/lib/chef/node/immutable_collections.rb +186 -0
- data/lib/chef/platform.rb +4 -496
- data/lib/chef/platform/provider_mapping.rb +529 -0
- data/lib/chef/{mixin/check_helper.rb → platform/query_helpers.rb} +20 -9
- data/lib/chef/provider.rb +14 -58
- data/lib/chef/provider/batch.rb +35 -0
- data/lib/chef/provider/breakpoint.rb +6 -6
- data/lib/chef/provider/cookbook_file.rb +11 -80
- data/lib/chef/provider/cookbook_file/content.rb +49 -0
- data/lib/chef/provider/deploy.rb +26 -21
- data/lib/chef/provider/deploy/revision.rb +27 -0
- data/lib/chef/provider/directory.rb +12 -18
- data/lib/chef/provider/execute.rb +22 -5
- data/lib/chef/provider/file.rb +297 -248
- data/lib/chef/provider/file/content.rb +39 -0
- data/lib/chef/provider/git.rb +76 -43
- data/lib/chef/provider/group.rb +31 -51
- data/lib/chef/provider/group/dscl.rb +13 -53
- data/lib/chef/provider/group/gpasswd.rb +19 -14
- data/lib/chef/provider/group/groupadd.rb +1 -41
- data/lib/chef/provider/group/groupmod.rb +36 -46
- data/lib/chef/provider/group/pw.rb +16 -59
- data/lib/chef/provider/group/suse.rb +13 -16
- data/lib/chef/provider/group/usermod.rb +18 -40
- data/lib/chef/provider/group/windows.rb +6 -13
- data/lib/chef/provider/http_request.rb +25 -42
- data/lib/chef/provider/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 +12 -3
- data/lib/chef/provider/lwrp_base.rb +150 -0
- 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/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +4 -1
- data/lib/chef/provider/package/smartos.rb +47 -36
- data/lib/chef/provider/package/zypper.rb +45 -55
- data/lib/chef/provider/powershell_script.rb +77 -0
- data/lib/chef/provider/registry_key.rb +156 -0
- data/lib/chef/provider/remote_directory.rb +6 -5
- data/lib/chef/provider/remote_file.rb +13 -100
- 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/ruby_block.rb +5 -2
- data/lib/chef/provider/script.rb +14 -2
- data/lib/chef/provider/service.rb +15 -0
- data/lib/chef/provider/service/init.rb +9 -7
- data/lib/chef/provider/service/macosx.rb +29 -81
- data/lib/chef/provider/service/simple.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +6 -5
- data/lib/chef/provider/template.rb +16 -81
- data/lib/chef/provider/template/content.rb +61 -0
- data/lib/chef/provider/template_finder.rb +61 -0
- data/lib/chef/provider/user.rb +0 -1
- data/lib/chef/provider/user/dscl.rb +175 -568
- data/lib/chef/provider/user/useradd.rb +50 -54
- data/lib/chef/provider/windows_script.rb +73 -0
- data/lib/chef/providers.rb +18 -1
- data/lib/chef/recipe.rb +14 -8
- data/lib/chef/resource.rb +52 -146
- data/lib/chef/resource/{whyrun_safe_ruby_block.rb → batch.rb} +10 -10
- 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/group.rb +1 -11
- data/lib/chef/resource/http_request.rb +2 -1
- data/lib/chef/resource/link.rb +17 -0
- data/lib/chef/resource/lwrp_base.rb +132 -0
- data/lib/chef/resource/mount.rb +39 -13
- data/lib/chef/resource/powershell_script.rb +31 -0
- data/lib/chef/resource/registry_key.rb +86 -0
- data/lib/chef/resource/remote_directory.rb +6 -5
- data/lib/chef/resource/remote_file.rb +62 -25
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/service.rb +14 -0
- data/lib/chef/resource/template.rb +145 -0
- data/lib/chef/resource/user.rb +0 -18
- data/lib/chef/resource/windows_script.rb +62 -0
- data/lib/chef/resource_collection.rb +69 -31
- data/lib/chef/resource_reporter.rb +81 -52
- data/lib/chef/resources.rb +4 -1
- data/lib/chef/rest.rb +55 -127
- data/lib/chef/rest/auth_credentials.rb +4 -20
- data/lib/chef/rest/rest_request.rb +7 -8
- data/lib/chef/role.rb +1 -97
- data/lib/chef/run_context.rb +108 -130
- data/lib/chef/run_context/cookbook_compiler.rb +280 -0
- data/lib/chef/run_list.rb +0 -2
- data/lib/chef/run_list/run_list_expansion.rb +1 -16
- data/lib/chef/run_lock.rb +96 -0
- data/lib/chef/runner.rb +28 -6
- data/lib/chef/sandbox.rb +15 -148
- data/lib/chef/scan_access_control.rb +8 -5
- data/lib/chef/search/query.rb +2 -2
- data/lib/chef/shef/ext.rb +3 -575
- data/lib/chef/{shef.rb → shell.rb} +35 -40
- data/lib/chef/shell/ext.rb +593 -0
- data/lib/chef/{shef → shell}/model_wrapper.rb +3 -3
- data/lib/chef/{shef/shef_rest.rb → shell/shell_rest.rb} +4 -4
- data/lib/chef/{shef/shef_session.rb → shell/shell_session.rb} +15 -13
- data/lib/chef/shell_out.rb +7 -0
- data/lib/chef/user.rb +182 -0
- 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_group.rb +1 -5
- 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/{index_queue.rb → version_constraint/platform.rb} +11 -14
- data/lib/chef/win32/api/file.rb +8 -2
- data/lib/chef/win32/api/security.rb +45 -1
- data/lib/chef/win32/registry.rb +382 -0
- data/lib/chef/win32/security.rb +19 -0
- 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/attributes/default.rb +10 -9
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- 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_subcommand/test_yourself.rb +8 -0
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
- data/spec/data/nodes/default.rb +3 -3
- data/spec/data/nodes/test.example.com.rb +3 -3
- data/spec/data/nodes/test.rb +3 -3
- data/spec/data/null_config.rb +1 -0
- data/spec/data/partial_one.erb +1 -0
- data/spec/data/remote_file/nyan_cat.png.gz +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
- data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
- data/spec/data/shef-config.rb +10 -0
- data/spec/functional/dsl/registry_helper_spec.rb +63 -0
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +238 -0
- data/spec/functional/knife/cookbook_delete_spec.rb +1 -1
- data/spec/functional/knife/exec_spec.rb +3 -3
- data/spec/functional/knife/smoke_test.rb +34 -0
- data/spec/functional/knife/ssh_spec.rb +5 -1
- 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 +15 -9
- data/spec/functional/resource/deploy_revision_spec.rb +180 -0
- data/spec/functional/resource/directory_spec.rb +5 -1
- data/spec/functional/resource/file_spec.rb +71 -21
- data/spec/functional/resource/git_spec.rb +259 -0
- data/spec/functional/resource/link_spec.rb +424 -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 +576 -0
- data/spec/functional/resource/remote_directory_spec.rb +143 -37
- data/spec/functional/resource/remote_file_spec.rb +99 -13
- data/spec/functional/resource/template_spec.rb +180 -3
- data/spec/functional/resource/user_spec.rb +547 -0
- data/spec/functional/run_lock_spec.rb +243 -0
- data/spec/functional/shell_spec.rb +102 -0
- data/spec/functional/win32/registry_helper_spec.rb +632 -0
- data/spec/functional/win32/security_spec.rb +37 -0
- 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 +49 -13
- data/spec/stress/win32/security_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +33 -3
- data/spec/support/lib/chef/resource/cat.rb +3 -5
- data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
- data/spec/support/lib/chef/resource/zen_master.rb +8 -10
- data/spec/support/platform_helpers.rb +46 -13
- data/spec/support/platforms/win32/spec_service.rb +59 -0
- data/spec/support/shared/functional/diff_disabled.rb +10 -0
- data/spec/support/shared/functional/directory_resource.rb +129 -38
- data/spec/support/shared/functional/file_resource.rb +837 -71
- data/spec/support/shared/functional/securable_resource.rb +189 -58
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +385 -0
- 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 +70 -0
- data/spec/support/shared/unit/platform_introspector.rb +162 -0
- 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/api_client/registration_spec.rb +172 -0
- data/spec/unit/api_client_spec.rb +78 -156
- data/spec/unit/application/apply.rb +84 -0
- data/spec/unit/application/client_spec.rb +16 -14
- data/spec/unit/application/knife_spec.rb +17 -0
- data/spec/unit/application/solo_spec.rb +1 -1
- data/spec/unit/application_spec.rb +113 -3
- data/spec/unit/checksum/storage/filesystem_spec.rb +1 -1
- data/spec/unit/chef_fs/diff_spec.rb +328 -0
- data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
- data/spec/unit/chef_fs/file_system_spec.rb +135 -0
- data/spec/unit/client_spec.rb +195 -23
- data/spec/unit/config_spec.rb +102 -51
- data/spec/unit/cookbook/syntax_check_spec.rb +75 -111
- data/spec/unit/cookbook_loader_spec.rb +154 -91
- data/spec/unit/cookbook_manifest_spec.rb +81 -81
- data/spec/unit/cookbook_spec.rb +3 -20
- data/spec/unit/cookbook_version_spec.rb +23 -122
- data/spec/unit/daemon_spec.rb +24 -19
- data/spec/unit/data_bag_spec.rb +13 -4
- data/spec/unit/deprecation_spec.rb +86 -0
- data/spec/unit/digester_spec.rb +50 -0
- data/spec/unit/dsl/data_query_spec.rb +66 -0
- data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
- data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
- data/spec/unit/encrypted_data_bag_item_spec.rb +197 -157
- data/spec/unit/environment_spec.rb +94 -126
- data/spec/unit/exceptions_spec.rb +8 -4
- 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 +6 -5
- data/spec/unit/json_compat_spec.rb +8 -0
- data/spec/unit/knife/bootstrap_spec.rb +130 -29
- data/spec/unit/knife/configure_spec.rb +64 -45
- data/spec/unit/knife/cookbook_download_spec.rb +24 -3
- data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
- data/spec/unit/knife/cookbook_test_spec.rb +1 -0
- data/spec/unit/knife/cookbook_upload_spec.rb +39 -0
- data/spec/unit/knife/core/bootstrap_context_spec.rb +79 -62
- data/spec/unit/knife/core/subcommand_loader_spec.rb +20 -0
- data/spec/unit/knife/core/ui_spec.rb +196 -124
- data/spec/unit/knife/data_bag_create_spec.rb +9 -0
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -4
- data/spec/unit/knife/data_bag_from_file_spec.rb +4 -6
- data/spec/unit/knife/data_bag_show_spec.rb +11 -4
- data/spec/unit/knife/index_rebuild_spec.rb +96 -33
- data/spec/unit/knife/knife_help.rb +7 -7
- data/spec/unit/knife/node_edit_spec.rb +6 -33
- data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -0
- data/spec/unit/knife/ssh_spec.rb +12 -15
- data/spec/unit/knife/status_spec.rb +2 -2
- data/spec/unit/knife/user_create_spec.rb +86 -0
- data/spec/unit/knife/user_delete_spec.rb +39 -0
- data/spec/unit/knife/user_edit_spec.rb +42 -0
- data/spec/unit/knife/user_list_spec.rb +32 -0
- data/spec/unit/knife/user_reregister_spec.rb +53 -0
- data/spec/unit/knife/user_show_spec.rb +41 -0
- data/spec/unit/knife_spec.rb +74 -0
- data/spec/unit/lwrp_spec.rb +102 -60
- data/spec/unit/mixin/checksum_spec.rb +2 -2
- data/spec/unit/mixin/deep_merge_spec.rb +130 -791
- data/spec/unit/mixin/deprecation_spec.rb +23 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +7 -1
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/securable_spec.rb +5 -3
- data/spec/unit/mixin/template_spec.rb +145 -14
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +83 -0
- data/spec/unit/node/attribute_spec.rb +273 -173
- data/spec/unit/node/immutable_collections_spec.rb +139 -0
- data/spec/unit/node_spec.rb +418 -370
- data/spec/unit/platform_spec.rb +21 -8
- data/spec/unit/provider/breakpoint_spec.rb +8 -8
- data/spec/unit/provider/cookbook_file/content_spec.rb +40 -0
- data/spec/unit/provider/cookbook_file_spec.rb +26 -187
- 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 +99 -67
- data/spec/unit/provider/env_spec.rb +2 -2
- 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 -475
- data/spec/unit/provider/git_spec.rb +224 -28
- data/spec/unit/provider/group/dscl_spec.rb +0 -36
- data/spec/unit/provider/group/gpasswd_spec.rb +9 -16
- data/spec/unit/provider/group/groupadd_spec.rb +4 -3
- data/spec/unit/provider/group/groupmod_spec.rb +1 -0
- data/spec/unit/provider/group/pw_spec.rb +15 -12
- data/spec/unit/provider/group/usermod_spec.rb +9 -22
- data/spec/unit/provider/group/windows_spec.rb +8 -0
- data/spec/unit/provider/group_spec.rb +6 -28
- data/spec/unit/provider/http_request_spec.rb +28 -69
- data/spec/unit/provider/ifconfig/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/ohai_spec.rb +4 -4
- data/spec/unit/provider/package/apt_spec.rb +0 -1
- data/spec/unit/provider/package/ips_spec.rb +0 -1
- data/spec/unit/provider/package/rpm_spec.rb +0 -12
- data/spec/unit/provider/package/rubygems_spec.rb +1 -1
- data/spec/unit/provider/package/smartos_spec.rb +3 -2
- data/spec/unit/provider/package/zypper_spec.rb +84 -22
- data/spec/unit/provider/package_spec.rb +7 -9
- data/spec/unit/provider/powershell_spec.rb +38 -0
- data/spec/unit/provider/registry_key_spec.rb +269 -0
- data/spec/unit/provider/remote_directory_spec.rb +7 -7
- 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 -259
- data/spec/unit/provider/route_spec.rb +29 -12
- data/spec/unit/provider/ruby_block_spec.rb +8 -0
- data/spec/unit/provider/service/arch_service_spec.rb +5 -5
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/freebsd_service_spec.rb +5 -5
- data/spec/unit/provider/service/init_service_spec.rb +27 -4
- data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
- data/spec/unit/provider/service/invokercd_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +176 -207
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/simple_service_spec.rb +3 -3
- data/spec/unit/provider/service/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 +11 -11
- data/spec/unit/provider/service_spec.rb +3 -3
- data/spec/unit/provider/subversion_spec.rb +1 -1
- data/spec/unit/provider/template/content_spec.rb +78 -0
- data/spec/unit/provider/template_spec.rb +52 -160
- data/spec/unit/provider/user/dscl_spec.rb +285 -681
- data/spec/unit/provider/user/solaris_spec.rb +39 -373
- data/spec/unit/provider/user/useradd_spec.rb +12 -379
- data/spec/unit/provider/user_spec.rb +1 -1
- data/spec/unit/recipe_spec.rb +10 -8
- data/spec/unit/registry_helper_spec.rb +376 -0
- 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 -11
- data/spec/unit/resource/powershell_spec.rb +48 -0
- data/spec/unit/resource/registry_key_spec.rb +171 -0
- data/spec/unit/resource/remote_file_spec.rb +63 -25
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +7 -3
- data/spec/unit/resource/script_spec.rb +13 -36
- data/spec/unit/resource/service_spec.rb +11 -0
- 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 +197 -5
- data/spec/unit/rest/auth_credentials_spec.rb +4 -21
- data/spec/unit/rest_spec.rb +134 -284
- data/spec/unit/run_context/cookbook_compiler_spec.rb +190 -0
- data/spec/unit/run_context_spec.rb +18 -4
- data/spec/unit/run_list_spec.rb +0 -209
- data/spec/unit/run_lock_spec.rb +37 -0
- data/spec/unit/runner_spec.rb +102 -3
- data/spec/unit/scan_access_control_spec.rb +8 -6
- data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
- data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
- data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +16 -58
- data/spec/unit/shell_out_spec.rb +18 -0
- data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
- data/spec/unit/user_spec.rb +255 -0
- 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 +493 -264
- data/README.rdoc +0 -177
- data/distro/common/html/knife-recipe.1.html +0 -92
- data/lib/chef/certificate.rb +0 -161
- data/lib/chef/checksum.rb +0 -167
- data/lib/chef/checksum_cache.rb +0 -190
- data/lib/chef/cookbook_version_selector.rb +0 -168
- data/lib/chef/couchdb.rb +0 -246
- data/lib/chef/index_queue/amqp_client.rb +0 -116
- data/lib/chef/index_queue/consumer.rb +0 -76
- data/lib/chef/index_queue/indexable.rb +0 -109
- data/lib/chef/knife/bootstrap/ubuntu12.10-gems.erb +0 -60
- data/lib/chef/monkey_patches/dir.rb +0 -36
- data/lib/chef/monkey_patches/moneta.rb +0 -50
- data/lib/chef/monkey_patches/uri.rb +0 -70
- data/lib/chef/openid_registration.rb +0 -187
- data/lib/chef/solr_query.rb +0 -187
- data/lib/chef/solr_query/lucene.treetop +0 -150
- data/lib/chef/solr_query/lucene_nodes.rb +0 -285
- data/lib/chef/solr_query/query_transform.rb +0 -65
- data/lib/chef/solr_query/solr_http_request.rb +0 -132
- data/lib/chef/webui_user.rb +0 -231
- data/spec/data/mac_users/10.7-8.plist.xml +0 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +0 -11
- data/spec/data/mac_users/10.7.plist.xml +0 -559
- data/spec/data/mac_users/10.7.shadow.xml +0 -11
- data/spec/data/mac_users/10.8.plist.xml +0 -559
- data/spec/data/mac_users/10.8.shadow.xml +0 -21
- data/spec/data/mac_users/10.9.plist.xml +0 -560
- data/spec/data/mac_users/10.9.shadow.xml +0 -21
- data/spec/functional/resource/base.rb +0 -40
- data/spec/functional/resource/group_spec.rb +0 -343
- data/spec/functional/resource/user/dscl_spec.rb +0 -199
- data/spec/unit/certificate_spec.rb +0 -76
- data/spec/unit/checksum_cache_spec.rb +0 -209
- data/spec/unit/checksum_spec.rb +0 -94
- data/spec/unit/couchdb_spec.rb +0 -274
- data/spec/unit/index_queue_spec.rb +0 -391
- data/spec/unit/mixin/language_spec.rb +0 -305
- data/spec/unit/openid_registration_spec.rb +0 -153
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +0 -47
- data/spec/unit/solr_query/query_transform_spec.rb +0 -454
- data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
- data/spec/unit/solr_query_spec.rb +0 -203
- data/spec/unit/webui_user_spec.rb +0 -238
@@ -0,0 +1,59 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Lamont Granquist (<lamont@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2012 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
#
|
20
|
+
# Helper functions to access the windows registry from within recipes and
|
21
|
+
# the not_if/only_if blocks in resources. This only exposes the methods
|
22
|
+
# in the chef/win32/registry class which are reasonably side-effect-free.
|
23
|
+
# The actual modification of the registry should be done via the registry_key
|
24
|
+
# resource in a more idempotent way.
|
25
|
+
#
|
26
|
+
#
|
27
|
+
class Chef
|
28
|
+
module DSL
|
29
|
+
module RegistryHelper
|
30
|
+
# the registry instance is cheap to build and throwing it away ensures we
|
31
|
+
# don't carry any state (e.g. magic 32-bit/64-bit settings) between calls
|
32
|
+
def registry_key_exists?(key_path, architecture = :machine)
|
33
|
+
registry = Chef::Win32::Registry.new(run_context, architecture)
|
34
|
+
registry.key_exists?(key_path)
|
35
|
+
end
|
36
|
+
def registry_get_values(key_path, architecture = :machine)
|
37
|
+
registry = Chef::Win32::Registry.new(run_context, architecture)
|
38
|
+
registry.get_values(key_path)
|
39
|
+
end
|
40
|
+
def registry_has_subkeys?(key_path, architecture = :machine)
|
41
|
+
registry = Chef::Win32::Registry.new(run_context, architecture)
|
42
|
+
registry.has_subkeys?(key_path)
|
43
|
+
end
|
44
|
+
def registry_get_subkeys(key_path, architecture = :machine)
|
45
|
+
registry = Chef::Win32::Registry.new(run_context, architecture)
|
46
|
+
registry.get_subkeys(key_path)
|
47
|
+
end
|
48
|
+
def registry_value_exists?(key_path, value, architecture = :machine)
|
49
|
+
registry = Chef::Win32::Registry.new(run_context, architecture)
|
50
|
+
registry.value_exists?(key_path, value)
|
51
|
+
end
|
52
|
+
def registry_data_exists?(key_path, value, architecture = :machine)
|
53
|
+
registry = Chef::Win32::Registry.new(run_context, architecture)
|
54
|
+
registry.data_exists?(key_path, value)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
@@ -20,6 +20,7 @@ require 'base64'
|
|
20
20
|
require 'openssl'
|
21
21
|
require 'chef/data_bag_item'
|
22
22
|
require 'yaml'
|
23
|
+
require 'yajl'
|
23
24
|
require 'open-uri'
|
24
25
|
|
25
26
|
# An EncryptedDataBagItem represents a read-only data bag item where
|
@@ -47,9 +48,11 @@ require 'open-uri'
|
|
47
48
|
# such nodes in the infrastructure.
|
48
49
|
#
|
49
50
|
class Chef::EncryptedDataBagItem
|
50
|
-
DEFAULT_SECRET_FILE = "/etc/chef/encrypted_data_bag_secret"
|
51
51
|
ALGORITHM = 'aes-256-cbc'
|
52
52
|
|
53
|
+
class UnacceptableEncryptedDataBagItemFormat < StandardError
|
54
|
+
end
|
55
|
+
|
53
56
|
class UnsupportedEncryptedDataBagItemFormat < StandardError
|
54
57
|
end
|
55
58
|
|
@@ -59,6 +62,122 @@ class Chef::EncryptedDataBagItem
|
|
59
62
|
class UnsupportedCipher < StandardError
|
60
63
|
end
|
61
64
|
|
65
|
+
# Implementation class for converting plaintext data bag item values to an
|
66
|
+
# encrypted value, including any necessary wrappers and metadata.
|
67
|
+
module Encryptor
|
68
|
+
|
69
|
+
# "factory" method that creates an encryptor object with the proper class
|
70
|
+
# for the desired encrypted data bag format version.
|
71
|
+
#
|
72
|
+
# +Chef::Config[:data_bag_encrypt_version]+ determines which version is used.
|
73
|
+
def self.new(value, secret, iv=nil)
|
74
|
+
format_version = Chef::Config[:data_bag_encrypt_version]
|
75
|
+
case format_version
|
76
|
+
when 1
|
77
|
+
Version1Encryptor.new(value, secret, iv)
|
78
|
+
when 2
|
79
|
+
Version2Encryptor.new(value, secret, iv)
|
80
|
+
else
|
81
|
+
raise UnsupportedEncryptedDataBagItemFormat,
|
82
|
+
"Invalid encrypted data bag format version `#{format_version}'. Supported versions are '1', '2'"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class Version1Encryptor
|
87
|
+
attr_reader :key
|
88
|
+
attr_reader :plaintext_data
|
89
|
+
|
90
|
+
# Create a new Encryptor for +data+, which will be encrypted with the given
|
91
|
+
# +key+.
|
92
|
+
#
|
93
|
+
# === Arguments:
|
94
|
+
# * data: An object of any type that can be serialized to json
|
95
|
+
# * key: A String representing the desired passphrase
|
96
|
+
# * iv: The optional +iv+ parameter is intended for testing use only. When
|
97
|
+
# *not* supplied, Encryptor will use OpenSSL to generate a secure random
|
98
|
+
# IV, which is what you want.
|
99
|
+
def initialize(plaintext_data, key, iv=nil)
|
100
|
+
@plaintext_data = plaintext_data
|
101
|
+
@key = key
|
102
|
+
@iv = iv && Base64.decode64(iv)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Returns a wrapped and encrypted version of +plaintext_data+ suitable for
|
106
|
+
# using as the value in an encrypted data bag item.
|
107
|
+
def for_encrypted_item
|
108
|
+
{
|
109
|
+
"encrypted_data" => encrypted_data,
|
110
|
+
"iv" => Base64.encode64(iv),
|
111
|
+
"version" => 1,
|
112
|
+
"cipher" => ALGORITHM
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
# Generates or returns the IV.
|
117
|
+
def iv
|
118
|
+
# Generated IV comes from OpenSSL::Cipher::Cipher#random_iv
|
119
|
+
# This gets generated when +openssl_encryptor+ gets created.
|
120
|
+
openssl_encryptor if @iv.nil?
|
121
|
+
@iv
|
122
|
+
end
|
123
|
+
|
124
|
+
# Generates (and memoizes) an OpenSSL::Cipher::Cipher object and configures
|
125
|
+
# it for the specified iv and encryption key.
|
126
|
+
def openssl_encryptor
|
127
|
+
@openssl_encryptor ||= begin
|
128
|
+
encryptor = OpenSSL::Cipher::Cipher.new(ALGORITHM)
|
129
|
+
encryptor.encrypt
|
130
|
+
@iv ||= encryptor.random_iv
|
131
|
+
encryptor.iv = @iv
|
132
|
+
encryptor.key = Digest::SHA256.digest(key)
|
133
|
+
encryptor
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
# Encrypts and Base64 encodes +serialized_data+
|
138
|
+
def encrypted_data
|
139
|
+
@encrypted_data ||= begin
|
140
|
+
enc_data = openssl_encryptor.update(serialized_data)
|
141
|
+
enc_data << openssl_encryptor.final
|
142
|
+
Base64.encode64(enc_data)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Wraps the data in a single key Hash (JSON Object) and converts to JSON.
|
147
|
+
# The wrapper is required because we accept values (such as Integers or
|
148
|
+
# Strings) that do not produce valid JSON when serialized without the
|
149
|
+
# wrapper.
|
150
|
+
def serialized_data
|
151
|
+
Yajl::Encoder.encode(:json_wrapper => plaintext_data)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
class Version2Encryptor < Version1Encryptor
|
156
|
+
|
157
|
+
# Returns a wrapped and encrypted version of +plaintext_data+ suitable for
|
158
|
+
# using as the value in an encrypted data bag item.
|
159
|
+
def for_encrypted_item
|
160
|
+
{
|
161
|
+
"encrypted_data" => encrypted_data,
|
162
|
+
"hmac" => hmac,
|
163
|
+
"iv" => Base64.encode64(iv),
|
164
|
+
"version" => 2,
|
165
|
+
"cipher" => ALGORITHM
|
166
|
+
}
|
167
|
+
end
|
168
|
+
|
169
|
+
# Generates an HMAC-SHA2-256 of the encrypted data (encrypt-then-mac)
|
170
|
+
def hmac
|
171
|
+
@hmac ||= begin
|
172
|
+
digest = OpenSSL::Digest::Digest.new("sha256")
|
173
|
+
raw_hmac = OpenSSL::HMAC.digest(digest, key, encrypted_data)
|
174
|
+
Base64.encode64(raw_hmac)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
62
181
|
#=== Decryptor
|
63
182
|
# For backwards compatibility, Chef implements decryption/deserialization for
|
64
183
|
# older encrypted data bag item formats in addition to the current version.
|
@@ -72,7 +191,11 @@ class Chef::EncryptedDataBagItem
|
|
72
191
|
# decryptor object for that version. Call #for_decrypted_item on the
|
73
192
|
# resulting object to decrypt and deserialize it.
|
74
193
|
def self.for(encrypted_value, key)
|
75
|
-
|
194
|
+
format_version = format_version_of(encrypted_value)
|
195
|
+
assert_format_version_acceptable!(format_version)
|
196
|
+
case format_version
|
197
|
+
when 2
|
198
|
+
Version2Decryptor.new(encrypted_value, key)
|
76
199
|
when 1
|
77
200
|
Version1Decryptor.new(encrypted_value, key)
|
78
201
|
when 0
|
@@ -91,6 +214,14 @@ class Chef::EncryptedDataBagItem
|
|
91
214
|
end
|
92
215
|
end
|
93
216
|
|
217
|
+
def self.assert_format_version_acceptable!(format_version)
|
218
|
+
unless format_version.kind_of?(Integer) and format_version >= Chef::Config[:data_bag_decrypt_minimum_version]
|
219
|
+
raise UnacceptableEncryptedDataBagItemFormat,
|
220
|
+
"The encrypted data bag item has format version `#{format_version}', " +
|
221
|
+
"but the config setting 'data_bag_decrypt_minimum_version' requires version `#{Chef::Config[:data_bag_decrypt_minimum_version]}'"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
94
225
|
class Version1Decryptor
|
95
226
|
|
96
227
|
attr_reader :encrypted_data
|
@@ -103,9 +234,13 @@ class Chef::EncryptedDataBagItem
|
|
103
234
|
|
104
235
|
def for_decrypted_item
|
105
236
|
Yajl::Parser.parse(decrypted_data)["json_wrapper"]
|
237
|
+
rescue Yajl::ParseError
|
238
|
+
# convert to a DecryptionFailure error because the most likely scenario
|
239
|
+
# here is that the decryption step was unsuccessful but returned bad
|
240
|
+
# data rather than raising an error.
|
241
|
+
raise DecryptionFailure, "Error decrypting data bag value. Most likely the provided key is incorrect"
|
106
242
|
end
|
107
243
|
|
108
|
-
|
109
244
|
def encrypted_bytes
|
110
245
|
Base64.decode64(@encrypted_data["encrypted_data"])
|
111
246
|
end
|
@@ -146,6 +281,36 @@ class Chef::EncryptedDataBagItem
|
|
146
281
|
|
147
282
|
end
|
148
283
|
|
284
|
+
class Version2Decryptor < Version1Decryptor
|
285
|
+
|
286
|
+
def decrypted_data
|
287
|
+
validate_hmac! unless @decrypted_data
|
288
|
+
super
|
289
|
+
end
|
290
|
+
|
291
|
+
def validate_hmac!
|
292
|
+
digest = OpenSSL::Digest::Digest.new("sha256")
|
293
|
+
raw_hmac = OpenSSL::HMAC.digest(digest, key, @encrypted_data["encrypted_data"])
|
294
|
+
|
295
|
+
if candidate_hmac_matches?(raw_hmac)
|
296
|
+
true
|
297
|
+
else
|
298
|
+
raise DecryptionFailure, "Error decrypting data bag value: invalid hmac. Most likely the provided key is incorrect"
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
private
|
303
|
+
|
304
|
+
def candidate_hmac_matches?(expected_hmac)
|
305
|
+
return false unless @encrypted_data["hmac"]
|
306
|
+
expected_bytes = expected_hmac.bytes.to_a
|
307
|
+
candidate_hmac_bytes = Base64.decode64(@encrypted_data["hmac"]).bytes.to_a
|
308
|
+
valid = expected_bytes.size ^ candidate_hmac_bytes.size
|
309
|
+
expected_bytes.zip(candidate_hmac_bytes) { |x, y| valid |= x ^ y.to_i }
|
310
|
+
valid == 0
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
149
314
|
class Version0Decryptor
|
150
315
|
|
151
316
|
attr_reader :encrypted_data
|
@@ -206,14 +371,10 @@ class Chef::EncryptedDataBagItem
|
|
206
371
|
@enc_hash.keys.inject({}) { |hash, key| hash[key] = self[key]; hash }
|
207
372
|
end
|
208
373
|
|
209
|
-
def self.from_plain_hash(plain_hash, secret)
|
210
|
-
self.new(self.encrypt_data_bag_item(plain_hash, secret), secret)
|
211
|
-
end
|
212
|
-
|
213
374
|
def self.encrypt_data_bag_item(plain_hash, secret)
|
214
375
|
plain_hash.inject({}) do |h, (key, val)|
|
215
376
|
h[key] = if key != "id"
|
216
|
-
|
377
|
+
Encryptor.new(val, secret).for_encrypted_item
|
217
378
|
else
|
218
379
|
val
|
219
380
|
end
|
@@ -227,12 +388,8 @@ class Chef::EncryptedDataBagItem
|
|
227
388
|
self.new(raw_hash, secret)
|
228
389
|
end
|
229
390
|
|
230
|
-
def self.encrypt_value(value, key)
|
231
|
-
Base64.encode64(self.cipher(:encrypt, value.to_yaml, key))
|
232
|
-
end
|
233
|
-
|
234
391
|
def self.load_secret(path=nil)
|
235
|
-
path
|
392
|
+
path ||= Chef::Config[:encrypted_data_bag_secret]
|
236
393
|
secret = case path
|
237
394
|
when /^\w+:\/\//
|
238
395
|
# We have a remote key
|
@@ -244,7 +401,7 @@ class Chef::EncryptedDataBagItem
|
|
244
401
|
raise ArgumentError, "Remote key not found at '#{path}'"
|
245
402
|
end
|
246
403
|
else
|
247
|
-
if !File.
|
404
|
+
if !File.exist?(path)
|
248
405
|
raise Errno::ENOENT, "file not found '#{path}'"
|
249
406
|
end
|
250
407
|
IO.read(path).strip
|
@@ -255,14 +412,4 @@ class Chef::EncryptedDataBagItem
|
|
255
412
|
secret
|
256
413
|
end
|
257
414
|
|
258
|
-
protected
|
259
|
-
|
260
|
-
def self.cipher(direction, data, key)
|
261
|
-
cipher = OpenSSL::Cipher::Cipher.new(ALGORITHM)
|
262
|
-
cipher.send(direction)
|
263
|
-
cipher.pkcs5_keyivgen(key)
|
264
|
-
ans = cipher.update(data)
|
265
|
-
ans << cipher.final
|
266
|
-
ans
|
267
|
-
end
|
268
415
|
end
|
data/lib/chef/environment.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# Author:: Stephen Delano (<stephen@opscode.com>)
|
3
3
|
# Author:: Seth Falcon (<seth@opscode.com>)
|
4
4
|
# Author:: John Keiser (<jkeiser@ospcode.com>)
|
5
|
+
# Author:: Kyle Goodwin (<kgoodwin@primerevenue.com>)
|
5
6
|
# Copyright:: Copyright 2010-2011 Opscode, Inc.
|
6
7
|
# License:: Apache License, Version 2.0
|
7
8
|
#
|
@@ -22,8 +23,6 @@ require 'chef/config'
|
|
22
23
|
require 'chef/mash'
|
23
24
|
require 'chef/mixin/params_validate'
|
24
25
|
require 'chef/mixin/from_file'
|
25
|
-
require 'chef/couchdb'
|
26
|
-
require 'chef/index_queue'
|
27
26
|
require 'chef/version_constraint'
|
28
27
|
|
29
28
|
class Chef
|
@@ -33,52 +32,15 @@ class Chef
|
|
33
32
|
|
34
33
|
include Chef::Mixin::ParamsValidate
|
35
34
|
include Chef::Mixin::FromFile
|
36
|
-
include Chef::IndexQueue::Indexable
|
37
35
|
|
38
36
|
COMBINED_COOKBOOK_CONSTRAINT = /(.+)(?:[\s]+)((?:#{Chef::VersionConstraint::OPS.join('|')})(?:[\s]+).+)$/.freeze
|
39
37
|
|
40
|
-
|
41
|
-
attr_reader :couchdb_id
|
42
|
-
|
43
|
-
DESIGN_DOCUMENT = {
|
44
|
-
"version" => 1,
|
45
|
-
"language" => "javascript",
|
46
|
-
"views" => {
|
47
|
-
"all" => {
|
48
|
-
"map" => <<-EOJS
|
49
|
-
function(doc) {
|
50
|
-
if (doc.chef_type == "environment") {
|
51
|
-
emit(doc.name, doc);
|
52
|
-
}
|
53
|
-
}
|
54
|
-
EOJS
|
55
|
-
},
|
56
|
-
"all_id" => {
|
57
|
-
"map" => <<-EOJS
|
58
|
-
function(doc) {
|
59
|
-
if (doc.chef_type == "environment") {
|
60
|
-
emit(doc.name, doc.name);
|
61
|
-
}
|
62
|
-
}
|
63
|
-
EOJS
|
64
|
-
}
|
65
|
-
}
|
66
|
-
}
|
67
|
-
|
68
|
-
def initialize(couchdb=nil)
|
38
|
+
def initialize
|
69
39
|
@name = ''
|
70
40
|
@description = ''
|
71
41
|
@default_attributes = Mash.new
|
72
42
|
@override_attributes = Mash.new
|
73
43
|
@cookbook_versions = Hash.new
|
74
|
-
@couchdb_rev = nil
|
75
|
-
@couchdb_id = nil
|
76
|
-
@couchdb = couchdb || Chef::CouchDB.new
|
77
|
-
end
|
78
|
-
|
79
|
-
def couchdb_id=(value)
|
80
|
-
@couchdb_id = value
|
81
|
-
self.index_id = value
|
82
44
|
end
|
83
45
|
|
84
46
|
def chef_server_rest
|
@@ -113,6 +75,10 @@ class Chef
|
|
113
75
|
)
|
114
76
|
end
|
115
77
|
|
78
|
+
def default_attributes=(attrs)
|
79
|
+
default_attributes(attrs)
|
80
|
+
end
|
81
|
+
|
116
82
|
def override_attributes(arg=nil)
|
117
83
|
set_or_return(
|
118
84
|
:override_attributes,
|
@@ -121,6 +87,10 @@ class Chef
|
|
121
87
|
)
|
122
88
|
end
|
123
89
|
|
90
|
+
def override_attributes=(attrs)
|
91
|
+
override_attributes(attrs)
|
92
|
+
end
|
93
|
+
|
124
94
|
def cookbook_versions(arg=nil)
|
125
95
|
set_or_return(
|
126
96
|
:cookbook_versions,
|
@@ -155,7 +125,6 @@ class Chef
|
|
155
125
|
"default_attributes" => @default_attributes,
|
156
126
|
"override_attributes" => @override_attributes
|
157
127
|
}
|
158
|
-
result["_rev"] = couchdb_rev if couchdb_rev
|
159
128
|
result
|
160
129
|
end
|
161
130
|
|
@@ -252,17 +221,9 @@ class Chef
|
|
252
221
|
environment.cookbook_versions(o["cookbook_versions"])
|
253
222
|
environment.default_attributes(o["default_attributes"])
|
254
223
|
environment.override_attributes(o["override_attributes"])
|
255
|
-
environment.couchdb_rev = o["_rev"] if o.has_key?("_rev")
|
256
|
-
environment.couchdb_id = o["_id"] if o.has_key?("_id")
|
257
224
|
environment
|
258
225
|
end
|
259
226
|
|
260
|
-
def self.cdb_list(inflate=false, couchdb=nil)
|
261
|
-
es = (couchdb || Chef::CouchDB.new).list("environments", inflate)
|
262
|
-
lookup = (inflate ? "value" : "key")
|
263
|
-
es["rows"].collect { |e| e[lookup] }
|
264
|
-
end
|
265
|
-
|
266
227
|
def self.list(inflate=false)
|
267
228
|
if inflate
|
268
229
|
response = Hash.new
|
@@ -275,34 +236,39 @@ class Chef
|
|
275
236
|
end
|
276
237
|
end
|
277
238
|
|
278
|
-
def self.cdb_load(name, couchdb=nil)
|
279
|
-
(couchdb || Chef::CouchDB.new).load("environment", name)
|
280
|
-
end
|
281
|
-
|
282
239
|
def self.load(name)
|
283
|
-
|
240
|
+
if Chef::Config[:solo]
|
241
|
+
load_from_file(name)
|
242
|
+
else
|
243
|
+
chef_server_rest.get_rest("environments/#{name}")
|
244
|
+
end
|
284
245
|
end
|
285
246
|
|
286
|
-
def self.
|
287
|
-
|
288
|
-
|
289
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
290
|
-
nil
|
247
|
+
def self.load_from_file(name)
|
248
|
+
unless File.directory?(Chef::Config[:environment_path])
|
249
|
+
raise Chef::Exceptions::InvalidEnvironmentPath, "Environment path '#{Chef::Config[:environment_path]}' is invalid"
|
291
250
|
end
|
292
|
-
end
|
293
251
|
|
294
|
-
|
295
|
-
|
252
|
+
js_file = File.join(Chef::Config[:environment_path], "#{name}.json")
|
253
|
+
rb_file = File.join(Chef::Config[:environment_path], "#{name}.rb")
|
254
|
+
|
255
|
+
if File.exists?(js_file)
|
256
|
+
# from_json returns object.class => json_class in the JSON.
|
257
|
+
Chef::JSONCompat.from_json(IO.read(js_file))
|
258
|
+
elsif File.exists?(rb_file)
|
259
|
+
environment = Chef::Environment.new
|
260
|
+
environment.name(name)
|
261
|
+
environment.from_file(rb_file)
|
262
|
+
environment
|
263
|
+
else
|
264
|
+
raise Chef::Exceptions::EnvironmentNotFound, "Environment '#{name}' could not be loaded from disk"
|
265
|
+
end
|
296
266
|
end
|
297
267
|
|
298
268
|
def destroy
|
299
269
|
chef_server_rest.delete_rest("environments/#{@name}")
|
300
270
|
end
|
301
271
|
|
302
|
-
def cdb_save
|
303
|
-
self.couchdb_rev = couchdb.store("environment", @name, self)["rev"]
|
304
|
-
end
|
305
|
-
|
306
272
|
def save
|
307
273
|
begin
|
308
274
|
chef_server_rest.put_rest("environments/#{@name}", self)
|
@@ -318,106 +284,6 @@ class Chef
|
|
318
284
|
self
|
319
285
|
end
|
320
286
|
|
321
|
-
# Set up our CouchDB design document
|
322
|
-
def self.create_design_document(couchdb=nil)
|
323
|
-
(couchdb || Chef::CouchDB.new).create_design_document("environments", DESIGN_DOCUMENT)
|
324
|
-
end
|
325
|
-
|
326
|
-
# Loads the set of Chef::CookbookVersion objects available to a given environment
|
327
|
-
# === Returns
|
328
|
-
# Hash
|
329
|
-
# i.e.
|
330
|
-
# {
|
331
|
-
# "cookbook_name" => [ Chef::CookbookVersion ... ] ## the array of CookbookVersions is sorted highest to lowest
|
332
|
-
# }
|
333
|
-
#
|
334
|
-
# There will be a key for every cookbook. If no CookbookVersions
|
335
|
-
# are available for the specified environment the value will be an
|
336
|
-
# empty list.
|
337
|
-
#
|
338
|
-
def self.cdb_load_filtered_cookbook_versions(name, couchdb=nil)
|
339
|
-
version_constraints = cdb_load(name, couchdb).cookbook_versions.inject({}) {|res, (k,v)| res[k] = Chef::VersionConstraint.new(v); res}
|
340
|
-
|
341
|
-
# inject all cookbooks into the hash while filtering out restricted versions, then sort the individual arrays
|
342
|
-
cookbook_list = Chef::CookbookVersion.cdb_list(true, couchdb)
|
343
|
-
|
344
|
-
filtered_list = cookbook_list.inject({}) do |res, cookbook|
|
345
|
-
# FIXME: should cookbook.version return a Chef::Version?
|
346
|
-
version = Chef::Version.new(cookbook.version)
|
347
|
-
requirement_satisfied = version_constraints.has_key?(cookbook.name) ? version_constraints[cookbook.name].include?(version) : true
|
348
|
-
# we want a key for every cookbook, even if no versions are available
|
349
|
-
res[cookbook.name] ||= []
|
350
|
-
res[cookbook.name] << cookbook if requirement_satisfied
|
351
|
-
res
|
352
|
-
end
|
353
|
-
|
354
|
-
sorted_list = filtered_list.inject({}) do |res, (cookbook_name, versions)|
|
355
|
-
res[cookbook_name] = versions.sort.reverse
|
356
|
-
res
|
357
|
-
end
|
358
|
-
|
359
|
-
sorted_list
|
360
|
-
end
|
361
|
-
|
362
|
-
# Like +cdb_load_filtered_cookbook_versions+, loads the set of
|
363
|
-
# cookbooks available in a given environment. The difference is that
|
364
|
-
# this method will load Chef::MinimalCookbookVersion objects that
|
365
|
-
# contain only the information necessary for solving a cookbook
|
366
|
-
# collection for a given run list. The user of this method must call
|
367
|
-
# Chef::MinimalCookbookVersion.load_full_versions_of() after solving
|
368
|
-
# the cookbook collection to get the full objects.
|
369
|
-
# === Returns
|
370
|
-
# Hash
|
371
|
-
# i.e.
|
372
|
-
# {
|
373
|
-
# "cookbook_name" => [ Chef::CookbookVersion ... ] ## the array of CookbookVersions is sorted highest to lowest
|
374
|
-
# }
|
375
|
-
#
|
376
|
-
# There will be a key for every cookbook. If no CookbookVersions
|
377
|
-
# are available for the specified environment the value will be an
|
378
|
-
# empty list.
|
379
|
-
def self.cdb_minimal_filtered_versions(name, couchdb=nil)
|
380
|
-
version_constraints = cdb_load(name, couchdb).cookbook_versions.inject({}) {|res, (k,v)| res[k] = Chef::VersionConstraint.new(v); res}
|
381
|
-
|
382
|
-
# inject all cookbooks into the hash while filtering out restricted versions, then sort the individual arrays
|
383
|
-
cookbook_list = Chef::MinimalCookbookVersion.load_all(couchdb)
|
384
|
-
|
385
|
-
filtered_list = cookbook_list.inject({}) do |res, cookbook|
|
386
|
-
# FIXME: should cookbook.version return a Chef::Version?
|
387
|
-
version = Chef::Version.new(cookbook.version)
|
388
|
-
requirement_satisfied = version_constraints.has_key?(cookbook.name) ? version_constraints[cookbook.name].include?(version) : true
|
389
|
-
# we want a key for every cookbook, even if no versions are available
|
390
|
-
res[cookbook.name] ||= []
|
391
|
-
res[cookbook.name] << cookbook if requirement_satisfied
|
392
|
-
res
|
393
|
-
end
|
394
|
-
|
395
|
-
sorted_list = filtered_list.inject({}) do |res, (cookbook_name, versions)|
|
396
|
-
res[cookbook_name] = versions.sort.reverse
|
397
|
-
res
|
398
|
-
end
|
399
|
-
|
400
|
-
sorted_list
|
401
|
-
end
|
402
|
-
|
403
|
-
def self.cdb_load_filtered_recipe_list(name, couchdb=nil)
|
404
|
-
cdb_load_filtered_cookbook_versions(name, couchdb).map do |cb_name, cb|
|
405
|
-
if cb.empty? # no available versions
|
406
|
-
[] # empty list elided with flatten
|
407
|
-
else
|
408
|
-
latest_version = cb.first
|
409
|
-
latest_version.recipe_filenames_by_name.keys.map do |recipe|
|
410
|
-
case recipe
|
411
|
-
when DEFAULT
|
412
|
-
cb_name
|
413
|
-
else
|
414
|
-
"#{cb_name}::#{recipe}"
|
415
|
-
end
|
416
|
-
end
|
417
|
-
end
|
418
|
-
end.flatten
|
419
|
-
end
|
420
|
-
|
421
287
|
def self.load_filtered_recipe_list(environment)
|
422
288
|
chef_server_rest.get_rest("environments/#{environment}/recipes")
|
423
289
|
end
|
@@ -436,23 +302,17 @@ class Chef
|
|
436
302
|
|
437
303
|
def self.validate_cookbook_version(version)
|
438
304
|
begin
|
439
|
-
Chef::
|
440
|
-
|
305
|
+
if Chef::Config[:solo]
|
306
|
+
raise Chef::Exceptions::IllegalVersionConstraint,
|
307
|
+
"Environment cookbook version constraints not allowed in chef-solo"
|
308
|
+
else
|
309
|
+
Chef::VersionConstraint.new version
|
310
|
+
true
|
311
|
+
end
|
441
312
|
rescue ArgumentError
|
442
313
|
false
|
443
314
|
end
|
444
315
|
end
|
445
316
|
|
446
|
-
def self.create_default_environment(couchdb=nil)
|
447
|
-
couchdb = couchdb || Chef::CouchDB.new
|
448
|
-
begin
|
449
|
-
Chef::Environment.cdb_load('_default', couchdb)
|
450
|
-
rescue Chef::Exceptions::CouchDBNotFound
|
451
|
-
env = Chef::Environment.new(couchdb)
|
452
|
-
env.name '_default'
|
453
|
-
env.description 'The default Chef environment'
|
454
|
-
env.cdb_save
|
455
|
-
end
|
456
|
-
end
|
457
317
|
end
|
458
318
|
end
|