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
|
@@ -30,7 +30,7 @@ class Chef
|
|
|
30
30
|
headline = "Chef encountered an error attempting to create the client \"#{node_name}\""
|
|
31
31
|
description = ErrorDescription.new(headline)
|
|
32
32
|
error_inspector.add_explanation(description)
|
|
33
|
-
|
|
33
|
+
description
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def self.node_load_failed(node_name, exception, config)
|
|
@@ -38,7 +38,7 @@ class Chef
|
|
|
38
38
|
headline = "Chef encountered an error attempting to load the node data for \"#{node_name}\""
|
|
39
39
|
description = ErrorDescription.new(headline)
|
|
40
40
|
error_inspector.add_explanation(description)
|
|
41
|
-
|
|
41
|
+
description
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def self.run_list_expand_failed(node, exception)
|
|
@@ -46,7 +46,7 @@ class Chef
|
|
|
46
46
|
headline = "Error expanding the run_list:"
|
|
47
47
|
description = ErrorDescription.new(headline)
|
|
48
48
|
error_inspector.add_explanation(description)
|
|
49
|
-
|
|
49
|
+
description
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def self.cookbook_resolution_failed(expanded_run_list, exception)
|
|
@@ -54,7 +54,7 @@ class Chef
|
|
|
54
54
|
headline = "Error Resolving Cookbooks for Run List:"
|
|
55
55
|
description = ErrorDescription.new(headline)
|
|
56
56
|
error_inspector.add_explanation(description)
|
|
57
|
-
|
|
57
|
+
description
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def self.cookbook_sync_failed(cookbooks, exception)
|
|
@@ -62,7 +62,7 @@ class Chef
|
|
|
62
62
|
headline = "Error Syncing Cookbooks:"
|
|
63
63
|
description = ErrorDescription.new(headline)
|
|
64
64
|
error_inspector.add_explanation(description)
|
|
65
|
-
|
|
65
|
+
description
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def self.resource_failed(resource, action, exception)
|
|
@@ -70,7 +70,7 @@ class Chef
|
|
|
70
70
|
headline = "Error executing action `#{action}` on resource '#{resource}'"
|
|
71
71
|
description = ErrorDescription.new(headline)
|
|
72
72
|
error_inspector.add_explanation(description)
|
|
73
|
-
|
|
73
|
+
description
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
def self.file_load_failed(path, exception)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Edwards (<adamed@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2014-
|
|
3
|
+
# Copyright:: Copyright 2014-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,7 +33,9 @@ class Chef
|
|
|
33
33
|
public
|
|
34
34
|
|
|
35
35
|
def evaluate
|
|
36
|
-
|
|
36
|
+
shell_out_with_systems_locale(@command, @command_opts).status.success?
|
|
37
|
+
# Timeout fails command rather than chef-client run, see:
|
|
38
|
+
# https://tickets.opscode.com/browse/CHEF-2690
|
|
37
39
|
rescue Chef::Exceptions::CommandTimeout
|
|
38
40
|
Chef::Log.warn "Command '#{@command}' timed out"
|
|
39
41
|
false
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright:: Copyright 2017, Chef Software Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require "chef/server_api_versions"
|
|
19
|
+
require "chef/json_compat"
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class HTTP
|
|
23
|
+
# An HTTP middleware to retrieve and store the Chef Server's minimum
|
|
24
|
+
# and maximum supported API versions.
|
|
25
|
+
class APIVersions
|
|
26
|
+
|
|
27
|
+
def initialize(options = {})
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def handle_request(method, url, headers = {}, data = false)
|
|
31
|
+
[method, url, headers, data]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def handle_response(http_response, rest_request, return_value)
|
|
35
|
+
if http_response.code == "406"
|
|
36
|
+
ServerAPIVersions.instance.reset!
|
|
37
|
+
end
|
|
38
|
+
if http_response.key?("x-ops-server-api-version")
|
|
39
|
+
ServerAPIVersions.instance.set_versions(JSONCompat.parse(http_response["x-ops-server-api-version"]))
|
|
40
|
+
end
|
|
41
|
+
[http_response, rest_request, return_value]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def stream_response_handler(response)
|
|
45
|
+
nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def handle_stream_complete(http_response, rest_request, return_value)
|
|
49
|
+
[http_response, rest_request, return_value]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -30,6 +30,8 @@ class Chef
|
|
|
30
30
|
attr_reader :raw_key
|
|
31
31
|
attr_reader :attr_names
|
|
32
32
|
attr_reader :auth_credentials
|
|
33
|
+
attr_reader :version_class
|
|
34
|
+
attr_reader :api_version
|
|
33
35
|
|
|
34
36
|
attr_accessor :sign_request
|
|
35
37
|
|
|
@@ -39,15 +41,12 @@ class Chef
|
|
|
39
41
|
@signing_key_filename = opts[:signing_key_filename]
|
|
40
42
|
@key = load_signing_key(opts[:signing_key_filename], opts[:raw_key])
|
|
41
43
|
@auth_credentials = AuthCredentials.new(opts[:client_name], @key)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
else
|
|
45
|
-
@api_version = DEFAULT_SERVER_API_VERSION
|
|
46
|
-
end
|
|
44
|
+
@version_class = opts[:version_class]
|
|
45
|
+
@api_version = opts[:api_version]
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
def handle_request(method, url, headers = {}, data = false)
|
|
50
|
-
headers["X-Ops-Server-API-Version"] =
|
|
49
|
+
headers["X-Ops-Server-API-Version"] = request_version
|
|
51
50
|
headers.merge!(authentication_headers(method, url, data, headers)) if sign_requests?
|
|
52
51
|
[method, url, headers, data]
|
|
53
52
|
end
|
|
@@ -64,6 +63,16 @@ class Chef
|
|
|
64
63
|
[http_response, rest_request, return_value]
|
|
65
64
|
end
|
|
66
65
|
|
|
66
|
+
def request_version
|
|
67
|
+
if version_class
|
|
68
|
+
version_class.best_request_version
|
|
69
|
+
elsif api_version
|
|
70
|
+
api_version
|
|
71
|
+
else
|
|
72
|
+
DEFAULT_SERVER_API_VERSION
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
67
76
|
def sign_requests?
|
|
68
77
|
auth_credentials.sign_requests? && @sign_request
|
|
69
78
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#--
|
|
2
2
|
# Author:: Daniel DeLeo (<dan@chef.io>)
|
|
3
3
|
# Author:: John Keiser (<jkeiser@chef.io>)
|
|
4
|
-
# Copyright:: Copyright 2013-
|
|
4
|
+
# Copyright:: Copyright 2013-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");
|
|
@@ -61,6 +61,9 @@ class Chef
|
|
|
61
61
|
[http_response, rest_request, return_value]
|
|
62
62
|
else
|
|
63
63
|
Chef::Log.debug("Expected JSON response, but got content-type '#{http_response['content-type']}'")
|
|
64
|
+
if http_response.body
|
|
65
|
+
Chef::Log.debug("Response body contains:\n#{http_response.body.length < 256 ? http_response.body : http_response.body[0..256] + " [...truncated...]"}")
|
|
66
|
+
end
|
|
64
67
|
return [http_response, rest_request, http_response.body.to_s]
|
|
65
68
|
end
|
|
66
69
|
end
|
|
@@ -170,6 +170,7 @@ class Chef
|
|
|
170
170
|
"QUERY_STRING" => url.query,
|
|
171
171
|
"SERVER_PORT" => url.port,
|
|
172
172
|
"HTTP_HOST" => "localhost:#{url.port}",
|
|
173
|
+
"HTTP_X_OPS_SERVER_API_VERSION" => headers["X-Ops-Server-API-Version"],
|
|
173
174
|
"rack.url_scheme" => "chefzero",
|
|
174
175
|
"rack.input" => StringIO.new(body_str),
|
|
175
176
|
}
|
|
@@ -50,7 +50,7 @@ class Chef
|
|
|
50
50
|
|
|
51
51
|
def handle_response(http_response, rest_request, return_value)
|
|
52
52
|
validate(http_response, http_response.body.bytesize) if http_response && http_response.body
|
|
53
|
-
|
|
53
|
+
[http_response, rest_request, return_value]
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def handle_stream_complete(http_response, rest_request, return_value)
|
|
@@ -63,7 +63,7 @@ class Chef
|
|
|
63
63
|
# Make sure the counter is reset since this object might get used
|
|
64
64
|
# again. See CHEF-5100
|
|
65
65
|
@content_length_counter = nil
|
|
66
|
-
|
|
66
|
+
[http_response, rest_request, return_value]
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def stream_response_handler(response)
|
data/lib/chef/http.rb
CHANGED
|
@@ -142,13 +142,26 @@ class Chef
|
|
|
142
142
|
# Makes an HTTP request to +path+ with the given +method+, +headers+, and
|
|
143
143
|
# +data+ (if applicable).
|
|
144
144
|
def request(method, path, headers = {}, data = false)
|
|
145
|
+
http_attempts ||= 0
|
|
145
146
|
url = create_url(path)
|
|
146
147
|
method, url, headers, data = apply_request_middleware(method, url, headers, data)
|
|
147
148
|
|
|
148
149
|
response, rest_request, return_value = send_http_request(method, url, headers, data)
|
|
149
150
|
response, rest_request, return_value = apply_response_middleware(response, rest_request, return_value)
|
|
151
|
+
|
|
150
152
|
response.error! unless success_response?(response)
|
|
151
153
|
return_value
|
|
154
|
+
|
|
155
|
+
rescue Net::HTTPServerException => e
|
|
156
|
+
http_attempts += 1
|
|
157
|
+
response = e.response
|
|
158
|
+
if response.kind_of?(Net::HTTPNotAcceptable) && version_retries - http_attempts > 0
|
|
159
|
+
Chef::Log.debug("Negotiating protocol version with #{url}, retry #{http_attempts}/#{version_retries}")
|
|
160
|
+
sleep(http_retry_delay)
|
|
161
|
+
retry
|
|
162
|
+
else
|
|
163
|
+
raise
|
|
164
|
+
end
|
|
152
165
|
rescue Exception => exception
|
|
153
166
|
log_failed_request(response, return_value) unless response.nil?
|
|
154
167
|
|
|
@@ -159,6 +172,7 @@ class Chef
|
|
|
159
172
|
end
|
|
160
173
|
|
|
161
174
|
def streaming_request_with_progress(path, headers = {}, &progress_block)
|
|
175
|
+
http_attempts ||= 0
|
|
162
176
|
url = create_url(path)
|
|
163
177
|
response, rest_request, return_value = nil, nil, nil
|
|
164
178
|
tempfile = nil
|
|
@@ -177,6 +191,16 @@ class Chef
|
|
|
177
191
|
response.error!
|
|
178
192
|
end
|
|
179
193
|
tempfile
|
|
194
|
+
rescue Net::HTTPServerException => e
|
|
195
|
+
http_attempts += 1
|
|
196
|
+
response = e.response
|
|
197
|
+
if response.kind_of?(Net::HTTPNotAcceptable) && version_retries - http_attempts > 0
|
|
198
|
+
Chef::Log.debug("Negotiating protocol version with #{url}, retry #{http_attempts}/#{version_retries}")
|
|
199
|
+
sleep(http_retry_delay)
|
|
200
|
+
retry
|
|
201
|
+
else
|
|
202
|
+
raise
|
|
203
|
+
end
|
|
180
204
|
rescue Exception => e
|
|
181
205
|
log_failed_request(response, return_value) unless response.nil?
|
|
182
206
|
if e.respond_to?(:chef_rest_request=)
|
|
@@ -195,6 +219,7 @@ class Chef
|
|
|
195
219
|
# @yield [tempfile] block to process the tempfile
|
|
196
220
|
# @yieldparams [tempfile<Tempfile>] tempfile
|
|
197
221
|
def streaming_request(path, headers = {})
|
|
222
|
+
http_attempts ||= 0
|
|
198
223
|
url = create_url(path)
|
|
199
224
|
response, rest_request, return_value = nil, nil, nil
|
|
200
225
|
tempfile = nil
|
|
@@ -222,6 +247,16 @@ class Chef
|
|
|
222
247
|
end
|
|
223
248
|
end
|
|
224
249
|
tempfile
|
|
250
|
+
rescue Net::HTTPServerException => e
|
|
251
|
+
http_attempts += 1
|
|
252
|
+
response = e.response
|
|
253
|
+
if response.kind_of?(Net::HTTPNotAcceptable) && version_retries - http_attempts > 0
|
|
254
|
+
Chef::Log.debug("Negotiating protocol version with #{url}, retry #{http_attempts}/#{version_retries}")
|
|
255
|
+
sleep(http_retry_delay)
|
|
256
|
+
retry
|
|
257
|
+
else
|
|
258
|
+
raise
|
|
259
|
+
end
|
|
225
260
|
rescue Exception => e
|
|
226
261
|
log_failed_request(response, return_value) unless response.nil?
|
|
227
262
|
if e.respond_to?(:chef_rest_request=)
|
|
@@ -413,6 +448,10 @@ class Chef
|
|
|
413
448
|
end
|
|
414
449
|
end
|
|
415
450
|
|
|
451
|
+
def version_retries
|
|
452
|
+
@version_retries ||= options[:version_class].possible_requests
|
|
453
|
+
end
|
|
454
|
+
|
|
416
455
|
# @api private
|
|
417
456
|
def http_retry_delay
|
|
418
457
|
config[:http_retry_delay]
|
data/lib/chef/json_compat.rb
CHANGED
|
@@ -26,32 +26,13 @@ class Chef
|
|
|
26
26
|
class JSONCompat
|
|
27
27
|
JSON_MAX_NESTING = 1000
|
|
28
28
|
|
|
29
|
-
JSON_CLASS = "json_class".freeze
|
|
30
|
-
|
|
31
|
-
CHEF_APICLIENT = "Chef::ApiClient".freeze
|
|
32
|
-
CHEF_CHECKSUM = "Chef::Checksum".freeze
|
|
33
|
-
CHEF_COOKBOOKVERSION = "Chef::CookbookVersion".freeze
|
|
34
|
-
CHEF_DATABAG = "Chef::DataBag".freeze
|
|
35
|
-
CHEF_DATABAGITEM = "Chef::DataBagItem".freeze
|
|
36
|
-
CHEF_ENVIRONMENT = "Chef::Environment".freeze
|
|
37
|
-
CHEF_NODE = "Chef::Node".freeze
|
|
38
|
-
CHEF_ROLE = "Chef::Role".freeze
|
|
39
|
-
CHEF_SANDBOX = "Chef::Sandbox".freeze
|
|
40
|
-
CHEF_RESOURCE = "Chef::Resource".freeze
|
|
41
|
-
CHEF_RESOURCECOLLECTION = "Chef::ResourceCollection".freeze
|
|
42
|
-
CHEF_RESOURCESET = "Chef::ResourceCollection::ResourceSet".freeze
|
|
43
|
-
CHEF_RESOURCELIST = "Chef::ResourceCollection::ResourceList".freeze
|
|
44
|
-
CHEF_RUNLISTEXPANSION = "Chef::RunListExpansion".freeze
|
|
45
|
-
|
|
46
29
|
class <<self
|
|
47
30
|
|
|
48
31
|
# API to use to avoid create_addtions
|
|
49
32
|
def parse(source, opts = {})
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
raise Chef::Exceptions::JSON::ParseError, e.message
|
|
54
|
-
end
|
|
33
|
+
FFI_Yajl::Parser.parse(source, opts)
|
|
34
|
+
rescue FFI_Yajl::ParseError => e
|
|
35
|
+
raise Chef::Exceptions::JSON::ParseError, e.message
|
|
55
36
|
end
|
|
56
37
|
|
|
57
38
|
# Just call the JSON gem's parse method with a modified :max_nesting field
|
|
@@ -65,48 +46,13 @@ class Chef
|
|
|
65
46
|
raise Chef::Exceptions::JSON::ParseError, "Top level JSON object must be a Hash or Array. (actual: #{obj.class})"
|
|
66
47
|
end
|
|
67
48
|
|
|
68
|
-
|
|
69
|
-
# sadly rely on this misfeature) is to "create additions" i.e., convert
|
|
70
|
-
# JSON objects into ruby objects. Explicit :create_additions => false
|
|
71
|
-
# is required to turn it off.
|
|
72
|
-
if opts[:create_additions].nil? || opts[:create_additions]
|
|
73
|
-
map_to_rb_obj(obj)
|
|
74
|
-
else
|
|
75
|
-
obj
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Look at an object that's a basic type (from json parse) and convert it
|
|
80
|
-
# to an instance of Chef classes if desired.
|
|
81
|
-
def map_to_rb_obj(json_obj)
|
|
82
|
-
case json_obj
|
|
83
|
-
when Hash
|
|
84
|
-
mapped_hash = map_hash_to_rb_obj(json_obj)
|
|
85
|
-
if json_obj.has_key?(JSON_CLASS) && (class_to_inflate = class_for_json_class(json_obj[JSON_CLASS]))
|
|
86
|
-
class_to_inflate.json_create(mapped_hash)
|
|
87
|
-
else
|
|
88
|
-
mapped_hash
|
|
89
|
-
end
|
|
90
|
-
when Array
|
|
91
|
-
json_obj.map { |e| map_to_rb_obj(e) }
|
|
92
|
-
else
|
|
93
|
-
json_obj
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def map_hash_to_rb_obj(json_hash)
|
|
98
|
-
json_hash.each do |key, value|
|
|
99
|
-
json_hash[key] = map_to_rb_obj(value)
|
|
100
|
-
end
|
|
101
|
-
json_hash
|
|
49
|
+
obj
|
|
102
50
|
end
|
|
103
51
|
|
|
104
52
|
def to_json(obj, opts = nil)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
raise Chef::Exceptions::JSON::EncodeError, e.message
|
|
109
|
-
end
|
|
53
|
+
FFI_Yajl::Encoder.encode(obj, opts)
|
|
54
|
+
rescue FFI_Yajl::EncodeError => e
|
|
55
|
+
raise Chef::Exceptions::JSON::EncodeError, e.message
|
|
110
56
|
end
|
|
111
57
|
|
|
112
58
|
def to_json_pretty(obj, opts = nil)
|
|
@@ -117,48 +63,6 @@ class Chef
|
|
|
117
63
|
to_json(obj, options_map).chomp
|
|
118
64
|
end
|
|
119
65
|
|
|
120
|
-
# Map +json_class+ to a Class object. We use a +case+ instead of a Hash
|
|
121
|
-
# assigned to a constant because otherwise this file could not be loaded
|
|
122
|
-
# until all the constants were defined, which means you'd have to load
|
|
123
|
-
# the world to get json, which would make knife very slow.
|
|
124
|
-
def class_for_json_class(json_class)
|
|
125
|
-
case json_class
|
|
126
|
-
when CHEF_APICLIENT
|
|
127
|
-
Chef::ApiClient
|
|
128
|
-
when CHEF_CHECKSUM
|
|
129
|
-
Chef::Checksum
|
|
130
|
-
when CHEF_COOKBOOKVERSION
|
|
131
|
-
Chef::CookbookVersion
|
|
132
|
-
when CHEF_DATABAG
|
|
133
|
-
Chef::DataBag
|
|
134
|
-
when CHEF_DATABAGITEM
|
|
135
|
-
Chef::DataBagItem
|
|
136
|
-
when CHEF_ENVIRONMENT
|
|
137
|
-
Chef::Environment
|
|
138
|
-
when CHEF_NODE
|
|
139
|
-
Chef::Node
|
|
140
|
-
when CHEF_ROLE
|
|
141
|
-
Chef::Role
|
|
142
|
-
when CHEF_SANDBOX
|
|
143
|
-
# a falsey return here will disable object inflation/"create
|
|
144
|
-
# additions" in the caller. In Chef 11 this is correct, we just have
|
|
145
|
-
# a dummy Chef::Sandbox class for compat with Chef 10 servers.
|
|
146
|
-
false
|
|
147
|
-
when CHEF_RESOURCE
|
|
148
|
-
Chef::Resource
|
|
149
|
-
when CHEF_RESOURCECOLLECTION
|
|
150
|
-
Chef::ResourceCollection
|
|
151
|
-
when CHEF_RESOURCESET
|
|
152
|
-
Chef::ResourceCollection::ResourceSet
|
|
153
|
-
when CHEF_RESOURCELIST
|
|
154
|
-
Chef::ResourceCollection::ResourceList
|
|
155
|
-
when /^Chef::Resource/
|
|
156
|
-
Chef::Resource.find_descendants_by_name(json_class)
|
|
157
|
-
else
|
|
158
|
-
raise Chef::Exceptions::JSON::ParseError, "Unsupported `json_class` type '#{json_class}'"
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
66
|
end
|
|
163
67
|
end
|
|
164
68
|
end
|
data/lib/chef/key.rb
CHANGED
|
@@ -155,7 +155,7 @@ class Chef
|
|
|
155
155
|
result = chef_rest.post("#{api_base}/#{@actor}/keys", payload)
|
|
156
156
|
# append the private key to the current key if the server returned one,
|
|
157
157
|
# since the POST endpoint just returns uri and private_key if needed.
|
|
158
|
-
new_key =
|
|
158
|
+
new_key = to_hash
|
|
159
159
|
new_key["private_key"] = result["private_key"] if result["private_key"]
|
|
160
160
|
Chef::Key.from_hash(new_key)
|
|
161
161
|
end
|
|
@@ -178,9 +178,9 @@ class Chef
|
|
|
178
178
|
new_key = chef_rest.put("#{api_base}/#{@actor}/keys/#{put_name}", to_hash)
|
|
179
179
|
# if the server returned a public_key, remove the create_key field, as we now have a key
|
|
180
180
|
if new_key["public_key"]
|
|
181
|
-
|
|
181
|
+
delete_create_key
|
|
182
182
|
end
|
|
183
|
-
Chef::Key.from_hash(
|
|
183
|
+
Chef::Key.from_hash(to_hash.merge(new_key))
|
|
184
184
|
end
|
|
185
185
|
|
|
186
186
|
def save
|
|
@@ -222,19 +222,14 @@ class Chef
|
|
|
222
222
|
Chef::Key.from_hash(Chef::JSONCompat.from_json(json))
|
|
223
223
|
end
|
|
224
224
|
|
|
225
|
-
def json_create(json)
|
|
226
|
-
Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::Key#from_json or one of the load_by methods.")
|
|
227
|
-
Chef::Key.from_json(json)
|
|
228
|
-
end
|
|
229
|
-
|
|
230
225
|
def list_by_user(actor, inflate = false)
|
|
231
226
|
keys = Chef::ServerAPI.new(Chef::Config[:chef_server_root]).get("users/#{actor}/keys")
|
|
232
|
-
|
|
227
|
+
list(keys, actor, :load_by_user, inflate)
|
|
233
228
|
end
|
|
234
229
|
|
|
235
230
|
def list_by_client(actor, inflate = false)
|
|
236
231
|
keys = Chef::ServerAPI.new(Chef::Config[:chef_server_url]).get("clients/#{actor}/keys")
|
|
237
|
-
|
|
232
|
+
list(keys, actor, :load_by_client, inflate)
|
|
238
233
|
end
|
|
239
234
|
|
|
240
235
|
def load_by_user(actor, key_name)
|
|
@@ -182,21 +182,21 @@ fi
|
|
|
182
182
|
mkdir -p /etc/chef
|
|
183
183
|
|
|
184
184
|
<% if client_pem -%>
|
|
185
|
-
cat > /etc/chef/client.pem <<EOP
|
|
185
|
+
cat > /etc/chef/client.pem <<'EOP'
|
|
186
186
|
<%= ::File.read(::File.expand_path(client_pem)) %>
|
|
187
187
|
EOP
|
|
188
188
|
chmod 0600 /etc/chef/client.pem
|
|
189
189
|
<% end -%>
|
|
190
190
|
|
|
191
191
|
<% if validation_key -%>
|
|
192
|
-
cat > /etc/chef/validation.pem <<EOP
|
|
192
|
+
cat > /etc/chef/validation.pem <<'EOP'
|
|
193
193
|
<%= validation_key %>
|
|
194
194
|
EOP
|
|
195
195
|
chmod 0600 /etc/chef/validation.pem
|
|
196
196
|
<% end -%>
|
|
197
197
|
|
|
198
198
|
<% if encrypted_data_bag_secret -%>
|
|
199
|
-
cat > /etc/chef/encrypted_data_bag_secret <<EOP
|
|
199
|
+
cat > /etc/chef/encrypted_data_bag_secret <<'EOP'
|
|
200
200
|
<%= encrypted_data_bag_secret %>
|
|
201
201
|
EOP
|
|
202
202
|
chmod 0600 /etc/chef/encrypted_data_bag_secret
|
|
@@ -212,17 +212,17 @@ mkdir -p /etc/chef/trusted_certs
|
|
|
212
212
|
mkdir -p /etc/chef/ohai/hints
|
|
213
213
|
|
|
214
214
|
<% @chef_config[:knife][:hints].each do |name, hash| -%>
|
|
215
|
-
cat > /etc/chef/ohai/hints/<%= name %>.json <<EOP
|
|
215
|
+
cat > /etc/chef/ohai/hints/<%= name %>.json <<'EOP'
|
|
216
216
|
<%= Chef::JSONCompat.to_json(hash) %>
|
|
217
217
|
EOP
|
|
218
218
|
<% end -%>
|
|
219
219
|
<% end -%>
|
|
220
220
|
|
|
221
|
-
cat > /etc/chef/client.rb <<EOP
|
|
221
|
+
cat > /etc/chef/client.rb <<'EOP'
|
|
222
222
|
<%= config_content %>
|
|
223
223
|
EOP
|
|
224
224
|
|
|
225
|
-
cat > /etc/chef/first-boot.json <<EOP
|
|
225
|
+
cat > /etc/chef/first-boot.json <<'EOP'
|
|
226
226
|
<%= Chef::JSONCompat.to_json(first_boot) %>
|
|
227
227
|
EOP
|
|
228
228
|
|
data/lib/chef/knife/bootstrap.rb
CHANGED
|
@@ -67,6 +67,11 @@ class Chef
|
|
|
67
67
|
:description => "The ssh gateway",
|
|
68
68
|
:proc => Proc.new { |key| Chef::Config[:knife][:ssh_gateway] = key }
|
|
69
69
|
|
|
70
|
+
option :ssh_gateway_identity,
|
|
71
|
+
:long => "--ssh-gateway-identity SSH_GATEWAY_IDENTITY",
|
|
72
|
+
:description => "The SSH identity file used for gateway authentication",
|
|
73
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:ssh_gateway_identity] = key }
|
|
74
|
+
|
|
70
75
|
option :forward_agent,
|
|
71
76
|
:short => "-A",
|
|
72
77
|
:long => "--forward-agent",
|
|
@@ -438,6 +443,7 @@ class Chef
|
|
|
438
443
|
ssh.config[:ssh_password] = config[:ssh_password]
|
|
439
444
|
ssh.config[:ssh_port] = config[:ssh_port]
|
|
440
445
|
ssh.config[:ssh_gateway] = config[:ssh_gateway]
|
|
446
|
+
ssh.config[:ssh_gateway_identity] = config[:ssh_gateway_identity]
|
|
441
447
|
ssh.config[:forward_agent] = config[:forward_agent]
|
|
442
448
|
ssh.config[:ssh_identity_file] = config[:ssh_identity_file] || config[:identity_file]
|
|
443
449
|
ssh.config[:manual] = true
|
data/lib/chef/knife/configure.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2009-
|
|
3
|
+
# Copyright:: Copyright 2009-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");
|
|
@@ -75,8 +75,6 @@ class Chef
|
|
|
75
75
|
|
|
76
76
|
::File.open(config[:config_file], "w") do |f|
|
|
77
77
|
f.puts <<-EOH
|
|
78
|
-
log_level :info
|
|
79
|
-
log_location STDOUT
|
|
80
78
|
node_name '#{new_client_name}'
|
|
81
79
|
client_key '#{new_client_key}'
|
|
82
80
|
validation_client_name '#{validation_client_name}'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2009-
|
|
3
|
+
# Copyright:: Copyright 2009-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");
|
|
@@ -34,8 +34,6 @@ class Chef
|
|
|
34
34
|
FileUtils.mkdir_p(@config_dir)
|
|
35
35
|
ui.info("Writing client.rb")
|
|
36
36
|
File.open(File.join(@config_dir, "client.rb"), "w") do |file|
|
|
37
|
-
file.puts("log_level :info")
|
|
38
|
-
file.puts("log_location STDOUT")
|
|
39
37
|
file.puts("chef_server_url '#{Chef::Config[:chef_server_url]}'")
|
|
40
38
|
file.puts("validation_client_name '#{Chef::Config[:validation_client_name]}'")
|
|
41
39
|
end
|