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/deprecated.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#--
|
|
2
|
-
# Copyright:: Copyright 2016 Chef Software
|
|
2
|
+
# Copyright:: Copyright 2016-2017, Chef Software Inc.
|
|
3
3
|
# License:: Apache License, Version 2.0
|
|
4
4
|
#
|
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -66,36 +66,38 @@ class Chef
|
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
class
|
|
69
|
+
class InternalApi < Base
|
|
70
70
|
def id
|
|
71
|
-
|
|
71
|
+
0
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
def target
|
|
75
|
-
"
|
|
75
|
+
"internal_api.html"
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
class
|
|
79
|
+
class JsonAutoInflate < Base
|
|
80
80
|
def id
|
|
81
|
-
|
|
81
|
+
1
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def target
|
|
85
|
-
"
|
|
85
|
+
"json_auto_inflate.html"
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
-
class
|
|
89
|
+
class ExitCode < Base
|
|
90
90
|
def id
|
|
91
|
-
|
|
91
|
+
2
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
def target
|
|
95
|
-
"
|
|
95
|
+
"exit_code.html"
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
+
# id 3 has been deleted
|
|
100
|
+
|
|
99
101
|
class Attributes < Base
|
|
100
102
|
def id
|
|
101
103
|
4
|
|
@@ -156,6 +158,36 @@ class Chef
|
|
|
156
158
|
end
|
|
157
159
|
end
|
|
158
160
|
|
|
161
|
+
class DnfPackageAllowDowngrade < Base
|
|
162
|
+
def id
|
|
163
|
+
10
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def target
|
|
167
|
+
"dnf_package_allow_downgrade.html"
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
class PropertyNameCollision < Base
|
|
172
|
+
def id
|
|
173
|
+
11
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def target
|
|
177
|
+
"property_name_collision.html"
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class LaunchdHashProperty < Base
|
|
182
|
+
def id
|
|
183
|
+
12
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def target
|
|
187
|
+
"launchd_hash_property.html"
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
159
191
|
class ChefPlatformMethods < Base
|
|
160
192
|
def id
|
|
161
193
|
13
|
|
@@ -176,36 +208,38 @@ class Chef
|
|
|
176
208
|
end
|
|
177
209
|
end
|
|
178
210
|
|
|
179
|
-
class
|
|
211
|
+
class PackageMisc < Base
|
|
180
212
|
def id
|
|
181
|
-
|
|
213
|
+
15
|
|
182
214
|
end
|
|
183
215
|
|
|
184
216
|
def target
|
|
185
|
-
"
|
|
217
|
+
"package_misc.html"
|
|
186
218
|
end
|
|
187
219
|
end
|
|
188
220
|
|
|
189
|
-
class
|
|
221
|
+
class MultiresourceMatch < Base
|
|
190
222
|
def id
|
|
191
|
-
|
|
223
|
+
16
|
|
192
224
|
end
|
|
193
225
|
|
|
194
226
|
def target
|
|
195
|
-
"
|
|
227
|
+
"multiresource_match.html"
|
|
196
228
|
end
|
|
197
229
|
end
|
|
198
230
|
|
|
199
|
-
class
|
|
231
|
+
class UseInlineResources < Base
|
|
200
232
|
def id
|
|
201
|
-
|
|
233
|
+
17
|
|
202
234
|
end
|
|
203
235
|
|
|
204
236
|
def target
|
|
205
|
-
"
|
|
237
|
+
"use_inline_resources.html"
|
|
206
238
|
end
|
|
207
239
|
end
|
|
208
240
|
|
|
241
|
+
# id 3694 was deleted
|
|
242
|
+
|
|
209
243
|
class Generic < Base
|
|
210
244
|
def url
|
|
211
245
|
"https://docs.chef.io/chef_deprecations_client.html"
|
data/lib/chef/dsl/audit.rb
CHANGED
|
@@ -38,8 +38,8 @@ class Chef
|
|
|
38
38
|
cookbook_name = self.cookbook_name
|
|
39
39
|
metadata = {
|
|
40
40
|
cookbook_name: cookbook_name,
|
|
41
|
-
cookbook_version:
|
|
42
|
-
recipe_name:
|
|
41
|
+
cookbook_version: run_context.cookbook_collection[cookbook_name].version,
|
|
42
|
+
recipe_name: recipe_name,
|
|
43
43
|
line_number: block.source_location[1],
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#--
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
3
|
# Author:: Christopher Walters
|
|
4
|
-
# Copyright:: Copyright 2008-
|
|
4
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
|
5
5
|
# License:: Apache License, Version 2.0
|
|
6
6
|
#
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -117,7 +117,7 @@ class Chef
|
|
|
117
117
|
# cookbook_name: cookbook_name
|
|
118
118
|
# end
|
|
119
119
|
#
|
|
120
|
-
def edit_resource!(type, name, created_at
|
|
120
|
+
def edit_resource!(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block)
|
|
121
121
|
resource = find_resource!(type, name, run_context: run_context)
|
|
122
122
|
if resource_attrs_block
|
|
123
123
|
if defined?(new_resource)
|
|
@@ -152,10 +152,10 @@ class Chef
|
|
|
152
152
|
# end
|
|
153
153
|
# resource.variables.merge!({ home: "/home/klowns" })
|
|
154
154
|
#
|
|
155
|
-
def edit_resource(type, name, created_at
|
|
156
|
-
edit_resource!(type, name, created_at, run_context: run_context, &resource_attrs_block)
|
|
155
|
+
def edit_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block)
|
|
156
|
+
edit_resource!(type, name, created_at: created_at, run_context: run_context, &resource_attrs_block)
|
|
157
157
|
rescue Chef::Exceptions::ResourceNotFound
|
|
158
|
-
declare_resource(type, name, created_at, run_context: run_context, &resource_attrs_block)
|
|
158
|
+
declare_resource(type, name, created_at: created_at, run_context: run_context, &resource_attrs_block)
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
# Lookup a resource in the resource collection by name. If the resource is not
|
|
@@ -207,7 +207,7 @@ class Chef
|
|
|
207
207
|
find_resource!(type, name, run_context: run_context)
|
|
208
208
|
rescue Chef::Exceptions::ResourceNotFound
|
|
209
209
|
if resource_attrs_block
|
|
210
|
-
declare_resource(type, name, created_at, run_context: run_context, &resource_attrs_block)
|
|
210
|
+
declare_resource(type, name, created_at: created_at, run_context: run_context, &resource_attrs_block)
|
|
211
211
|
end # returns nil otherwise
|
|
212
212
|
end
|
|
213
213
|
|
|
@@ -236,18 +236,12 @@ class Chef
|
|
|
236
236
|
# action :delete
|
|
237
237
|
# end
|
|
238
238
|
#
|
|
239
|
-
def declare_resource(type, name, created_at
|
|
239
|
+
def declare_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block)
|
|
240
240
|
created_at ||= caller[0]
|
|
241
241
|
|
|
242
|
-
|
|
243
|
-
Chef::Log.deprecation "build_resource with a create_if_missing flag is deprecated, use edit_resource instead"
|
|
244
|
-
# midly goofy since we call edit_resource only to re-call ourselves, but that's why its deprecated...
|
|
245
|
-
return edit_resource(type, name, created_at, run_context: run_context, &resource_attrs_block)
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
resource = build_resource(type, name, created_at, &resource_attrs_block)
|
|
242
|
+
resource = build_resource(type, name, created_at: created_at, &resource_attrs_block)
|
|
249
243
|
|
|
250
|
-
run_context.resource_collection.insert(resource, resource_type:
|
|
244
|
+
run_context.resource_collection.insert(resource, resource_type: resource.declared_type, instance_name: resource.name)
|
|
251
245
|
resource
|
|
252
246
|
end
|
|
253
247
|
|
|
@@ -272,7 +266,7 @@ class Chef
|
|
|
272
266
|
# action :delete
|
|
273
267
|
# end
|
|
274
268
|
#
|
|
275
|
-
def build_resource(type, name, created_at
|
|
269
|
+
def build_resource(type, name, created_at: nil, run_context: self.run_context, &resource_attrs_block)
|
|
276
270
|
created_at ||= caller[0]
|
|
277
271
|
|
|
278
272
|
# this needs to be lazy in order to avoid circular dependencies since ResourceBuilder
|
|
@@ -287,7 +281,7 @@ class Chef
|
|
|
287
281
|
run_context: run_context,
|
|
288
282
|
cookbook_name: cookbook_name,
|
|
289
283
|
recipe_name: recipe_name,
|
|
290
|
-
enclosing_provider:
|
|
284
|
+
enclosing_provider: is_a?(Chef::Provider) ? self : nil
|
|
291
285
|
).build(&resource_attrs_block)
|
|
292
286
|
end
|
|
293
287
|
end
|
|
@@ -68,41 +68,39 @@ class Chef
|
|
|
68
68
|
private
|
|
69
69
|
|
|
70
70
|
def match_versions(node)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
key_matches << k
|
|
81
|
-
end
|
|
82
|
-
rescue Chef::Exceptions::InvalidVersionConstraint => e
|
|
83
|
-
Chef::Log.debug "Caught InvalidVersionConstraint. This means that a key in value_for_platform cannot be interpreted as a Chef::VersionConstraint::Platform."
|
|
84
|
-
Chef::Log.debug(e)
|
|
71
|
+
platform, version = node[:platform].to_s, node[:platform_version].to_s
|
|
72
|
+
return nil unless @values.key?(platform)
|
|
73
|
+
node_version = Chef::Version::Platform.new(version)
|
|
74
|
+
key_matches = []
|
|
75
|
+
keys = @values[platform].keys
|
|
76
|
+
keys.each do |k|
|
|
77
|
+
begin
|
|
78
|
+
if Chef::VersionConstraint::Platform.new(k).include?(node_version)
|
|
79
|
+
key_matches << k
|
|
85
80
|
end
|
|
81
|
+
rescue Chef::Exceptions::InvalidVersionConstraint => e
|
|
82
|
+
Chef::Log.debug "Caught InvalidVersionConstraint. This means that a key in value_for_platform cannot be interpreted as a Chef::VersionConstraint::Platform."
|
|
83
|
+
Chef::Log.debug(e)
|
|
86
84
|
end
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
when 1
|
|
92
|
-
return @values[platform][key_matches.first]
|
|
93
|
-
else
|
|
94
|
-
raise "Multiple matches detected for #{platform} with values #{@values}. The matches are: #{key_matches}"
|
|
95
|
-
end
|
|
96
|
-
rescue Chef::Exceptions::InvalidCookbookVersion => e
|
|
97
|
-
# Lets not break because someone passes a weird string like 'default' :)
|
|
98
|
-
Chef::Log.debug(e)
|
|
99
|
-
Chef::Log.debug "InvalidCookbookVersion exceptions are common and expected here: the generic constraint matcher attempted to match something which is not a constraint. Moving on to next version or constraint"
|
|
100
|
-
return nil
|
|
101
|
-
rescue Chef::Exceptions::InvalidPlatformVersion => e
|
|
102
|
-
Chef::Log.debug "Caught InvalidPlatformVersion, this means that Chef::Version::Platform does not know how to turn #{node_version} into an x.y.z format"
|
|
103
|
-
Chef::Log.debug(e)
|
|
85
|
+
end
|
|
86
|
+
return @values[platform][version] if key_matches.include?(version)
|
|
87
|
+
case key_matches.length
|
|
88
|
+
when 0
|
|
104
89
|
return nil
|
|
90
|
+
when 1
|
|
91
|
+
return @values[platform][key_matches.first]
|
|
92
|
+
else
|
|
93
|
+
raise "Multiple matches detected for #{platform} with values #{@values}. The matches are: #{key_matches}"
|
|
105
94
|
end
|
|
95
|
+
rescue Chef::Exceptions::InvalidCookbookVersion => e
|
|
96
|
+
# Lets not break because someone passes a weird string like 'default' :)
|
|
97
|
+
Chef::Log.debug(e)
|
|
98
|
+
Chef::Log.debug "InvalidCookbookVersion exceptions are common and expected here: the generic constraint matcher attempted to match something which is not a constraint. Moving on to next version or constraint"
|
|
99
|
+
return nil
|
|
100
|
+
rescue Chef::Exceptions::InvalidPlatformVersion => e
|
|
101
|
+
Chef::Log.debug "Caught InvalidPlatformVersion, this means that Chef::Version::Platform does not know how to turn #{node_version} into an x.y.z format"
|
|
102
|
+
Chef::Log.debug(e)
|
|
103
|
+
return nil
|
|
106
104
|
end
|
|
107
105
|
|
|
108
106
|
def set(platforms, value)
|
|
@@ -30,7 +30,7 @@ class Chef
|
|
|
30
30
|
# Note that we will silently miss any other platform-specific reboot notices besides Windows+Ubuntu.
|
|
31
31
|
def reboot_pending?
|
|
32
32
|
# don't break when used as a mixin in contexts without #node (e.g. specs).
|
|
33
|
-
if
|
|
33
|
+
if respond_to?(:node, true) && node.run_context.reboot_requested?
|
|
34
34
|
true
|
|
35
35
|
elsif platform?("windows")
|
|
36
36
|
# PendingFileRenameOperations contains pairs (REG_MULTI_SZ) of filenames that cannot be updated
|
data/lib/chef/dsl/recipe.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#--
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
3
|
# Author:: Christopher Walters (<cw@chef.io>)
|
|
4
|
-
# Copyright:: Copyright 2008-
|
|
4
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
|
5
5
|
# License:: Apache License, Version 2.0
|
|
6
6
|
#
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -27,7 +27,6 @@ require "chef/dsl/reboot_pending"
|
|
|
27
27
|
require "chef/dsl/audit"
|
|
28
28
|
require "chef/dsl/powershell"
|
|
29
29
|
require "chef/dsl/core"
|
|
30
|
-
require "chef/dsl/method_missing"
|
|
31
30
|
require "chef/mixin/lazy_module_include"
|
|
32
31
|
|
|
33
32
|
class Chef
|
|
@@ -60,8 +59,6 @@ class Chef
|
|
|
60
59
|
include Chef::DSL::Powershell
|
|
61
60
|
include Chef::DSL::Resources
|
|
62
61
|
include Chef::DSL::Definitions
|
|
63
|
-
# method_missing will disappear in Chef 13
|
|
64
|
-
include Chef::DSL::MethodMissing
|
|
65
62
|
extend Chef::Mixin::LazyModuleInclude
|
|
66
63
|
|
|
67
64
|
def resource_class_for(snake_case_name)
|
data/lib/chef/dsl/resources.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: John Keiser <jkeiser@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");
|
|
@@ -33,20 +33,11 @@ class Chef
|
|
|
33
33
|
include Chef::DSL::ChefProvisioning
|
|
34
34
|
|
|
35
35
|
def self.add_resource_dsl(dsl_name)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Chef.deprecated(:internal_api, "Cannot create resource #{dsl_name} with more than one argument. All arguments except the name (\#{args[0].inspect}) will be ignored. This will cause an error in Chef 13. Arguments: \#{args}") if args.size > 1
|
|
40
|
-
declare_resource(#{dsl_name.inspect}, args[0], caller[0], &block)
|
|
36
|
+
module_eval(<<-EOM, __FILE__, __LINE__ + 1)
|
|
37
|
+
def #{dsl_name}(args = nil, &block)
|
|
38
|
+
declare_resource(#{dsl_name.inspect}, args, created_at: caller[0], &block)
|
|
41
39
|
end
|
|
42
40
|
EOM
|
|
43
|
-
rescue SyntaxError
|
|
44
|
-
# Handle the case where dsl_name has spaces, etc.
|
|
45
|
-
define_method(dsl_name.to_sym) do |*args, &block|
|
|
46
|
-
Chef.deprecated(:internal_api, "Cannot create resource #{dsl_name} with more than one argument. All arguments except the name (#{args[0].inspect}) will be ignored. This will cause an error in Chef 13. Arguments: #{args}") if args.size > 1
|
|
47
|
-
declare_resource(dsl_name, args[0], caller[0], &block)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
41
|
end
|
|
51
42
|
|
|
52
43
|
def self.remove_resource_dsl(dsl_name)
|
|
@@ -121,8 +121,8 @@ class Chef::EncryptedDataBagItem
|
|
|
121
121
|
#
|
|
122
122
|
def self.load(data_bag, name, secret = nil)
|
|
123
123
|
raw_hash = Chef::DataBagItem.load(data_bag, name)
|
|
124
|
-
secret ||=
|
|
125
|
-
|
|
124
|
+
secret ||= load_secret
|
|
125
|
+
new(raw_hash, secret)
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
def self.load_secret(path = nil)
|
data/lib/chef/environment.rb
CHANGED
|
@@ -216,11 +216,6 @@ class Chef
|
|
|
216
216
|
end
|
|
217
217
|
end
|
|
218
218
|
|
|
219
|
-
def self.json_create(o)
|
|
220
|
-
Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::Environment#from_hash")
|
|
221
|
-
from_hash(o)
|
|
222
|
-
end
|
|
223
|
-
|
|
224
219
|
def self.from_hash(o)
|
|
225
220
|
environment = new
|
|
226
221
|
environment.name(o["name"])
|
|
@@ -247,7 +242,7 @@ class Chef
|
|
|
247
242
|
if Chef::Config[:solo_legacy_mode]
|
|
248
243
|
load_from_file(name)
|
|
249
244
|
else
|
|
250
|
-
|
|
245
|
+
from_hash(chef_server_rest.get("environments/#{name}"))
|
|
251
246
|
end
|
|
252
247
|
end
|
|
253
248
|
|
|
@@ -309,17 +304,15 @@ class Chef
|
|
|
309
304
|
end
|
|
310
305
|
|
|
311
306
|
def self.validate_cookbook_version(version)
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
true
|
|
319
|
-
end
|
|
320
|
-
rescue ArgumentError
|
|
321
|
-
false
|
|
307
|
+
if Chef::Config[:solo_legacy_mode]
|
|
308
|
+
raise Chef::Exceptions::IllegalVersionConstraint,
|
|
309
|
+
"Environment cookbook version constraints not allowed in chef-solo"
|
|
310
|
+
else
|
|
311
|
+
Chef::VersionConstraint.new version
|
|
312
|
+
true
|
|
322
313
|
end
|
|
314
|
+
rescue ArgumentError
|
|
315
|
+
false
|
|
323
316
|
end
|
|
324
317
|
|
|
325
318
|
end
|
|
@@ -195,6 +195,22 @@ class Chef
|
|
|
195
195
|
def lwrp_load_complete
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
+
# Called when an ohai plugin file loading starts
|
|
199
|
+
def ohai_plugin_load_start(file_count)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Called when an ohai plugin file has been loaded
|
|
203
|
+
def ohai_plugin_file_loaded(path)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Called when an ohai plugin file has an error on load.
|
|
207
|
+
def ohai_plugin_file_load_failed(path, exception)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Called when an ohai plugin file loading has finished
|
|
211
|
+
def ohai_plugin_load_complete
|
|
212
|
+
end
|
|
213
|
+
|
|
198
214
|
# Called before attribute files are loaded
|
|
199
215
|
def attribute_load_start(attribute_file_count)
|
|
200
216
|
end
|
data/lib/chef/exceptions.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
3
|
# Author:: Seth Falcon (<seth@chef.io>)
|
|
4
4
|
# Author:: Kyle Goodwin (<kgoodwin@primerevenue.com>)
|
|
5
|
-
# Copyright:: Copyright 2008-
|
|
5
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
|
6
6
|
# License:: Apache License, Version 2.0
|
|
7
7
|
#
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -47,6 +47,7 @@ class Chef
|
|
|
47
47
|
class Cron < RuntimeError; end
|
|
48
48
|
class Env < RuntimeError; end
|
|
49
49
|
class Exec < RuntimeError; end
|
|
50
|
+
class Execute < RuntimeError; end
|
|
50
51
|
class ErlCall < RuntimeError; end
|
|
51
52
|
class FileNotFound < RuntimeError; end
|
|
52
53
|
class Package < RuntimeError; end
|
|
@@ -58,14 +59,6 @@ class Chef
|
|
|
58
59
|
class UnsupportedAction < RuntimeError; end
|
|
59
60
|
class MissingLibrary < RuntimeError; end
|
|
60
61
|
|
|
61
|
-
class DeprecatedExitCode < RuntimeError
|
|
62
|
-
def initalize
|
|
63
|
-
super "Exiting with a non RFC 062 Exit Code."
|
|
64
|
-
require "chef/application/exit_code"
|
|
65
|
-
Chef::Application::ExitCode.notify_deprecated_exit_code
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
62
|
class CannotDetermineNodeName < RuntimeError
|
|
70
63
|
def initialize
|
|
71
64
|
super "Unable to determine node name: configure node_name or configure the system's hostname and fqdn"
|
|
@@ -315,7 +308,7 @@ class Chef
|
|
|
315
308
|
|
|
316
309
|
def raise!
|
|
317
310
|
unless empty?
|
|
318
|
-
raise
|
|
311
|
+
raise for_raise
|
|
319
312
|
end
|
|
320
313
|
end
|
|
321
314
|
|
|
@@ -525,5 +518,8 @@ This error is most often caused by network issues (proxies, etc) outside of chef
|
|
|
525
518
|
super "Found multiple matching resources. #{matches_info.join("\n")}"
|
|
526
519
|
end
|
|
527
520
|
end
|
|
521
|
+
|
|
522
|
+
# exception specific to invalid usage of 'dsc_resource' resource
|
|
523
|
+
class DSCModuleNameMissing < ArgumentError; end
|
|
528
524
|
end
|
|
529
525
|
end
|
|
@@ -80,19 +80,19 @@ class Chef
|
|
|
80
80
|
if target_uid.nil?
|
|
81
81
|
# the user has not specified a permission on the new resource, so we never manage it with FAC
|
|
82
82
|
Chef::Log.debug("Found target_uid == nil, so no owner was specified on resource, not managing owner")
|
|
83
|
-
|
|
83
|
+
false
|
|
84
84
|
elsif current_uid.nil?
|
|
85
85
|
# the user has specified a permission, and we are creating a file, so always enforce permissions
|
|
86
86
|
Chef::Log.debug("Found current_uid == nil, so we are creating a new file, updating owner")
|
|
87
|
-
|
|
87
|
+
true
|
|
88
88
|
elsif target_uid != current_uid
|
|
89
89
|
# the user has specified a permission, and it does not match the file, so fix the permission
|
|
90
90
|
Chef::Log.debug("Found target_uid != current_uid, updating owner")
|
|
91
|
-
|
|
91
|
+
true
|
|
92
92
|
else
|
|
93
93
|
Chef::Log.debug("Found target_uid == current_uid, not updating owner")
|
|
94
94
|
# the user has specified a permission, but it matches the file, so behave idempotently
|
|
95
|
-
|
|
95
|
+
false
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
@@ -139,19 +139,19 @@ class Chef
|
|
|
139
139
|
if target_gid.nil?
|
|
140
140
|
# the user has not specified a permission on the new resource, so we never manage it with FAC
|
|
141
141
|
Chef::Log.debug("Found target_gid == nil, so no group was specified on resource, not managing group")
|
|
142
|
-
|
|
142
|
+
false
|
|
143
143
|
elsif current_gid.nil?
|
|
144
144
|
# the user has specified a permission, and we are creating a file, so always enforce permissions
|
|
145
145
|
Chef::Log.debug("Found current_gid == nil, so we are creating a new file, updating group")
|
|
146
|
-
|
|
146
|
+
true
|
|
147
147
|
elsif target_gid != current_gid
|
|
148
148
|
# the user has specified a permission, and it does not match the file, so fix the permission
|
|
149
149
|
Chef::Log.debug("Found target_gid != current_gid, updating group")
|
|
150
|
-
|
|
150
|
+
true
|
|
151
151
|
else
|
|
152
152
|
Chef::Log.debug("Found target_gid == current_gid, not updating group")
|
|
153
153
|
# the user has specified a permission, but it matches the file, so behave idempotently
|
|
154
|
-
|
|
154
|
+
false
|
|
155
155
|
end
|
|
156
156
|
end
|
|
157
157
|
|
|
@@ -188,21 +188,21 @@ class Chef
|
|
|
188
188
|
if target_mode.nil?
|
|
189
189
|
# the user has not specified a permission on the new resource, so we never manage it with FAC
|
|
190
190
|
Chef::Log.debug("Found target_mode == nil, so no mode was specified on resource, not managing mode")
|
|
191
|
-
|
|
191
|
+
false
|
|
192
192
|
elsif current_mode.nil?
|
|
193
193
|
# the user has specified a permission, and we are creating a file, so always enforce permissions
|
|
194
194
|
Chef::Log.debug("Found current_mode == nil, so we are creating a new file, updating mode")
|
|
195
|
-
|
|
195
|
+
true
|
|
196
196
|
elsif target_mode != current_mode
|
|
197
197
|
# the user has specified a permission, and it does not match the file, so fix the permission
|
|
198
198
|
Chef::Log.debug("Found target_mode != current_mode, updating mode")
|
|
199
|
-
|
|
199
|
+
true
|
|
200
200
|
elsif suid_bit_set? && (should_update_group? || should_update_owner?)
|
|
201
|
-
|
|
201
|
+
true
|
|
202
202
|
else
|
|
203
203
|
Chef::Log.debug("Found target_mode == current_mode, not updating mode")
|
|
204
204
|
# the user has specified a permission, but it matches the file, so behave idempotently
|
|
205
|
-
|
|
205
|
+
false
|
|
206
206
|
end
|
|
207
207
|
end
|
|
208
208
|
|
|
@@ -283,7 +283,7 @@ class Chef
|
|
|
283
283
|
end
|
|
284
284
|
|
|
285
285
|
def suid_bit_set?
|
|
286
|
-
|
|
286
|
+
target_mode & 04000 > 0
|
|
287
287
|
end
|
|
288
288
|
end
|
|
289
289
|
end
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
# limitations under the License.
|
|
18
18
|
#
|
|
19
19
|
|
|
20
|
+
require "chef/version"
|
|
21
|
+
|
|
20
22
|
class Chef
|
|
21
23
|
module Formatters
|
|
22
24
|
# == Formatters::ErrorDescription
|
|
@@ -45,7 +47,7 @@ class Chef
|
|
|
45
47
|
display_section(heading, text, out)
|
|
46
48
|
end
|
|
47
49
|
end
|
|
48
|
-
display_section("
|
|
50
|
+
display_section("System Info:", error_context_info, out)
|
|
49
51
|
end
|
|
50
52
|
|
|
51
53
|
def for_json
|
|
@@ -64,6 +66,21 @@ class Chef
|
|
|
64
66
|
out.puts "\n"
|
|
65
67
|
end
|
|
66
68
|
|
|
69
|
+
def error_context_info
|
|
70
|
+
context_info = { chef_version: Chef::VERSION }
|
|
71
|
+
if Chef.node
|
|
72
|
+
context_info[:platform] = Chef.node["platform"]
|
|
73
|
+
context_info[:platform_version] = Chef.node["platform_version"]
|
|
74
|
+
end
|
|
75
|
+
# A string like "ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]"
|
|
76
|
+
context_info[:ruby] = RUBY_DESCRIPTION
|
|
77
|
+
# The argv[0] value.
|
|
78
|
+
context_info[:program_name] = $PROGRAM_NAME
|
|
79
|
+
# This is kind of wonky but it's the only way to get the entry path script.
|
|
80
|
+
context_info[:executable] = File.realpath(caller.last[/^(.*):\d+:in /, 1])
|
|
81
|
+
context_info.map { |k, v| "#{k}=#{v}" }.join("\n")
|
|
82
|
+
end
|
|
83
|
+
|
|
67
84
|
end
|
|
68
85
|
end
|
|
69
86
|
end
|
|
@@ -172,11 +172,10 @@ E
|
|
|
172
172
|
# .../lib/ruby/1.9.1/net/http.rb:2709:in `read_body'
|
|
173
173
|
# .../lib/ruby/1.9.1/net/http.rb:2736:in `body'
|
|
174
174
|
# .../lib/chef/formatters/error_inspectors/api_error_formatting.rb:91:in `rescue in format_rest_error'
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
end
|
|
175
|
+
|
|
176
|
+
exception.response.body
|
|
177
|
+
rescue Exception
|
|
178
|
+
"Cannot fetch the contents of the response."
|
|
180
179
|
end
|
|
181
180
|
|
|
182
181
|
end
|