chef 12.18.31 → 13.0.118
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 +4 -4
- data/Gemfile +15 -11
- data/README.md +13 -13
- data/Rakefile +1 -19
- data/VERSION +1 -1
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
- data/acceptance/Gemfile +8 -5
- data/acceptance/Gemfile.lock +90 -81
- data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
- data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
- data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +8 -7
- data/lib/chef/api_client.rb +8 -15
- data/lib/chef/api_client_v1.rb +9 -11
- data/lib/chef/application/apply.rb +8 -10
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/exit_code.rb +11 -82
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +0 -1
- data/lib/chef/application/windows_service.rb +36 -37
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/application.rb +15 -25
- data/lib/chef/audit/audit_event_proxy.rb +2 -2
- data/lib/chef/audit/control_group_data.rb +1 -1
- data/lib/chef/blacklist.rb +81 -0
- data/lib/chef/chef_class.rb +1 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
- data/lib/chef/chef_fs/command_line.rb +15 -16
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_pattern.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
- data/lib/chef/chef_fs/file_system.rb +1 -1
- data/lib/chef/chef_fs/parallelizer.rb +9 -11
- data/lib/chef/client.rb +47 -11
- data/lib/chef/config_fetcher.rb +4 -4
- data/lib/chef/constants.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +10 -6
- data/lib/chef/cookbook/manifest_v0.rb +68 -0
- data/lib/chef/cookbook/manifest_v2.rb +41 -0
- data/lib/chef/cookbook/metadata.rb +25 -134
- data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
- data/lib/chef/cookbook/synchronizer.rb +24 -21
- data/lib/chef/cookbook/syntax_check.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +91 -65
- data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +69 -157
- data/lib/chef/data_bag.rb +1 -7
- data/lib/chef/data_bag_item.rb +5 -10
- data/lib/chef/data_collector/messages.rb +2 -0
- data/lib/chef/data_collector/resource_report.rb +32 -4
- data/lib/chef/data_collector.rb +3 -4
- data/lib/chef/decorator/unchain.rb +0 -16
- data/lib/chef/decorator.rb +1 -1
- data/lib/chef/deprecated.rb +53 -19
- data/lib/chef/dsl/audit.rb +2 -2
- data/lib/chef/dsl/declare_resource.rb +11 -17
- data/lib/chef/dsl/platform_introspection.rb +29 -31
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/dsl/recipe.rb +1 -4
- data/lib/chef/dsl/resources.rb +4 -13
- data/lib/chef/encrypted_data_bag_item.rb +2 -2
- data/lib/chef/environment.rb +9 -16
- data/lib/chef/event_dispatch/base.rb +16 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
- data/lib/chef/exceptions.rb +6 -10
- data/lib/chef/file_access_control/unix.rb +14 -14
- data/lib/chef/file_access_control/windows.rb +1 -1
- data/lib/chef/formatters/error_description.rb +18 -1
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
- data/lib/chef/formatters/error_mapper.rb +6 -6
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
- data/lib/chef/http/api_versions.rb +54 -0
- data/lib/chef/http/authenticator.rb +15 -6
- data/lib/chef/http/json_output.rb +4 -1
- data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
- data/lib/chef/http/validate_content_length.rb +2 -2
- data/lib/chef/http.rb +39 -0
- data/lib/chef/json_compat.rb +7 -103
- data/lib/chef/key.rb +5 -10
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
- data/lib/chef/knife/bootstrap.rb +6 -0
- data/lib/chef/knife/configure.rb +1 -3
- data/lib/chef/knife/configure_client.rb +1 -3
- data/lib/chef/knife/cookbook_create.rb +1 -434
- data/lib/chef/knife/cookbook_download.rb +3 -4
- data/lib/chef/knife/cookbook_show.rb +7 -3
- data/lib/chef/knife/cookbook_site_install.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +8 -7
- data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/status_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +2 -32
- data/lib/chef/knife/core/ui.rb +20 -27
- data/lib/chef/knife/data_bag_create.rb +6 -4
- data/lib/chef/knife/data_bag_secret_options.rb +1 -1
- data/lib/chef/knife/deps.rb +32 -34
- data/lib/chef/knife/edit.rb +1 -1
- data/lib/chef/knife/help.rb +1 -1
- data/lib/chef/knife/list.rb +1 -1
- data/lib/chef/knife/search.rb +9 -20
- data/lib/chef/knife/ssh.rb +62 -36
- data/lib/chef/knife/ssl_check.rb +1 -1
- data/lib/chef/knife/user_delete.rb +1 -1
- data/lib/chef/knife/xargs.rb +1 -1
- data/lib/chef/knife.rb +6 -7
- data/lib/chef/mash.rb +1 -1
- data/lib/chef/mixin/create_path.rb +3 -5
- data/lib/chef/mixin/from_file.rb +2 -2
- data/lib/chef/mixin/get_source_from_package.rb +2 -2
- data/lib/chef/mixin/notifying_block.rb +7 -9
- data/lib/chef/mixin/params_validate.rb +9 -8
- data/lib/chef/mixin/path_sanity.rb +17 -19
- data/lib/chef/mixin/securable.rb +1 -1
- data/lib/chef/mixin/shell_out.rb +33 -29
- data/lib/chef/mixin/unformatter.rb +2 -2
- data/lib/chef/mixin/uris.rb +4 -6
- data/lib/chef/mixin/versioned_api.rb +84 -0
- data/lib/chef/mixin/which.rb +25 -8
- data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
- data/lib/chef/mixin/xml_escape.rb +3 -5
- data/lib/chef/mixins.rb +0 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
- data/lib/chef/node/attribute.rb +9 -32
- data/lib/chef/node/attribute_collections.rb +1 -19
- data/lib/chef/node/common_api.rb +5 -7
- data/lib/chef/node/immutable_collections.rb +42 -38
- data/lib/chef/node/mixin/immutablize_array.rb +1 -1
- data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
- data/lib/chef/node.rb +21 -20
- data/lib/chef/node_map.rb +2 -5
- data/lib/chef/org.rb +10 -17
- data/lib/chef/platform/provider_mapping.rb +2 -169
- data/lib/chef/platform/query_helpers.rb +1 -1
- data/lib/chef/platform/rebooter.rb +1 -2
- data/lib/chef/policy_builder/expand_node_object.rb +3 -29
- data/lib/chef/policy_builder/policyfile.rb +8 -6
- data/lib/chef/property.rb +66 -80
- data/lib/chef/provider/apt_repository.rb +6 -10
- data/lib/chef/provider/apt_update.rb +1 -7
- data/lib/chef/provider/batch.rb +1 -1
- data/lib/chef/provider/breakpoint.rb +2 -2
- data/lib/chef/provider/cookbook_file.rb +3 -9
- data/lib/chef/provider/cron.rb +42 -60
- data/lib/chef/provider/deploy/revision.rb +3 -5
- data/lib/chef/provider/deploy.rb +82 -88
- data/lib/chef/provider/directory.rb +33 -37
- data/lib/chef/provider/dsc_resource.rb +23 -11
- data/lib/chef/provider/dsc_script.rb +1 -5
- data/lib/chef/provider/env/windows.rb +5 -1
- data/lib/chef/provider/env.rb +32 -30
- data/lib/chef/provider/erl_call.rb +15 -47
- data/lib/chef/provider/execute.rb +7 -8
- data/lib/chef/provider/file.rb +49 -61
- data/lib/chef/provider/git.rb +56 -60
- data/lib/chef/provider/group.rb +1 -7
- data/lib/chef/provider/http_request.rb +37 -41
- data/lib/chef/provider/ifconfig/redhat.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +0 -6
- data/lib/chef/provider/launchd.rb +6 -2
- data/lib/chef/provider/link.rb +51 -55
- data/lib/chef/provider/log.rb +3 -7
- data/lib/chef/provider/lwrp_base.rb +0 -9
- data/lib/chef/provider/mdadm.rb +25 -33
- data/lib/chef/provider/mount/aix.rb +2 -2
- data/lib/chef/provider/mount/mount.rb +2 -2
- data/lib/chef/provider/mount.rb +1 -5
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/ohai.rb +1 -7
- data/lib/chef/provider/osx_profile.rb +24 -29
- data/lib/chef/provider/package/aix.rb +55 -53
- data/lib/chef/provider/package/apt.rb +15 -13
- data/lib/chef/provider/package/cab.rb +48 -20
- data/lib/chef/provider/package/chocolatey.rb +9 -10
- data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
- data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
- data/lib/chef/provider/package/dnf/version.rb +1 -1
- data/lib/chef/provider/package/dnf.rb +21 -19
- data/lib/chef/provider/package/dpkg.rb +8 -9
- data/lib/chef/provider/package/freebsd/base.rb +10 -10
- data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
- data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
- data/lib/chef/provider/package/freebsd/port.rb +7 -7
- data/lib/chef/provider/package/homebrew.rb +11 -10
- data/lib/chef/provider/package/ips.rb +18 -24
- data/lib/chef/provider/package/macports.rb +23 -23
- data/lib/chef/provider/package/msu.rb +11 -12
- data/lib/chef/provider/package/openbsd.rb +25 -22
- data/lib/chef/provider/package/pacman.rb +16 -17
- data/lib/chef/provider/package/paludis.rb +26 -27
- data/lib/chef/provider/package/portage.rb +22 -23
- data/lib/chef/provider/package/powershell.rb +17 -17
- data/lib/chef/provider/package/rpm.rb +25 -26
- data/lib/chef/provider/package/rubygems.rb +64 -62
- data/lib/chef/provider/package/smartos.rb +16 -16
- data/lib/chef/provider/package/solaris.rb +44 -45
- data/lib/chef/provider/package/windows/exe.rb +6 -6
- data/lib/chef/provider/package/windows/msi.rb +7 -7
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
- data/lib/chef/provider/package/windows.rb +3 -3
- data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
- data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
- data/lib/chef/provider/package/yum.rb +319 -269
- data/lib/chef/provider/package/zypper.rb +10 -20
- data/lib/chef/provider/package.rb +71 -63
- data/lib/chef/provider/powershell_script.rb +15 -7
- data/lib/chef/provider/reboot.rb +10 -14
- data/lib/chef/provider/registry_key.rb +39 -43
- data/lib/chef/provider/remote_directory.rb +3 -15
- data/lib/chef/provider/remote_file.rb +3 -9
- data/lib/chef/provider/route.rb +1 -7
- data/lib/chef/provider/ruby_block.rb +4 -8
- data/lib/chef/provider/script.rb +42 -6
- data/lib/chef/provider/service/aix.rb +1 -5
- data/lib/chef/provider/service/debian.rb +15 -21
- data/lib/chef/provider/service/freebsd.rb +0 -1
- data/lib/chef/provider/service/gentoo.rb +0 -1
- data/lib/chef/provider/service/init.rb +0 -1
- data/lib/chef/provider/service/insserv.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +0 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/simple.rb +0 -5
- data/lib/chef/provider/service/solaris.rb +5 -4
- data/lib/chef/provider/service/systemd.rb +1 -1
- data/lib/chef/provider/service/upstart.rb +10 -12
- data/lib/chef/provider/service/windows.rb +1 -5
- data/lib/chef/provider/service.rb +51 -58
- data/lib/chef/provider/subversion.rb +40 -46
- data/lib/chef/provider/systemd_unit.rb +2 -0
- data/lib/chef/provider/template/content.rb +24 -1
- data/lib/chef/provider/template.rb +3 -9
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/linux.rb +6 -5
- data/lib/chef/provider/user/pw.rb +4 -10
- data/lib/chef/provider/user/solaris.rb +2 -2
- data/lib/chef/provider/user/useradd.rb +5 -5
- data/lib/chef/provider/user.rb +43 -59
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
- data/lib/chef/provider/windows_task.rb +418 -0
- data/lib/chef/provider/yum_repository.rb +3 -6
- data/lib/chef/provider.rb +63 -115
- data/lib/chef/provider_resolver.rb +8 -34
- data/lib/chef/providers.rb +1 -1
- data/lib/chef/recipe.rb +9 -1
- data/lib/chef/resource/action_class.rb +13 -17
- data/lib/chef/resource/apt_repository.rb +0 -1
- data/lib/chef/resource/apt_update.rb +3 -1
- data/lib/chef/resource/chef_gem.rb +4 -11
- data/lib/chef/resource/chocolatey_package.rb +4 -1
- data/lib/chef/resource/dnf_package.rb +6 -3
- data/lib/chef/resource/dsc_resource.rb +9 -1
- data/lib/chef/resource/execute.rb +66 -19
- data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
- data/lib/chef/resource/file/verification.rb +2 -7
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +16 -2
- data/lib/chef/resource/launchd.rb +3 -3
- data/lib/chef/resource/lwrp_base.rb +0 -2
- data/lib/chef/resource/mount.rb +5 -12
- data/lib/chef/resource/package.rb +2 -2
- data/lib/chef/resource/powershell_script.rb +1 -1
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/script.rb +8 -34
- data/lib/chef/resource/service.rb +15 -13
- data/lib/chef/resource/systemd_unit.rb +5 -0
- data/lib/chef/resource/user/aix_user.rb +1 -1
- data/lib/chef/resource/user/dscl_user.rb +1 -1
- data/lib/chef/resource/user/linux_user.rb +1 -10
- data/lib/chef/resource/user/pw_user.rb +1 -1
- data/lib/chef/resource/user/solaris_user.rb +1 -1
- data/lib/chef/resource/user/windows_user.rb +1 -1
- data/lib/chef/resource/user.rb +1 -19
- data/lib/chef/resource/windows_package.rb +4 -1
- data/lib/chef/resource/windows_task.rb +237 -0
- data/lib/chef/resource/yum_package.rb +13 -4
- data/lib/chef/resource/yum_repository.rb +0 -1
- data/lib/chef/resource/zypper_package.rb +2 -0
- data/lib/chef/resource.rb +90 -202
- data/lib/chef/resource_builder.rb +1 -65
- data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
- data/lib/chef/resource_collection/resource_list.rb +6 -0
- data/lib/chef/resource_collection/resource_set.rb +44 -17
- data/lib/chef/resource_collection.rb +10 -0
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resource_resolver.rb +1 -25
- data/lib/chef/resources.rb +1 -1
- data/lib/chef/role.rb +0 -6
- data/lib/chef/run_context/cookbook_compiler.rb +49 -5
- data/lib/chef/run_context.rb +4 -25
- data/lib/chef/run_list/run_list_item.rb +1 -1
- data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
- data/lib/chef/search/query.rb +26 -31
- data/lib/chef/server_api.rb +2 -0
- data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
- data/lib/chef/shell/ext.rb +3 -3
- data/lib/chef/shell/shell_session.rb +14 -4
- data/lib/chef/shell.rb +32 -7
- data/lib/chef/user.rb +9 -16
- data/lib/chef/user_v1.rb +9 -16
- data/lib/chef/util/diff.rb +1 -1
- data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
- data/lib/chef/util/selinux.rb +1 -1
- data/lib/chef/util/windows/net_group.rb +18 -30
- data/lib/chef/util/windows/net_use.rb +7 -11
- data/lib/chef/util/windows/net_user.rb +12 -18
- data/lib/chef/util/windows/volume.rb +9 -15
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/win32/api/file.rb +25 -31
- data/lib/chef/win32/api/installer.rb +2 -2
- data/lib/chef/win32/api.rb +4 -6
- data/lib/chef/win32/file.rb +4 -6
- data/lib/chef/win32/registry.rb +9 -9
- data/lib/chef/win32/security/acl.rb +2 -2
- data/lib/chef/win32/security/sid.rb +5 -0
- data/lib/chef/win32/security.rb +2 -2
- data/lib/chef/win32/unicode.rb +2 -2
- data/lib/chef/win32/version.rb +1 -1
- data/lib/chef.rb +1 -2
- data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
- data/spec/data/lwrp/providers/buck_passer.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
- data/spec/data/lwrp/providers/inline_compiler.rb +0 -2
- data/spec/data/lwrp/resources/buck_passer.rb +5 -0
- data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
- data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
- data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
- data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
- data/spec/data/prefer_metadata_json/metadata.json +51 -0
- data/spec/data/prefer_metadata_json/metadata.rb +6 -0
- data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
- data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
- data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
- data/spec/data/shef-config.rb +11 -10
- data/spec/functional/knife/ssh_spec.rb +34 -6
- data/spec/functional/rebooter_spec.rb +1 -0
- data/spec/functional/resource/bash_spec.rb +11 -45
- data/spec/functional/resource/batch_spec.rb +5 -1
- data/spec/functional/resource/cron_spec.rb +2 -2
- data/spec/functional/resource/dsc_script_spec.rb +2 -4
- data/spec/functional/resource/execute_spec.rb +17 -0
- data/spec/functional/resource/link_spec.rb +3 -3
- data/spec/functional/resource/template_spec.rb +33 -0
- data/spec/functional/resource/user/dscl_spec.rb +2 -4
- data/spec/functional/root_alias_spec.rb +78 -0
- data/spec/functional/shell_spec.rb +38 -40
- data/spec/integration/client/client_spec.rb +109 -16
- data/spec/integration/client/exit_code_spec.rb +1 -105
- data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
- data/spec/integration/knife/cookbook_download_spec.rb +0 -24
- data/spec/integration/knife/cookbook_show_spec.rb +12 -23
- data/spec/integration/knife/deps_spec.rb +5 -9
- data/spec/integration/knife/search_node_spec.rb +39 -0
- data/spec/integration/knife/serve_spec.rb +58 -22
- data/spec/integration/knife/upload_spec.rb +3 -11
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
- data/spec/integration/recipes/notifies_spec.rb +60 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
- data/spec/integration/recipes/resource_action_spec.rb +37 -30
- data/spec/spec_helper.rb +7 -0
- data/spec/support/chef_helpers.rb +5 -7
- data/spec/support/platform_helpers.rb +10 -3
- data/spec/support/platforms/prof/gc.rb +4 -6
- data/spec/support/shared/context/client.rb +9 -2
- data/spec/support/shared/functional/execute_resource.rb +150 -0
- data/spec/support/shared/functional/windows_script.rb +74 -4
- data/spec/support/shared/integration/knife_support.rb +1 -1
- data/spec/support/shared/unit/execute_resource.rb +37 -9
- data/spec/support/shared/unit/provider/file.rb +10 -0
- data/spec/support/shared/unit/script_resource.rb +1 -9
- data/spec/unit/application/exit_code_spec.rb +4 -89
- data/spec/unit/application_spec.rb +39 -29
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
- data/spec/unit/client_spec.rb +72 -31
- data/spec/unit/config_fetcher_spec.rb +2 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
- data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
- data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
- data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
- data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
- data/spec/unit/cookbook/metadata_spec.rb +29 -108
- data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
- data/spec/unit/cookbook_loader_spec.rb +17 -19
- data/spec/unit/cookbook_manifest_spec.rb +12 -44
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
- data/spec/unit/cookbook_spec.rb +10 -14
- data/spec/unit/cookbook_uploader_spec.rb +1 -1
- data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
- data/spec/unit/cookbook_version_spec.rb +19 -128
- data/spec/unit/data_bag_item_spec.rb +4 -0
- data/spec/unit/data_collector/messages_spec.rb +137 -0
- data/spec/unit/data_collector/resource_report_spec.rb +145 -0
- data/spec/unit/deprecation_spec.rb +0 -14
- data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
- data/spec/unit/formatters/error_description_spec.rb +52 -7
- data/spec/unit/http/api_versions_spec.rb +79 -0
- data/spec/unit/http/authenticator_spec.rb +20 -0
- data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
- data/spec/unit/json_compat_spec.rb +0 -32
- data/spec/unit/knife/bootstrap_spec.rb +34 -0
- data/spec/unit/knife/configure_client_spec.rb +0 -2
- data/spec/unit/knife/cookbook_create_spec.rb +1 -220
- data/spec/unit/knife/cookbook_download_spec.rb +46 -28
- data/spec/unit/knife/cookbook_show_spec.rb +42 -9
- data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
- data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
- data/spec/unit/knife/core/ui_spec.rb +21 -11
- data/spec/unit/knife/data_bag_create_spec.rb +65 -45
- data/spec/unit/knife/ssh_spec.rb +34 -36
- data/spec/unit/knife_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +38 -127
- data/spec/unit/mixin/path_sanity_spec.rb +7 -7
- data/spec/unit/mixin/shell_out_spec.rb +18 -84
- data/spec/unit/mixin/versioned_api_spec.rb +128 -0
- data/spec/unit/mixin/which.rb +160 -0
- data/spec/unit/node/attribute_spec.rb +65 -33
- data/spec/unit/node/immutable_collections_spec.rb +104 -1
- data/spec/unit/node_map_spec.rb +1 -23
- data/spec/unit/node_spec.rb +81 -98
- data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
- data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
- data/spec/unit/property/validation_spec.rb +51 -69
- data/spec/unit/property_spec.rb +105 -125
- data/spec/unit/provider/apt_repository_spec.rb +33 -27
- data/spec/unit/provider/cron_spec.rb +15 -39
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/directory_spec.rb +10 -0
- data/spec/unit/provider/dsc_resource_spec.rb +175 -0
- data/spec/unit/provider/erl_call_spec.rb +5 -13
- data/spec/unit/provider/execute_spec.rb +3 -14
- data/spec/unit/provider/launchd_spec.rb +2 -2
- data/spec/unit/provider/package/aix_spec.rb +22 -22
- data/spec/unit/provider/package/apt_spec.rb +37 -27
- data/spec/unit/provider/package/cab_spec.rb +59 -5
- data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
- data/spec/unit/provider/package/dpkg_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
- data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
- data/spec/unit/provider/package/homebrew_spec.rb +9 -9
- data/spec/unit/provider/package/ips_spec.rb +37 -31
- data/spec/unit/provider/package/macports_spec.rb +10 -10
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +6 -6
- data/spec/unit/provider/package/paludis_spec.rb +7 -7
- data/spec/unit/provider/package/portage_spec.rb +6 -7
- data/spec/unit/provider/package/rpm_spec.rb +23 -23
- data/spec/unit/provider/package/rubygems_spec.rb +135 -46
- data/spec/unit/provider/package/solaris_spec.rb +15 -15
- data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
- data/spec/unit/provider/package/windows_spec.rb +2 -1
- data/spec/unit/provider/package/yum_spec.rb +58 -50
- data/spec/unit/provider/package/zypper_spec.rb +54 -97
- data/spec/unit/provider/package_spec.rb +8 -0
- data/spec/unit/provider/powershell_script_spec.rb +14 -4
- data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +7 -1
- data/spec/unit/provider/script_spec.rb +49 -6
- data/spec/unit/provider/service/debian_service_spec.rb +14 -20
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
- data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
- data/spec/unit/provider/subversion_spec.rb +2 -2
- data/spec/unit/provider/user/linux_spec.rb +5 -43
- data/spec/unit/provider/user/pw_spec.rb +7 -27
- data/spec/unit/provider/windows_task_spec.rb +392 -0
- data/spec/unit/provider_resolver_spec.rb +0 -1
- data/spec/unit/provider_spec.rb +10 -3
- data/spec/unit/recipe_spec.rb +3 -172
- data/spec/unit/resource/chef_gem_spec.rb +16 -62
- data/spec/unit/resource/conditional_spec.rb +4 -4
- data/spec/unit/resource/cookbook_file_spec.rb +2 -2
- data/spec/unit/resource/cron_spec.rb +1 -1
- data/spec/unit/resource/deploy_spec.rb +4 -4
- data/spec/unit/resource/directory_spec.rb +2 -2
- data/spec/unit/resource/dsc_resource_spec.rb +6 -0
- data/spec/unit/resource/env_spec.rb +1 -1
- data/spec/unit/resource/execute_spec.rb +215 -1
- data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
- data/spec/unit/resource/file/verification_spec.rb +8 -14
- data/spec/unit/resource/file_spec.rb +3 -3
- data/spec/unit/resource/freebsd_package_spec.rb +2 -2
- data/spec/unit/resource/group_spec.rb +2 -2
- data/spec/unit/resource/ifconfig_spec.rb +1 -1
- data/spec/unit/resource/link_spec.rb +2 -2
- data/spec/unit/resource/mdadm_spec.rb +1 -1
- data/spec/unit/resource/mount_spec.rb +3 -3
- data/spec/unit/resource/ohai_spec.rb +1 -1
- data/spec/unit/resource/package_spec.rb +14 -4
- data/spec/unit/resource/registry_key_spec.rb +2 -2
- data/spec/unit/resource/remote_directory_spec.rb +2 -2
- data/spec/unit/resource/remote_file_spec.rb +2 -2
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/scm_spec.rb +2 -2
- data/spec/unit/resource/script_spec.rb +1 -1
- data/spec/unit/resource/service_spec.rb +25 -5
- data/spec/unit/resource/systemd_unit_spec.rb +1 -1
- data/spec/unit/resource/template_spec.rb +2 -2
- data/spec/unit/resource/user_spec.rb +6 -6
- data/spec/unit/resource/windows_task_spec.rb +213 -0
- data/spec/unit/resource/yum_package_spec.rb +42 -1
- data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
- data/spec/unit/resource_collection_spec.rb +4 -3
- data/spec/unit/resource_reporter_spec.rb +6 -6
- data/spec/unit/resource_spec.rb +55 -71
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
- data/spec/unit/runner_spec.rb +10 -28
- data/spec/unit/search/query_spec.rb +32 -34
- data/spec/unit/server_api_versions_spec.rb +44 -0
- data/spec/unit/shell/shell_session_spec.rb +33 -2
- data/spec/unit/util/selinux_spec.rb +3 -14
- data/spec/unit/win32/error_spec.rb +67 -0
- data/spec/unit/win32/security_spec.rb +66 -0
- data/tasks/bundle.rb +36 -52
- data/tasks/changelog.rb +1 -1
- data/tasks/dependencies.rb +54 -52
- data/tasks/version.rb +41 -0
- metadata +91 -76
- data/lib/chef/deprecation/mixin/template.rb +0 -48
- data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
- data/lib/chef/deprecation/provider/file.rb +0 -198
- data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
- data/lib/chef/deprecation/provider/remote_file.rb +0 -85
- data/lib/chef/deprecation/provider/template.rb +0 -63
- data/lib/chef/dsl/method_missing.rb +0 -75
- data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
- data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
- data/lib/chef/mixin/command/unix.rb +0 -220
- data/lib/chef/mixin/command/windows.rb +0 -71
- data/lib/chef/mixin/command.rb +0 -194
- data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
- data/lib/chef/provider/package/easy_install.rb +0 -135
- data/lib/chef/rest.rb +0 -210
- data/lib/chef/shell_out.rb +0 -13
- data/lib/chef/tasks/chef_repo.rake +0 -200
- data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
- data/spec/functional/rest_spec.rb +0 -95
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
- data/spec/unit/lib_backcompat_spec.rb +0 -34
- data/spec/unit/mixin/command_spec.rb +0 -107
- data/spec/unit/platform_spec.rb +0 -242
- data/spec/unit/provider/package/easy_install_spec.rb +0 -114
- data/spec/unit/resource/easy_install_package_spec.rb +0 -39
- data/spec/unit/rest/auth_credentials_spec.rb +0 -292
- data/spec/unit/rest_spec.rb +0 -753
- data/spec/unit/shell_out_spec.rb +0 -18
- data/tasks/bin/bundle-platform +0 -20
- data/tasks/bin/bundle-platform.bat +0 -2
- data/tasks/bin/bundler_patch.rb +0 -27
- data/tasks/bin/gem-version-diff +0 -37
- data/tasks/bundle_util.rb +0 -110
data/lib/chef/resource.rb
CHANGED
|
@@ -23,6 +23,7 @@ require "chef/dsl/data_query"
|
|
|
23
23
|
require "chef/dsl/registry_helper"
|
|
24
24
|
require "chef/dsl/reboot_pending"
|
|
25
25
|
require "chef/dsl/resources"
|
|
26
|
+
require "chef/json_compat"
|
|
26
27
|
require "chef/mixin/convert_to_class_name"
|
|
27
28
|
require "chef/guard_interpreter/resource_guard_interpreter"
|
|
28
29
|
require "chef/resource/conditional"
|
|
@@ -83,7 +84,7 @@ class Chef
|
|
|
83
84
|
# @param name [Object] The name to set, typically a String or Array
|
|
84
85
|
# @return [String] The name of this Resource.
|
|
85
86
|
#
|
|
86
|
-
property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false
|
|
87
|
+
property :name, String, coerce: proc { |v| v.is_a?(Array) ? v.join(", ") : v.to_s }, desired_state: false, required: true
|
|
87
88
|
|
|
88
89
|
#
|
|
89
90
|
# The node the current Chef run is using.
|
|
@@ -130,7 +131,6 @@ class Chef
|
|
|
130
131
|
def initialize(name, run_context = nil)
|
|
131
132
|
name(name) unless name.nil?
|
|
132
133
|
@run_context = run_context
|
|
133
|
-
@noop = nil
|
|
134
134
|
@before = nil
|
|
135
135
|
@params = Hash.new
|
|
136
136
|
@provider = nil
|
|
@@ -138,10 +138,6 @@ class Chef
|
|
|
138
138
|
@action = self.class.default_action
|
|
139
139
|
@updated = false
|
|
140
140
|
@updated_by_last_action = false
|
|
141
|
-
@supports = {}
|
|
142
|
-
@ignore_failure = false
|
|
143
|
-
@retries = 0
|
|
144
|
-
@retry_delay = 2
|
|
145
141
|
@not_if = []
|
|
146
142
|
@only_if = []
|
|
147
143
|
@source_line = nil
|
|
@@ -153,7 +149,6 @@ class Chef
|
|
|
153
149
|
@guard_interpreter = nil
|
|
154
150
|
@default_guard_interpreter = :default
|
|
155
151
|
@elapsed_time = 0
|
|
156
|
-
@sensitive = false
|
|
157
152
|
end
|
|
158
153
|
|
|
159
154
|
#
|
|
@@ -437,10 +432,7 @@ class Chef
|
|
|
437
432
|
# @param arg [Integer] The number of retries.
|
|
438
433
|
# @return [Integer] The number of retries.
|
|
439
434
|
#
|
|
440
|
-
|
|
441
|
-
set_or_return(:retries, arg, kind_of: Integer)
|
|
442
|
-
end
|
|
443
|
-
attr_writer :retries
|
|
435
|
+
property :retries, Integer, default: 0, desired_state: false
|
|
444
436
|
|
|
445
437
|
#
|
|
446
438
|
# The number of seconds to wait between retries. Default: 2.
|
|
@@ -448,10 +440,7 @@ class Chef
|
|
|
448
440
|
# @param arg [Integer] The number of seconds to wait between retries.
|
|
449
441
|
# @return [Integer] The number of seconds to wait between retries.
|
|
450
442
|
#
|
|
451
|
-
|
|
452
|
-
set_or_return(:retry_delay, arg, kind_of: Integer)
|
|
453
|
-
end
|
|
454
|
-
attr_writer :retry_delay
|
|
443
|
+
property :retry_delay, Integer, default: 2, desired_state: false
|
|
455
444
|
|
|
456
445
|
#
|
|
457
446
|
# Whether to treat this resource's data as sensitive. If set, no resource
|
|
@@ -460,15 +449,7 @@ class Chef
|
|
|
460
449
|
# @param arg [Boolean] Whether this resource is sensitive or not.
|
|
461
450
|
# @return [Boolean] Whether this resource is sensitive or not.
|
|
462
451
|
#
|
|
463
|
-
|
|
464
|
-
set_or_return(:sensitive, arg, :kind_of => [ TrueClass, FalseClass ])
|
|
465
|
-
end
|
|
466
|
-
attr_writer :sensitive
|
|
467
|
-
|
|
468
|
-
# ??? TODO unreferenced. Delete?
|
|
469
|
-
attr_reader :not_if_args
|
|
470
|
-
# ??? TODO unreferenced. Delete?
|
|
471
|
-
attr_reader :only_if_args
|
|
452
|
+
property :sensitive, [ TrueClass, FalseClass ], default: false, desired_state: false
|
|
472
453
|
|
|
473
454
|
#
|
|
474
455
|
# The time it took (in seconds) to run the most recently-run action. Not
|
|
@@ -522,15 +503,6 @@ class Chef
|
|
|
522
503
|
state
|
|
523
504
|
end
|
|
524
505
|
|
|
525
|
-
#
|
|
526
|
-
# Since there are collisions with LWRP parameters named 'state' this
|
|
527
|
-
# method is not used by the resource_reporter and is most likely unused.
|
|
528
|
-
# It certainly cannot be relied upon and cannot be fixed.
|
|
529
|
-
#
|
|
530
|
-
# @deprecated
|
|
531
|
-
#
|
|
532
|
-
alias_method :state, :state_for_resource_reporter
|
|
533
|
-
|
|
534
506
|
#
|
|
535
507
|
# The value of the identity of this resource.
|
|
536
508
|
#
|
|
@@ -561,10 +533,7 @@ class Chef
|
|
|
561
533
|
# @param arg [Boolean] Whether to ignore failures.
|
|
562
534
|
# @return Whether this resource will ignore failures.
|
|
563
535
|
#
|
|
564
|
-
|
|
565
|
-
set_or_return(:ignore_failure, arg, kind_of: [ TrueClass, FalseClass ])
|
|
566
|
-
end
|
|
567
|
-
attr_writer :ignore_failure
|
|
536
|
+
property :ignore_failure, [ TrueClass, FalseClass ], default: false, desired_state: false
|
|
568
537
|
|
|
569
538
|
#
|
|
570
539
|
# Equivalent to #ignore_failure.
|
|
@@ -579,7 +548,7 @@ class Chef
|
|
|
579
548
|
def load_from(resource)
|
|
580
549
|
resource.instance_variables.each do |iv|
|
|
581
550
|
unless iv == :@source_line || iv == :@action || iv == :@not_if || iv == :@only_if
|
|
582
|
-
|
|
551
|
+
instance_variable_set(iv, resource.instance_variable_get(iv))
|
|
583
552
|
end
|
|
584
553
|
end
|
|
585
554
|
end
|
|
@@ -620,7 +589,7 @@ class Chef
|
|
|
620
589
|
begin
|
|
621
590
|
return if should_skip?(action)
|
|
622
591
|
provider_for_action(action).run_action
|
|
623
|
-
rescue
|
|
592
|
+
rescue StandardError => e
|
|
624
593
|
if ignore_failure
|
|
625
594
|
Chef::Log.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
|
|
626
595
|
events.resource_failed(self, action, e)
|
|
@@ -667,21 +636,34 @@ class Chef
|
|
|
667
636
|
|
|
668
637
|
def to_text
|
|
669
638
|
return "suppressed sensitive resource output" if sensitive
|
|
670
|
-
ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
|
|
671
639
|
text = "# Declared in #{@source_line}\n\n"
|
|
672
640
|
text << "#{resource_name}(\"#{name}\") do\n"
|
|
641
|
+
|
|
642
|
+
all_props = {}
|
|
643
|
+
self.class.state_properties.map do |p|
|
|
644
|
+
all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
|
|
673
648
|
ivars.each do |ivar|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
text << " #{
|
|
649
|
+
iv = ivar.to_s.sub(/^@/, "")
|
|
650
|
+
if all_props.keys.include?(iv)
|
|
651
|
+
text << " #{iv} #{all_props[iv]}\n"
|
|
652
|
+
elsif (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
|
|
653
|
+
text << " #{iv} #{value_to_text(value)}\n"
|
|
677
654
|
end
|
|
678
655
|
end
|
|
656
|
+
|
|
679
657
|
[@not_if, @only_if].flatten.each do |conditional|
|
|
680
658
|
text << " #{conditional.to_text}\n"
|
|
681
659
|
end
|
|
682
660
|
text << "end\n"
|
|
683
661
|
end
|
|
684
662
|
|
|
663
|
+
def value_to_text(value)
|
|
664
|
+
value.respond_to?(:to_text) ? value.to_text : value.inspect
|
|
665
|
+
end
|
|
666
|
+
|
|
685
667
|
def inspect
|
|
686
668
|
ivars = instance_variables.map { |ivar| ivar.to_sym } - FORBIDDEN_IVARS
|
|
687
669
|
ivars.inject("<#{self}") do |str, ivar|
|
|
@@ -725,14 +707,22 @@ class Chef
|
|
|
725
707
|
result
|
|
726
708
|
end
|
|
727
709
|
|
|
728
|
-
def self.
|
|
729
|
-
resource =
|
|
710
|
+
def self.from_hash(o)
|
|
711
|
+
resource = new(o["instance_vars"]["@name"])
|
|
730
712
|
o["instance_vars"].each do |k, v|
|
|
731
713
|
resource.instance_variable_set("@#{k}".to_sym, v)
|
|
732
714
|
end
|
|
733
715
|
resource
|
|
734
716
|
end
|
|
735
717
|
|
|
718
|
+
def self.json_create(o)
|
|
719
|
+
from_hash(o)
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
def self.from_json(j)
|
|
723
|
+
from_hash(Chef::JSONCompat.parse(j))
|
|
724
|
+
end
|
|
725
|
+
|
|
736
726
|
#
|
|
737
727
|
# Resource Definition Interface (for resource developers)
|
|
738
728
|
#
|
|
@@ -762,8 +752,7 @@ class Chef
|
|
|
762
752
|
else
|
|
763
753
|
arg
|
|
764
754
|
end
|
|
765
|
-
set_or_return(:provider, klass, kind_of: [ Class ])
|
|
766
|
-
self.class.action_class
|
|
755
|
+
set_or_return(:provider, klass, kind_of: [ Class ])
|
|
767
756
|
end
|
|
768
757
|
|
|
769
758
|
def provider=(arg)
|
|
@@ -919,17 +908,6 @@ class Chef
|
|
|
919
908
|
@updated_by_last_action
|
|
920
909
|
end
|
|
921
910
|
|
|
922
|
-
#
|
|
923
|
-
# Set whether this class was updated during an action.
|
|
924
|
-
#
|
|
925
|
-
# @deprecated Multiple actions are supported by resources. Please call {}#updated_by_last_action} instead.
|
|
926
|
-
#
|
|
927
|
-
def updated=(true_or_false)
|
|
928
|
-
Chef.deprecated(:custom_resource, "Chef::Resource#updated=(true|false) is deprecated. Please call #updated_by_last_action(true|false) instead.")
|
|
929
|
-
updated_by_last_action(true_or_false)
|
|
930
|
-
@updated = true_or_false
|
|
931
|
-
end
|
|
932
|
-
|
|
933
911
|
#
|
|
934
912
|
# The display name of this resource type, for printing purposes.
|
|
935
913
|
#
|
|
@@ -941,29 +919,6 @@ class Chef
|
|
|
941
919
|
@resource_name || self.class.resource_name
|
|
942
920
|
end
|
|
943
921
|
|
|
944
|
-
#
|
|
945
|
-
# Sets a list of capabilities of the real resource. For example, `:remount`
|
|
946
|
-
# (for filesystems) and `:restart` (for services).
|
|
947
|
-
#
|
|
948
|
-
# TODO Calling resource.supports({}) will not set this to empty; it will do
|
|
949
|
-
# a get instead. That's wrong.
|
|
950
|
-
#
|
|
951
|
-
# @param args Hash{Symbol=>Boolean} If non-empty, sets the capabilities of
|
|
952
|
-
# this resource. Default: {}
|
|
953
|
-
# @return Hash{Symbol=>Boolean} An array of things this resource supports.
|
|
954
|
-
#
|
|
955
|
-
def supports(args = {})
|
|
956
|
-
if args.any?
|
|
957
|
-
@supports = args
|
|
958
|
-
else
|
|
959
|
-
@supports
|
|
960
|
-
end
|
|
961
|
-
end
|
|
962
|
-
|
|
963
|
-
def supports=(args)
|
|
964
|
-
supports(args)
|
|
965
|
-
end
|
|
966
|
-
|
|
967
922
|
#
|
|
968
923
|
# A hook called after a resource is created. Meant to be overriden by
|
|
969
924
|
# subclasses.
|
|
@@ -972,21 +927,6 @@ class Chef
|
|
|
972
927
|
nil
|
|
973
928
|
end
|
|
974
929
|
|
|
975
|
-
#
|
|
976
|
-
# The DSL name of this resource (e.g. `package` or `yum_package`)
|
|
977
|
-
#
|
|
978
|
-
# @return [String] The DSL name of this resource.
|
|
979
|
-
#
|
|
980
|
-
# @deprecated Use resource_name instead.
|
|
981
|
-
#
|
|
982
|
-
def self.dsl_name
|
|
983
|
-
Chef.deprecated(:custom_resource, "Resource.dsl_name is deprecated and will be removed in Chef 13. Use resource_name instead.")
|
|
984
|
-
if name
|
|
985
|
-
name = self.name.split("::")[-1]
|
|
986
|
-
convert_to_snake_case(name)
|
|
987
|
-
end
|
|
988
|
-
end
|
|
989
|
-
|
|
990
930
|
#
|
|
991
931
|
# The display name of this resource type, for printing purposes.
|
|
992
932
|
#
|
|
@@ -1036,33 +976,10 @@ class Chef
|
|
|
1036
976
|
# A::B::BlahDBlah -> blah_d_blah
|
|
1037
977
|
#
|
|
1038
978
|
def self.use_automatic_resource_name
|
|
1039
|
-
automatic_name = convert_to_snake_case(
|
|
979
|
+
automatic_name = convert_to_snake_case(name.split("::")[-1])
|
|
1040
980
|
resource_name automatic_name
|
|
1041
981
|
end
|
|
1042
982
|
|
|
1043
|
-
#
|
|
1044
|
-
# The module where Chef should look for providers for this resource.
|
|
1045
|
-
# The provider for `MyResource` will be looked up using
|
|
1046
|
-
# `provider_base::MyResource`. Defaults to `Chef::Provider`.
|
|
1047
|
-
#
|
|
1048
|
-
# @param arg [Module] The module containing providers for this resource
|
|
1049
|
-
# @return [Module] The module containing providers for this resource
|
|
1050
|
-
#
|
|
1051
|
-
# @example
|
|
1052
|
-
# class MyResource < Chef::Resource
|
|
1053
|
-
# provider_base Chef::Provider::Deploy
|
|
1054
|
-
# # ...other stuff
|
|
1055
|
-
# end
|
|
1056
|
-
#
|
|
1057
|
-
# @deprecated Use `provides` on the provider, or `provider` on the resource, instead.
|
|
1058
|
-
#
|
|
1059
|
-
def self.provider_base(arg = nil)
|
|
1060
|
-
if arg
|
|
1061
|
-
Chef.deprecated(:custom_resource, "Resource.provider_base is deprecated and will be removed in Chef 13. Use provides on the provider, or provider on the resource, instead.")
|
|
1062
|
-
end
|
|
1063
|
-
@provider_base ||= arg || Chef::Provider
|
|
1064
|
-
end
|
|
1065
|
-
|
|
1066
983
|
#
|
|
1067
984
|
# The list of allowed actions for the resource.
|
|
1068
985
|
#
|
|
@@ -1193,53 +1110,65 @@ class Chef
|
|
|
1193
1110
|
end
|
|
1194
1111
|
|
|
1195
1112
|
#
|
|
1196
|
-
# The action class is
|
|
1197
|
-
#
|
|
1198
|
-
#
|
|
1199
|
-
# This class will be returned by `resource.provider` if `resource.provider`
|
|
1200
|
-
# is not set. `provider_for_action` will also use this instead of calling
|
|
1201
|
-
# out to `Chef::ProviderResolver`.
|
|
1113
|
+
# The action class is a `Chef::Provider` which is created at Resource
|
|
1114
|
+
# class evaluation time when the Custom Resource is being constructed.
|
|
1202
1115
|
#
|
|
1203
|
-
#
|
|
1204
|
-
#
|
|
1205
|
-
#
|
|
1116
|
+
# This happens the first time the ruby parser hits an `action` or an
|
|
1117
|
+
# `action_class` method, the presence of either indiates that this is
|
|
1118
|
+
# going to be a Chef-12.5 custom resource. If we never see one of these
|
|
1119
|
+
# directives then we are constructing an old-style Resource+Provider or
|
|
1120
|
+
# LWRP or whatevs.
|
|
1206
1121
|
#
|
|
1207
1122
|
# If a block is passed, the action_class is always created and the block is
|
|
1208
1123
|
# run inside it.
|
|
1209
1124
|
#
|
|
1210
|
-
# @api private
|
|
1211
|
-
#
|
|
1212
1125
|
def self.action_class(&block)
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
if block || (superclass.respond_to?(:action_class) && superclass.action_class)
|
|
1216
|
-
@action_class = declare_action_class(&block)
|
|
1217
|
-
end
|
|
1126
|
+
@action_class ||= declare_action_class
|
|
1127
|
+
@action_class.class_eval(&block) if block
|
|
1218
1128
|
@action_class
|
|
1219
1129
|
end
|
|
1220
1130
|
|
|
1131
|
+
# Returns true or false based on if the resource is a custom resource. The
|
|
1132
|
+
# top-level Chef::Resource is not a chef resource. This value is inherited.
|
|
1133
|
+
#
|
|
1134
|
+
# @return [Boolean] if the resource is a custom_resource
|
|
1135
|
+
def self.custom_resource?
|
|
1136
|
+
false
|
|
1137
|
+
end
|
|
1138
|
+
|
|
1139
|
+
# This sets the resource to being a custom resource, and does so in a way
|
|
1140
|
+
# that automatically inherits to all subclasses via defining a method on
|
|
1141
|
+
# the class (class variables and class instance variables don't have the
|
|
1142
|
+
# correct semantics here, this is a poor man's activesupport class_attribute)
|
|
1143
|
+
#
|
|
1144
|
+
# @api private
|
|
1145
|
+
def self.is_custom_resource!
|
|
1146
|
+
define_singleton_method :custom_resource? do
|
|
1147
|
+
true
|
|
1148
|
+
end
|
|
1149
|
+
end
|
|
1150
|
+
|
|
1221
1151
|
#
|
|
1222
1152
|
# Ensure the action class actually gets created. This is called
|
|
1223
1153
|
# when the user does `action :x do ... end`.
|
|
1224
1154
|
#
|
|
1225
|
-
# If a block is passed, it is run inside the action_class.
|
|
1226
|
-
#
|
|
1227
1155
|
# @api private
|
|
1228
|
-
def self.declare_action_class
|
|
1229
|
-
@action_class ||=
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1156
|
+
def self.declare_action_class
|
|
1157
|
+
@action_class ||=
|
|
1158
|
+
begin
|
|
1159
|
+
is_custom_resource!
|
|
1160
|
+
base_provider =
|
|
1161
|
+
if superclass.custom_resource?
|
|
1162
|
+
superclass.action_class
|
|
1163
|
+
else
|
|
1164
|
+
ActionClass
|
|
1165
|
+
end
|
|
1166
|
+
|
|
1167
|
+
resource_class = self
|
|
1168
|
+
Class.new(base_provider) do
|
|
1169
|
+
self.resource_class = resource_class
|
|
1170
|
+
end
|
|
1171
|
+
end
|
|
1243
1172
|
end
|
|
1244
1173
|
|
|
1245
1174
|
#
|
|
@@ -1472,24 +1401,6 @@ class Chef
|
|
|
1472
1401
|
provider
|
|
1473
1402
|
end
|
|
1474
1403
|
|
|
1475
|
-
# ??? TODO Seems unused. Delete?
|
|
1476
|
-
def noop(tf = nil)
|
|
1477
|
-
if !tf.nil?
|
|
1478
|
-
raise ArgumentError, "noop must be true or false!" unless tf == true || tf == false
|
|
1479
|
-
@noop = tf
|
|
1480
|
-
end
|
|
1481
|
-
@noop
|
|
1482
|
-
end
|
|
1483
|
-
|
|
1484
|
-
# TODO Seems unused. Delete?
|
|
1485
|
-
def is(*args)
|
|
1486
|
-
if args.size == 1
|
|
1487
|
-
args.first
|
|
1488
|
-
else
|
|
1489
|
-
return *args
|
|
1490
|
-
end
|
|
1491
|
-
end
|
|
1492
|
-
|
|
1493
1404
|
#
|
|
1494
1405
|
# Preface an exception message with generic Resource information.
|
|
1495
1406
|
#
|
|
@@ -1567,36 +1478,14 @@ class Chef
|
|
|
1567
1478
|
|
|
1568
1479
|
# @api private
|
|
1569
1480
|
def lookup_provider_constant(name, action = :nothing)
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
end
|
|
1579
|
-
end
|
|
1580
|
-
|
|
1581
|
-
module DeprecatedLWRPClass
|
|
1582
|
-
|
|
1583
|
-
# @api private
|
|
1584
|
-
def register_deprecated_lwrp_class(resource_class, class_name)
|
|
1585
|
-
if Chef::Resource.const_defined?(class_name, false)
|
|
1586
|
-
Chef::Log.warn "#{class_name} already exists! Deprecation class overwrites #{resource_class}"
|
|
1587
|
-
Chef::Resource.send(:remove_const, class_name)
|
|
1588
|
-
end
|
|
1589
|
-
|
|
1590
|
-
if !Chef::Config[:treat_deprecation_warnings_as_errors]
|
|
1591
|
-
Chef::Resource.const_set(class_name, resource_class)
|
|
1592
|
-
Chef::Resource.deprecated_constants[class_name.to_sym] = resource_class
|
|
1593
|
-
end
|
|
1594
|
-
end
|
|
1595
|
-
|
|
1596
|
-
def deprecated_constants
|
|
1597
|
-
raise "Deprecated constants should be called only on Chef::Resource" unless self == Chef::Resource
|
|
1598
|
-
@deprecated_constants ||= {}
|
|
1599
|
-
end
|
|
1481
|
+
# XXX: "name" is probably a poor choice of name here, ideally this would be nil, but we need to
|
|
1482
|
+
# fix resources so that nil or empty names work (also solving the apt_update "doesn't matter one bit"
|
|
1483
|
+
# problem). WARNING: this string is not a public API and should not be referenced (e.g. in provides blocks)
|
|
1484
|
+
# and may change at any time. If you've found this comment you're also probably very lost and should maybe
|
|
1485
|
+
# consider using `declare_resource :whatever` instead of trying to set `provider :whatever` on a resource, or in some
|
|
1486
|
+
# other way reconsider what you're trying to do, since you're likely trying to force a bad design that we
|
|
1487
|
+
# can't/won't support.
|
|
1488
|
+
self.class.resource_for_node(name, node).new("name", run_context).provider_for_action(action).class
|
|
1600
1489
|
end
|
|
1601
1490
|
|
|
1602
1491
|
def self.remove_canonical_dsl
|
|
@@ -1607,7 +1496,6 @@ class Chef
|
|
|
1607
1496
|
end
|
|
1608
1497
|
end
|
|
1609
1498
|
end
|
|
1610
|
-
extend DeprecatedLWRPClass
|
|
1611
1499
|
end
|
|
1612
1500
|
end
|
|
1613
1501
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Lamont Granquist (<lamont@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2015-
|
|
3
|
+
# Copyright:: Copyright 2015-2017, Chef Software Inc.
|
|
4
4
|
# License:: Apache License, Version 2.0
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -43,8 +43,6 @@ class Chef
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def build(&block)
|
|
46
|
-
raise ArgumentError, "You must supply a name when declaring a #{type} resource" if name.nil?
|
|
47
|
-
|
|
48
46
|
@resource = resource_class.new(name, run_context)
|
|
49
47
|
if resource.resource_name.nil?
|
|
50
48
|
raise Chef::Exceptions::InvalidResourceSpecification, "#{resource}.resource_name is `nil`! Did you forget to put `provides :blah` or `resource_name :blah` in your resource class?"
|
|
@@ -52,14 +50,6 @@ class Chef
|
|
|
52
50
|
resource.source_line = created_at
|
|
53
51
|
resource.declared_type = type
|
|
54
52
|
|
|
55
|
-
# If we have a resource like this one, we want to steal its state
|
|
56
|
-
# This behavior is very counter-intuitive and should be removed.
|
|
57
|
-
# See CHEF-3694, https://tickets.opscode.com/browse/CHEF-3694
|
|
58
|
-
# Moved to this location to resolve CHEF-5052, https://tickets.opscode.com/browse/CHEF-5052
|
|
59
|
-
if prior_resource && Chef::Config[:resource_cloning]
|
|
60
|
-
resource.load_from(prior_resource)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
53
|
resource.cookbook_name = cookbook_name
|
|
64
54
|
resource.recipe_name = recipe_name
|
|
65
55
|
# Determine whether this resource is being created in the context of an enclosing Provider
|
|
@@ -79,15 +69,6 @@ class Chef
|
|
|
79
69
|
end
|
|
80
70
|
end
|
|
81
71
|
|
|
82
|
-
# emit a cloned resource warning if it is warranted
|
|
83
|
-
if prior_resource && Chef::Config[:resource_cloning]
|
|
84
|
-
if is_trivial_resource?(prior_resource) && identicalish_resources?(prior_resource, resource)
|
|
85
|
-
emit_harmless_cloning_debug
|
|
86
|
-
else
|
|
87
|
-
emit_cloned_resource_warning
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
72
|
# Run optional resource hook
|
|
92
73
|
resource.after_created
|
|
93
74
|
|
|
@@ -103,51 +84,6 @@ class Chef
|
|
|
103
84
|
@resource_class ||= Chef::Resource.resource_for_node(type, run_context.node)
|
|
104
85
|
end
|
|
105
86
|
|
|
106
|
-
def is_trivial_resource?(resource)
|
|
107
|
-
trivial_resource = resource_class.new(name, run_context)
|
|
108
|
-
# force un-lazy the name property on the created trivial resource
|
|
109
|
-
name_property = resource_class.properties.find { |sym, p| p.name_property? }
|
|
110
|
-
trivial_resource.send(name_property[0]) unless name_property.nil?
|
|
111
|
-
identicalish_resources?(trivial_resource, resource)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# this is an equality test specific to checking for 3694 cloning warnings
|
|
115
|
-
def identicalish_resources?(first, second)
|
|
116
|
-
skipped_ivars = [ :@source_line, :@cookbook_name, :@recipe_name, :@params, :@elapsed_time, :@declared_type ]
|
|
117
|
-
checked_ivars = ( first.instance_variables | second.instance_variables ) - skipped_ivars
|
|
118
|
-
non_matching_ivars = checked_ivars.reject do |iv|
|
|
119
|
-
if iv == :@action && ( [first.instance_variable_get(iv)].flatten == [:nothing] || [second.instance_variable_get(iv)].flatten == [:nothing] )
|
|
120
|
-
# :nothing action on either side of the comparison always matches
|
|
121
|
-
true
|
|
122
|
-
else
|
|
123
|
-
first.instance_variable_get(iv) == second.instance_variable_get(iv)
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
Chef::Log.debug("ivars which did not match with the prior resource: #{non_matching_ivars}")
|
|
127
|
-
non_matching_ivars.empty?
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def emit_cloned_resource_warning
|
|
131
|
-
message = "Cloning resource attributes for #{resource} from prior resource"
|
|
132
|
-
message << "\nPrevious #{prior_resource}: #{prior_resource.source_line}" if prior_resource.source_line
|
|
133
|
-
message << "\nCurrent #{resource}: #{resource.source_line}" if resource.source_line
|
|
134
|
-
Chef.deprecated(:resource_cloning, message)
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def emit_harmless_cloning_debug
|
|
138
|
-
Chef::Log.debug("Harmless resource cloning from #{prior_resource}:#{prior_resource.source_line} to #{resource}:#{resource.source_line}")
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def prior_resource
|
|
142
|
-
@prior_resource ||=
|
|
143
|
-
begin
|
|
144
|
-
key = "#{type}[#{name}]"
|
|
145
|
-
run_context.resource_collection.lookup_local(key)
|
|
146
|
-
rescue Chef::Exceptions::ResourceNotFound
|
|
147
|
-
nil
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
87
|
end
|
|
152
88
|
end
|
|
153
89
|
|
|
@@ -15,14 +15,17 @@
|
|
|
15
15
|
# See the License for the specific language governing permissions and
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
#
|
|
18
|
+
|
|
19
|
+
require "chef/json_compat"
|
|
20
|
+
|
|
18
21
|
class Chef
|
|
19
22
|
class ResourceCollection
|
|
20
23
|
module ResourceCollectionSerialization
|
|
21
24
|
# Serialize this object as a hash
|
|
22
25
|
def to_hash
|
|
23
26
|
instance_vars = Hash.new
|
|
24
|
-
|
|
25
|
-
instance_vars[iv] =
|
|
27
|
+
instance_variables.each do |iv|
|
|
28
|
+
instance_vars[iv] = instance_variable_get(iv)
|
|
26
29
|
end
|
|
27
30
|
{
|
|
28
31
|
"json_class" => self.class.name,
|
|
@@ -39,13 +42,17 @@ class Chef
|
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
module ClassMethods
|
|
42
|
-
def
|
|
43
|
-
collection =
|
|
45
|
+
def from_hash(o)
|
|
46
|
+
collection = new()
|
|
44
47
|
o["instance_vars"].each do |k, v|
|
|
45
48
|
collection.instance_variable_set(k.to_sym, v)
|
|
46
49
|
end
|
|
47
50
|
collection
|
|
48
51
|
end
|
|
52
|
+
|
|
53
|
+
def from_json(j)
|
|
54
|
+
from_hash(Chef::JSONCompat.parse(j))
|
|
55
|
+
end
|
|
49
56
|
end
|
|
50
57
|
|
|
51
58
|
def is_chef_resource!(arg)
|
|
@@ -95,6 +95,12 @@ class Chef
|
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
+
def self.from_hash(o)
|
|
99
|
+
collection = new()
|
|
100
|
+
resources = o["instance_vars"]["@resources"].map { |r| Chef::Resource.from_hash(r) }
|
|
101
|
+
collection.instance_variable_set(:@resources, resources)
|
|
102
|
+
collection
|
|
103
|
+
end
|
|
98
104
|
end
|
|
99
105
|
end
|
|
100
106
|
end
|