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
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>)
|
|
3
|
+
# Copyright:: Copyright 2008-2016, Chef Software Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require "chef/mixin/shell_out"
|
|
20
|
+
require "rexml/document"
|
|
21
|
+
require "iso8601"
|
|
22
|
+
require "chef/mixin/powershell_out"
|
|
23
|
+
|
|
24
|
+
class Chef
|
|
25
|
+
class Provider
|
|
26
|
+
class WindowsTask < Chef::Provider
|
|
27
|
+
include Chef::Mixin::ShellOut
|
|
28
|
+
include Chef::Mixin::PowershellOut
|
|
29
|
+
|
|
30
|
+
provides :windows_task, os: "windows"
|
|
31
|
+
|
|
32
|
+
def load_current_resource
|
|
33
|
+
@current_resource = Chef::Resource::WindowsTask.new(new_resource.name)
|
|
34
|
+
pathed_task_name = new_resource.task_name.start_with?('\\') ? new_resource.task_name : "\\#{new_resource.task_name}"
|
|
35
|
+
|
|
36
|
+
@current_resource.task_name(pathed_task_name)
|
|
37
|
+
task_hash = load_task_hash(pathed_task_name)
|
|
38
|
+
|
|
39
|
+
set_current_resource(task_hash) if task_hash.respond_to?(:[]) && task_hash[:TaskName] == pathed_task_name
|
|
40
|
+
@current_resource
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def set_current_resource(task_hash)
|
|
44
|
+
@current_resource.exists = true
|
|
45
|
+
@current_resource.command(task_hash[:TaskToRun])
|
|
46
|
+
@current_resource.cwd(task_hash[:StartIn]) unless task_hash[:StartIn] == "N/A"
|
|
47
|
+
@current_resource.user(task_hash[:RunAsUser])
|
|
48
|
+
set_current_run_level task_hash[:run_level]
|
|
49
|
+
set_current_frequency task_hash
|
|
50
|
+
@current_resource.day(task_hash[:day]) if task_hash[:day]
|
|
51
|
+
@current_resource.months(task_hash[:months]) if task_hash[:months]
|
|
52
|
+
set_current_idle_time(task_hash[:idle_time]) if task_hash[:idle_time]
|
|
53
|
+
@current_resource.random_delay(task_hash[:random_delay]) if task_hash[:random_delay]
|
|
54
|
+
@current_resource.execution_time_limit(task_hash[:execution_time_limit]) if task_hash[:execution_time_limit]
|
|
55
|
+
|
|
56
|
+
@current_resource.status = :running if task_hash[:Status] == "Running"
|
|
57
|
+
@current_resource.enabled = true if task_hash[:ScheduledTaskState] == "Enabled"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def action_create
|
|
61
|
+
if @current_resource.exists && !(task_need_update? || @new_resource.force)
|
|
62
|
+
Chef::Log.info "#{@new_resource} task already exists - nothing to do"
|
|
63
|
+
else
|
|
64
|
+
options = {}
|
|
65
|
+
options["F"] = "" if @new_resource.force || task_need_update?
|
|
66
|
+
options["SC"] = schedule
|
|
67
|
+
options["MO"] = @new_resource.frequency_modifier if frequency_modifier_allowed
|
|
68
|
+
options["I"] = @new_resource.idle_time unless @new_resource.idle_time.nil?
|
|
69
|
+
options["SD"] = @new_resource.start_day unless @new_resource.start_day.nil?
|
|
70
|
+
options["ST"] = @new_resource.start_time unless @new_resource.start_time.nil?
|
|
71
|
+
options["TR"] = @new_resource.command
|
|
72
|
+
options["RU"] = @new_resource.user
|
|
73
|
+
options["RP"] = @new_resource.password if use_password?
|
|
74
|
+
options["RL"] = "HIGHEST" if @new_resource.run_level == :highest
|
|
75
|
+
options["IT"] = "" if @new_resource.interactive_enabled
|
|
76
|
+
options["D"] = @new_resource.day if @new_resource.day
|
|
77
|
+
options["M"] = @new_resource.months unless @new_resource.months.nil?
|
|
78
|
+
|
|
79
|
+
run_schtasks "CREATE", options
|
|
80
|
+
xml_options = []
|
|
81
|
+
xml_options << "cwd" if new_resource.cwd
|
|
82
|
+
xml_options << "random_delay" if new_resource.random_delay
|
|
83
|
+
xml_options << "execution_time_limit" if new_resource.execution_time_limit
|
|
84
|
+
update_task_xml(xml_options) unless xml_options.empty?
|
|
85
|
+
|
|
86
|
+
new_resource.updated_by_last_action true
|
|
87
|
+
Chef::Log.info "#{@new_resource} task created"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def action_run
|
|
92
|
+
if @current_resource.exists
|
|
93
|
+
if @current_resource.status == :running
|
|
94
|
+
Chef::Log.info "#{@new_resource} task is currently running, skipping run"
|
|
95
|
+
else
|
|
96
|
+
run_schtasks "RUN"
|
|
97
|
+
new_resource.updated_by_last_action true
|
|
98
|
+
Chef::Log.info "#{@new_resource} task ran"
|
|
99
|
+
end
|
|
100
|
+
else
|
|
101
|
+
Chef::Log.warn "#{@new_resource} task doesn't exists - nothing to do"
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def action_delete
|
|
106
|
+
if @current_resource.exists
|
|
107
|
+
# always need to force deletion
|
|
108
|
+
run_schtasks "DELETE", "F" => ""
|
|
109
|
+
new_resource.updated_by_last_action true
|
|
110
|
+
Chef::Log.info "#{@new_resource} task deleted"
|
|
111
|
+
else
|
|
112
|
+
Chef::Log.warn "#{@new_resource} task doesn't exists - nothing to do"
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def action_end
|
|
117
|
+
if @current_resource.exists
|
|
118
|
+
if @current_resource.status != :running
|
|
119
|
+
Chef::Log.debug "#{@new_resource} is not running - nothing to do"
|
|
120
|
+
else
|
|
121
|
+
run_schtasks "END"
|
|
122
|
+
@new_resource.updated_by_last_action true
|
|
123
|
+
Chef::Log.info "#{@new_resource} task ended"
|
|
124
|
+
end
|
|
125
|
+
else
|
|
126
|
+
Chef::Log.warn "#{@new_resource} task doesn't exist - nothing to do"
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def action_enable
|
|
131
|
+
if @current_resource.exists
|
|
132
|
+
if @current_resource.enabled
|
|
133
|
+
Chef::Log.debug "#{@new_resource} already enabled - nothing to do"
|
|
134
|
+
else
|
|
135
|
+
run_schtasks "CHANGE", "ENABLE" => ""
|
|
136
|
+
@new_resource.updated_by_last_action true
|
|
137
|
+
Chef::Log.info "#{@new_resource} task enabled"
|
|
138
|
+
end
|
|
139
|
+
else
|
|
140
|
+
Chef::Log.fatal "#{@new_resource} task doesn't exist - nothing to do"
|
|
141
|
+
raise Errno::ENOENT, "#{@new_resource}: task does not exist, cannot enable"
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def action_disable
|
|
146
|
+
if @current_resource.exists
|
|
147
|
+
if @current_resource.enabled
|
|
148
|
+
run_schtasks "CHANGE", "DISABLE" => ""
|
|
149
|
+
@new_resource.updated_by_last_action true
|
|
150
|
+
Chef::Log.info "#{@new_resource} task disabled"
|
|
151
|
+
else
|
|
152
|
+
Chef::Log.warn "#{@new_resource} already disabled - nothing to do"
|
|
153
|
+
end
|
|
154
|
+
else
|
|
155
|
+
Chef::Log.warn "#{@new_resource} task doesn't exist - nothing to do"
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
private
|
|
160
|
+
|
|
161
|
+
# rubocop:disable Style/StringLiteralsInInterpolation
|
|
162
|
+
def run_schtasks(task_action, options = {})
|
|
163
|
+
cmd = "schtasks /#{task_action} /TN \"#{@new_resource.task_name}\" "
|
|
164
|
+
options.keys.each do |option|
|
|
165
|
+
cmd += "/#{option} "
|
|
166
|
+
cmd += "\"#{options[option].to_s.gsub('"', "\\\"")}\" " unless options[option] == ""
|
|
167
|
+
end
|
|
168
|
+
Chef::Log.debug("running: ")
|
|
169
|
+
Chef::Log.debug(" #{cmd}")
|
|
170
|
+
shell_out!(cmd, returns: [0])
|
|
171
|
+
end
|
|
172
|
+
# rubocop:enable Style/StringLiteralsInInterpolation
|
|
173
|
+
|
|
174
|
+
def task_need_update?
|
|
175
|
+
return true if @current_resource.command != @new_resource.command.tr("'", '"') ||
|
|
176
|
+
@current_resource.user != @new_resource.user ||
|
|
177
|
+
@current_resource.run_level != @new_resource.run_level ||
|
|
178
|
+
@current_resource.cwd != @new_resource.cwd ||
|
|
179
|
+
@current_resource.frequency_modifier != @new_resource.frequency_modifier ||
|
|
180
|
+
@current_resource.frequency != @new_resource.frequency ||
|
|
181
|
+
@current_resource.idle_time != @new_resource.idle_time ||
|
|
182
|
+
@current_resource.random_delay != @new_resource.random_delay ||
|
|
183
|
+
@current_resource.execution_time_limit != @new_resource.execution_time_limit ||
|
|
184
|
+
!@new_resource.start_day.nil? || !@new_resource.start_time.nil?
|
|
185
|
+
|
|
186
|
+
begin
|
|
187
|
+
return true if @new_resource.day.to_s.casecmp(@current_resource.day.to_s) != 0 ||
|
|
188
|
+
@new_resource.months.to_s.casecmp(@current_resource.months.to_s) != 0
|
|
189
|
+
rescue
|
|
190
|
+
Chef::Log.debug "caught a raise in task_needs_update?"
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
false
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def update_task_xml(options = [])
|
|
197
|
+
# random_delay xml element is different for different frequencies
|
|
198
|
+
random_delay_xml_element = {
|
|
199
|
+
:minute => "Triggers/TimeTrigger/RandomDelay",
|
|
200
|
+
:hourly => "Triggers/TimeTrigger/RandomDelay",
|
|
201
|
+
:once => "Triggers/TimeTrigger/RandomDelay",
|
|
202
|
+
:daily => "Triggers/CalendarTrigger/RandomDelay",
|
|
203
|
+
:weekly => "Triggers/CalendarTrigger/RandomDelay",
|
|
204
|
+
:monthly => "Triggers/CalendarTrigger/RandomDelay",
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
xml_element_mapping = {
|
|
208
|
+
"cwd" => "Actions/Exec/WorkingDirectory",
|
|
209
|
+
"random_delay" => random_delay_xml_element[@new_resource.frequency],
|
|
210
|
+
"execution_time_limit" => "Settings/ExecutionTimeLimit",
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
Chef::Log.debug "looking for existing tasks"
|
|
214
|
+
|
|
215
|
+
task_script = <<-EOH
|
|
216
|
+
[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
|
|
217
|
+
schtasks /Query /TN \"#{@new_resource.task_name}\" /XML
|
|
218
|
+
EOH
|
|
219
|
+
xml_cmd = powershell_out(task_script)
|
|
220
|
+
|
|
221
|
+
return if xml_cmd.exitstatus != 0
|
|
222
|
+
|
|
223
|
+
doc = REXML::Document.new(xml_cmd.stdout)
|
|
224
|
+
|
|
225
|
+
options.each do |option|
|
|
226
|
+
Chef::Log.debug 'Removing former #{option} if any'
|
|
227
|
+
doc.root.elements.delete(xml_element_mapping[option])
|
|
228
|
+
option_value = @new_resource.send("#{option}")
|
|
229
|
+
|
|
230
|
+
if option_value
|
|
231
|
+
Chef::Log.debug "Setting #option as #option_value"
|
|
232
|
+
split_xml_path = xml_element_mapping[option].split("/") # eg. if xml_element_mapping[option] = "Actions/Exec/WorkingDirectory"
|
|
233
|
+
element_name = split_xml_path.last # element_name = "WorkingDirectory"
|
|
234
|
+
cwd_element = REXML::Element.new(element_name)
|
|
235
|
+
cwd_element.add_text(option_value)
|
|
236
|
+
element_root = (split_xml_path - [element_name]).join("/") # element_root = 'Actions/Exec'
|
|
237
|
+
exec_element = doc.root.elements[element_root]
|
|
238
|
+
exec_element.add_element(cwd_element)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
temp_task_file = ::File.join(ENV["TEMP"], "windows_task.xml")
|
|
243
|
+
begin
|
|
244
|
+
::File.open(temp_task_file, "w:UTF-16LE") do |f|
|
|
245
|
+
doc.write(f)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
options = {}
|
|
249
|
+
options["RU"] = @new_resource.user if @new_resource.user
|
|
250
|
+
options["RP"] = @new_resource.password if @new_resource.password
|
|
251
|
+
options["IT"] = "" if @new_resource.interactive_enabled
|
|
252
|
+
options["XML"] = temp_task_file
|
|
253
|
+
|
|
254
|
+
run_schtasks("DELETE", "F" => "")
|
|
255
|
+
run_schtasks("CREATE", options)
|
|
256
|
+
ensure
|
|
257
|
+
::File.delete(temp_task_file)
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def load_task_hash(task_name)
|
|
262
|
+
Chef::Log.debug "Looking for existing tasks"
|
|
263
|
+
|
|
264
|
+
task_script = <<-EOH
|
|
265
|
+
[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
|
|
266
|
+
schtasks /Query /FO LIST /V /TN \"#{task_name}\"
|
|
267
|
+
EOH
|
|
268
|
+
|
|
269
|
+
output = powershell_out(task_script).stdout.force_encoding("UTF-8")
|
|
270
|
+
if output.empty?
|
|
271
|
+
task = false
|
|
272
|
+
else
|
|
273
|
+
task = {}
|
|
274
|
+
|
|
275
|
+
output.split("\n").map! do |line|
|
|
276
|
+
line.split(": ").map!(&:strip)
|
|
277
|
+
end.each do |field|
|
|
278
|
+
if field.is_a?(Array) && field[0].respond_to?(:to_sym)
|
|
279
|
+
key = (field - [field.last]).join(": ")
|
|
280
|
+
task[key.gsub(/\s+/, "").to_sym] = field.last
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
task_xml = load_task_xml task_name
|
|
286
|
+
task.merge!(task_xml) if task && task_xml
|
|
287
|
+
|
|
288
|
+
task
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def load_task_xml(task_name)
|
|
292
|
+
task_script = <<-EOH
|
|
293
|
+
[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
|
|
294
|
+
schtasks /Query /TN \"#{task_name}\" /XML
|
|
295
|
+
EOH
|
|
296
|
+
xml_cmd = powershell_out(task_script)
|
|
297
|
+
|
|
298
|
+
return if xml_cmd.exitstatus != 0
|
|
299
|
+
|
|
300
|
+
doc = REXML::Document.new(xml_cmd.stdout)
|
|
301
|
+
root = doc.root
|
|
302
|
+
|
|
303
|
+
task = {}
|
|
304
|
+
task[:run_level] = root.elements["Principals/Principal/RunLevel"].text if root.elements["Principals/Principal/RunLevel"]
|
|
305
|
+
|
|
306
|
+
# for frequency = :minutes, :hourly
|
|
307
|
+
task[:repetition_interval] = root.elements["Triggers/TimeTrigger/Repetition/Interval"].text if root.elements["Triggers/TimeTrigger/Repetition/Interval"]
|
|
308
|
+
|
|
309
|
+
# for frequency = :daily
|
|
310
|
+
task[:schedule_by_day] = root.elements["Triggers/CalendarTrigger/ScheduleByDay/DaysInterval"].text if root.elements["Triggers/CalendarTrigger/ScheduleByDay/DaysInterval"]
|
|
311
|
+
|
|
312
|
+
# for frequency = :weekly
|
|
313
|
+
task[:schedule_by_week] = root.elements["Triggers/CalendarTrigger/ScheduleByWeek/WeeksInterval"].text if root.elements["Triggers/CalendarTrigger/ScheduleByWeek/WeeksInterval"]
|
|
314
|
+
if root.elements["Triggers/CalendarTrigger/ScheduleByWeek/DaysOfWeek"]
|
|
315
|
+
task[:day] = []
|
|
316
|
+
root.elements["Triggers/CalendarTrigger/ScheduleByWeek/DaysOfWeek"].elements.each do |e|
|
|
317
|
+
task[:day] << e.to_s[0..3].delete("<").delete("/>")
|
|
318
|
+
end
|
|
319
|
+
task[:day] = task[:day].join(", ")
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
# for frequency = :monthly
|
|
323
|
+
task[:schedule_by_month] = root.elements["Triggers/CalendarTrigger/ScheduleByMonth/DaysOfMonth/Day"].text if root.elements["Triggers/CalendarTrigger/ScheduleByMonth/DaysOfMonth/Day"]
|
|
324
|
+
if root.elements["Triggers/CalendarTrigger/ScheduleByMonth/Months"]
|
|
325
|
+
task[:months] = []
|
|
326
|
+
root.elements["Triggers/CalendarTrigger/ScheduleByMonth/Months"].elements.each do |e|
|
|
327
|
+
task[:months] << e.to_s[0..3].delete("<").delete("/>")
|
|
328
|
+
end
|
|
329
|
+
task[:months] = task[:months].join(", ")
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
task[:on_logon] = true if root.elements["Triggers/LogonTrigger"]
|
|
333
|
+
task[:onstart] = true if root.elements["Triggers/BootTrigger"]
|
|
334
|
+
task[:on_idle] = true if root.elements["Triggers/IdleTrigger"]
|
|
335
|
+
|
|
336
|
+
task[:idle_time] = root.elements["Settings/IdleSettings/Duration"].text if root.elements["Settings/IdleSettings/Duration"] && task[:on_idle]
|
|
337
|
+
|
|
338
|
+
task[:once] = true if !(task[:repetition_interval] || task[:schedule_by_day] || task[:schedule_by_week] || task[:schedule_by_month] || task[:on_logon] || task[:onstart] || task[:on_idle])
|
|
339
|
+
task[:execution_time_limit] = root.elements["Settings/ExecutionTimeLimit"].text if root.elements["Settings/ExecutionTimeLimit"] #by default PT72H
|
|
340
|
+
task[:random_delay] = root.elements["Triggers/TimeTrigger/RandomDelay"].text if root.elements["Triggers/TimeTrigger/RandomDelay"]
|
|
341
|
+
task[:random_delay] = root.elements["Triggers/CalendarTrigger/RandomDelay"].text if root.elements["Triggers/CalendarTrigger/RandomDelay"]
|
|
342
|
+
task
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
SYSTEM_USERS = ['NT AUTHORITY\SYSTEM', "SYSTEM", 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\NETWORKSERVICE', 'BUILTIN\USERS', "USERS"].freeze
|
|
346
|
+
|
|
347
|
+
def use_password?
|
|
348
|
+
@use_password ||= !SYSTEM_USERS.include?(@new_resource.user.upcase)
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def schedule
|
|
352
|
+
case @new_resource.frequency
|
|
353
|
+
when :on_logon
|
|
354
|
+
"ONLOGON"
|
|
355
|
+
when :on_idle
|
|
356
|
+
"ONIDLE"
|
|
357
|
+
else
|
|
358
|
+
@new_resource.frequency
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def frequency_modifier_allowed
|
|
363
|
+
case @new_resource.frequency
|
|
364
|
+
when :minute, :hourly, :daily, :weekly
|
|
365
|
+
true
|
|
366
|
+
when :monthly
|
|
367
|
+
@new_resource.months.nil? || %w{ FIRST SECOND THIRD FOURTH LAST LASTDAY }.include?(@new_resource.frequency_modifier)
|
|
368
|
+
else
|
|
369
|
+
false
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
def set_current_run_level(run_level)
|
|
374
|
+
case run_level
|
|
375
|
+
when "HighestAvailable"
|
|
376
|
+
@current_resource.run_level(:highest)
|
|
377
|
+
when "LeastPrivilege"
|
|
378
|
+
@current_resource.run_level(:limited)
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def set_current_frequency(task_hash)
|
|
383
|
+
if task_hash[:repetition_interval]
|
|
384
|
+
duration = ISO8601::Duration.new(task_hash[:repetition_interval])
|
|
385
|
+
if task_hash[:repetition_interval].include?("M")
|
|
386
|
+
@current_resource.frequency(:minute)
|
|
387
|
+
@current_resource.frequency_modifier(duration.minutes.atom.to_i)
|
|
388
|
+
elsif task_hash[:repetition_interval].include?("H")
|
|
389
|
+
@current_resource.frequency(:hourly)
|
|
390
|
+
@current_resource.frequency_modifier(duration.hours.atom.to_i)
|
|
391
|
+
end
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
if task_hash[:schedule_by_day]
|
|
395
|
+
@current_resource.frequency(:daily)
|
|
396
|
+
@current_resource.frequency_modifier(task_hash[:schedule_by_day].to_i)
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
if task_hash[:schedule_by_week]
|
|
400
|
+
@current_resource.frequency(:weekly)
|
|
401
|
+
@current_resource.frequency_modifier(task_hash[:schedule_by_week].to_i)
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
@current_resource.frequency(:monthly) if task_hash[:schedule_by_month]
|
|
405
|
+
@current_resource.frequency(:on_logon) if task_hash[:on_logon]
|
|
406
|
+
@current_resource.frequency(:onstart) if task_hash[:onstart]
|
|
407
|
+
@current_resource.frequency(:on_idle) if task_hash[:on_idle]
|
|
408
|
+
@current_resource.frequency(:once) if task_hash[:once]
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def set_current_idle_time(idle_time)
|
|
412
|
+
duration = ISO8601::Duration.new(idle_time)
|
|
413
|
+
@current_resource.idle_time(duration.minutes.atom.to_i)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Thom May (<thom@chef.io>)
|
|
3
|
-
# Copyright:: Copyright (c) 2016 Chef Software
|
|
3
|
+
# Copyright:: Copyright (c) 2016-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");
|
|
@@ -26,17 +26,14 @@ require "chef/provider/noop"
|
|
|
26
26
|
class Chef
|
|
27
27
|
class Provider
|
|
28
28
|
class YumRepository < Chef::Provider
|
|
29
|
-
use_inline_resources
|
|
30
|
-
|
|
31
29
|
extend Chef::Mixin::Which
|
|
32
30
|
|
|
33
31
|
provides :yum_repository do
|
|
34
32
|
which "yum"
|
|
35
33
|
end
|
|
36
34
|
|
|
37
|
-
def
|
|
38
|
-
|
|
39
|
-
def load_current_resource; end
|
|
35
|
+
def load_current_resource
|
|
36
|
+
end
|
|
40
37
|
|
|
41
38
|
action :create do
|
|
42
39
|
declare_resource(:template, "/etc/yum.repos.d/#{new_resource.repositoryid}.repo") do
|
data/lib/chef/provider.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-2016, 2009-
|
|
4
|
+
# Copyright:: Copyright 2008-2016, 2009-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");
|
|
@@ -51,6 +51,32 @@ class Chef
|
|
|
51
51
|
true
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
# Defines an action method on the provider, running the block to compile the
|
|
55
|
+
# resources, converging them, and then checking if any were updated (and
|
|
56
|
+
# updating new-resource if so)
|
|
57
|
+
#
|
|
58
|
+
# @since 13.0
|
|
59
|
+
# @param name [String, Symbol] Name of the action to define.
|
|
60
|
+
# @param block [Proc] Body of the action.
|
|
61
|
+
# @return [void]
|
|
62
|
+
def self.action(name, &block)
|
|
63
|
+
# We need the block directly in a method so that `super` works.
|
|
64
|
+
define_method("compile_action_#{name}", &block)
|
|
65
|
+
class_eval <<-EOM
|
|
66
|
+
def action_#{name}
|
|
67
|
+
compile_and_converge_action { compile_action_#{name} }
|
|
68
|
+
end
|
|
69
|
+
EOM
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Deprecation stub for the old use_inline_resources mode.
|
|
73
|
+
#
|
|
74
|
+
# @return [void]
|
|
75
|
+
def self.use_inline_resources
|
|
76
|
+
# Uncomment this in Chef 13.6.
|
|
77
|
+
# Chef.deprecated(:use_inline_resources, "The use_inline_resources mode is no longer optional and the line enabling it can be removed")
|
|
78
|
+
end
|
|
79
|
+
|
|
54
80
|
#--
|
|
55
81
|
# TODO: this should be a reader, and the action should be passed in the
|
|
56
82
|
# constructor; however, many/most subclasses override the constructor so
|
|
@@ -75,7 +101,7 @@ class Chef
|
|
|
75
101
|
end
|
|
76
102
|
|
|
77
103
|
def whyrun_supported?
|
|
78
|
-
|
|
104
|
+
true
|
|
79
105
|
end
|
|
80
106
|
|
|
81
107
|
def node
|
|
@@ -176,6 +202,22 @@ class Chef
|
|
|
176
202
|
converge_actions.add_action(descriptions, &block)
|
|
177
203
|
end
|
|
178
204
|
|
|
205
|
+
# Create a child run_context, compile the block, and converge it.
|
|
206
|
+
#
|
|
207
|
+
# @api private
|
|
208
|
+
def compile_and_converge_action(&block)
|
|
209
|
+
old_run_context = run_context
|
|
210
|
+
@run_context = run_context.create_child
|
|
211
|
+
return_value = instance_eval(&block)
|
|
212
|
+
Chef::Runner.new(run_context).converge
|
|
213
|
+
return_value
|
|
214
|
+
ensure
|
|
215
|
+
if run_context.resource_collection.any? { |r| r.updated? }
|
|
216
|
+
new_resource.updated_by_last_action(true)
|
|
217
|
+
end
|
|
218
|
+
@run_context = old_run_context
|
|
219
|
+
end
|
|
220
|
+
|
|
179
221
|
#
|
|
180
222
|
# Handle patchy convergence safely.
|
|
181
223
|
#
|
|
@@ -267,15 +309,15 @@ class Chef
|
|
|
267
309
|
# @param include_resource_dsl [Boolean] Whether to include resource DSL or
|
|
268
310
|
# not (defaults to `false`).
|
|
269
311
|
#
|
|
270
|
-
def self.include_resource_dsl
|
|
271
|
-
|
|
312
|
+
def self.include_resource_dsl?
|
|
313
|
+
false
|
|
272
314
|
end
|
|
273
315
|
|
|
274
316
|
# Create the resource DSL module that forwards resource methods to new_resource
|
|
275
317
|
#
|
|
276
318
|
# @api private
|
|
277
319
|
def self.include_resource_dsl_module(resource)
|
|
278
|
-
if
|
|
320
|
+
if include_resource_dsl? && !defined?(@included_resource_dsl_module)
|
|
279
321
|
provider_class = self
|
|
280
322
|
@included_resource_dsl_module = Module.new do
|
|
281
323
|
extend Forwardable
|
|
@@ -286,10 +328,26 @@ class Chef
|
|
|
286
328
|
resource.class.properties.each do |name, property|
|
|
287
329
|
class_eval(<<-EOM, __FILE__, __LINE__)
|
|
288
330
|
def #{name}(*args, &block)
|
|
331
|
+
# FIXME: DEPRECATE THIS IN CHEF 13.1
|
|
332
|
+
#
|
|
289
333
|
# If no arguments were passed, we process "get" by defaulting
|
|
290
334
|
# the value to current_resource, not new_resource. This helps
|
|
291
335
|
# avoid issues where resources accidentally overwrite perfectly
|
|
292
336
|
# valid stuff with default values.
|
|
337
|
+
#
|
|
338
|
+
# This magic is to make this kind of thing easy:
|
|
339
|
+
#
|
|
340
|
+
# FileUtils.chown new_resource.mode.nil? ? current_resource.mode : new_resource.mode, new_resource.path
|
|
341
|
+
#
|
|
342
|
+
# We do this in the file provider where we need to construct a new filesystem object and
|
|
343
|
+
# when the new_resource is nil/default that means "preserve the current stuff" and does not
|
|
344
|
+
# mean to ignore it which will wind up defaulting to changing the file to have a "root"
|
|
345
|
+
# ownership if anything else changes. Its kind of overly clever and magical, and most likely
|
|
346
|
+
# gets the use case wrong where someone has a property that they really mean to default to
|
|
347
|
+
# some value which /should/ get set if its left as the default and where the default is
|
|
348
|
+
# meant to be declarative. Instead of property_is_set? we should most likely be using
|
|
349
|
+
# nil? but we're going to deprecate all of it anyway. Just type out what you really mean longhand.
|
|
350
|
+
#
|
|
293
351
|
if args.empty? && !block
|
|
294
352
|
if !new_resource.property_is_set?(__method__) && current_resource
|
|
295
353
|
return current_resource.public_send(__method__)
|
|
@@ -310,89 +368,6 @@ class Chef
|
|
|
310
368
|
end
|
|
311
369
|
end
|
|
312
370
|
|
|
313
|
-
# Enables inline evaluation of resources in provider actions.
|
|
314
|
-
#
|
|
315
|
-
# Without this option, any resources declared inside the Provider are added
|
|
316
|
-
# to the resource collection after the current position at the time the
|
|
317
|
-
# action is executed. Because they are added to the primary resource
|
|
318
|
-
# collection for the chef run, they can notify other resources outside
|
|
319
|
-
# the Provider, and potentially be notified by resources outside the Provider
|
|
320
|
-
# (but this is complicated by the fact that they don't exist until the
|
|
321
|
-
# provider executes). In this mode, it is impossible to correctly set the
|
|
322
|
-
# updated_by_last_action flag on the parent Provider resource, since it
|
|
323
|
-
# executes and returns before its component resources are run.
|
|
324
|
-
#
|
|
325
|
-
# With this option enabled, each action creates a temporary run_context
|
|
326
|
-
# with its own resource collection, evaluates the action's code in that
|
|
327
|
-
# context, and then converges the resources created. If any resources
|
|
328
|
-
# were updated, then this provider's new_resource will be marked updated.
|
|
329
|
-
#
|
|
330
|
-
# In this mode, resources created within the Provider cannot interact with
|
|
331
|
-
# external resources via notifies, though notifications to other
|
|
332
|
-
# resources within the Provider will work. Delayed notifications are executed
|
|
333
|
-
# at the conclusion of the provider's action, *not* at the end of the
|
|
334
|
-
# main chef run.
|
|
335
|
-
#
|
|
336
|
-
# This mode of evaluation is experimental, but is believed to be a better
|
|
337
|
-
# set of tradeoffs than the append-after mode, so it will likely become
|
|
338
|
-
# the default in a future major release of Chef.
|
|
339
|
-
#
|
|
340
|
-
def self.use_inline_resources
|
|
341
|
-
extend InlineResources::ClassMethods
|
|
342
|
-
include InlineResources
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
# Chef::Provider::InlineResources
|
|
346
|
-
# Implementation of inline resource convergence for providers. See
|
|
347
|
-
# Provider.use_inline_resources for a longer explanation.
|
|
348
|
-
#
|
|
349
|
-
# This code is restricted to a module so that it can be selectively
|
|
350
|
-
# applied to providers on an opt-in basis.
|
|
351
|
-
#
|
|
352
|
-
# @api private
|
|
353
|
-
module InlineResources
|
|
354
|
-
|
|
355
|
-
# Create a child run_context, compile the block, and converge it.
|
|
356
|
-
#
|
|
357
|
-
# @api private
|
|
358
|
-
def compile_and_converge_action(&block)
|
|
359
|
-
old_run_context = run_context
|
|
360
|
-
@run_context = run_context.create_child
|
|
361
|
-
return_value = instance_eval(&block)
|
|
362
|
-
Chef::Runner.new(run_context).converge
|
|
363
|
-
return_value
|
|
364
|
-
ensure
|
|
365
|
-
if run_context.resource_collection.any? { |r| r.updated? }
|
|
366
|
-
new_resource.updated_by_last_action(true)
|
|
367
|
-
end
|
|
368
|
-
@run_context = old_run_context
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
# Class methods for InlineResources. Overrides the `action` DSL method
|
|
372
|
-
# with one that enables inline resource convergence.
|
|
373
|
-
#
|
|
374
|
-
# @api private
|
|
375
|
-
module ClassMethods
|
|
376
|
-
# Defines an action method on the provider, running the block to
|
|
377
|
-
# compile the resources, converging them, and then checking if any
|
|
378
|
-
# were updated (and updating new-resource if so)
|
|
379
|
-
def action(name, &block)
|
|
380
|
-
# We need the block directly in a method so that `super` works
|
|
381
|
-
define_method("compile_action_#{name}", &block)
|
|
382
|
-
# We try hard to use `def` because define_method doesn't show the method name in the stack.
|
|
383
|
-
begin
|
|
384
|
-
class_eval <<-EOM
|
|
385
|
-
def action_#{name}
|
|
386
|
-
compile_and_converge_action { compile_action_#{name} }
|
|
387
|
-
end
|
|
388
|
-
EOM
|
|
389
|
-
rescue SyntaxError
|
|
390
|
-
define_method("action_#{name}") { send("compile_action_#{name}") }
|
|
391
|
-
end
|
|
392
|
-
end
|
|
393
|
-
end
|
|
394
|
-
end
|
|
395
|
-
|
|
396
371
|
protected
|
|
397
372
|
|
|
398
373
|
def converge_actions
|
|
@@ -421,33 +396,6 @@ class Chef
|
|
|
421
396
|
end
|
|
422
397
|
end
|
|
423
398
|
|
|
424
|
-
module DeprecatedLWRPClass
|
|
425
|
-
def const_missing(class_name)
|
|
426
|
-
if Chef::Provider.deprecated_constants[class_name.to_sym]
|
|
427
|
-
Chef.deprecated(:custom_resource, "Using an LWRP provider by its name (#{class_name}) directly is no longer supported in Chef 12 and will be removed. Use Chef::ProviderResolver.new(node, resource, action) instead.")
|
|
428
|
-
Chef::Provider.deprecated_constants[class_name.to_sym]
|
|
429
|
-
else
|
|
430
|
-
raise NameError, "uninitialized constant Chef::Provider::#{class_name}"
|
|
431
|
-
end
|
|
432
|
-
end
|
|
433
|
-
|
|
434
|
-
# @api private
|
|
435
|
-
def register_deprecated_lwrp_class(provider_class, class_name)
|
|
436
|
-
# Register Chef::Provider::MyProvider with deprecation warnings if you
|
|
437
|
-
# try to access it
|
|
438
|
-
if Chef::Provider.const_defined?(class_name, false)
|
|
439
|
-
Chef::Log.warn "Chef::Provider::#{class_name} already exists! Cannot create deprecation class for #{provider_class}"
|
|
440
|
-
else
|
|
441
|
-
Chef::Provider.deprecated_constants[class_name.to_sym] = provider_class
|
|
442
|
-
end
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
def deprecated_constants
|
|
446
|
-
raise "Deprecated constants should be called only on Chef::Provider" unless self == Chef::Provider
|
|
447
|
-
@deprecated_constants ||= {}
|
|
448
|
-
end
|
|
449
|
-
end
|
|
450
|
-
extend DeprecatedLWRPClass
|
|
451
399
|
end
|
|
452
400
|
end
|
|
453
401
|
|