chef 16.2.44-universal-mingw32 → 16.4.35-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -4
- data/Rakefile +3 -16
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +4 -3
- data/lib/chef/action_collection.rb +4 -0
- data/lib/chef/api_client/registration.rb +2 -2
- data/lib/chef/application.rb +13 -1
- data/lib/chef/application/apply.rb +6 -5
- data/lib/chef/application/windows_service.rb +27 -27
- data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
- data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
- data/lib/chef/chef_class.rb +0 -1
- data/lib/chef/chef_fs/chef_fs_data_store.rb +54 -54
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -2
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +1 -5
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
- data/lib/chef/client.rb +14 -14
- data/lib/chef/cookbook/remote_file_vendor.rb +1 -3
- data/lib/chef/cookbook/syntax_check.rb +1 -2
- data/lib/chef/cookbook_loader.rb +15 -29
- data/lib/chef/data_bag.rb +1 -2
- data/lib/chef/data_collector/run_end_message.rb +11 -1
- data/lib/chef/deprecated.rb +8 -0
- data/lib/chef/digester.rb +3 -2
- data/lib/chef/dsl/platform_introspection.rb +9 -7
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
- data/lib/chef/environment.rb +3 -4
- data/lib/chef/exceptions.rb +4 -1
- data/lib/chef/file_access_control/windows.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
- data/lib/chef/file_content_management/tempfile.rb +9 -9
- data/lib/chef/handler.rb +2 -0
- data/lib/chef/http.rb +12 -12
- data/lib/chef/http/authenticator.rb +3 -1
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/knife.rb +4 -4
- data/lib/chef/knife/bootstrap.rb +18 -15
- data/lib/chef/knife/bootstrap/train_connector.rb +1 -0
- data/lib/chef/knife/config_get.rb +1 -0
- data/lib/chef/knife/config_list_profiles.rb +4 -1
- data/lib/chef/knife/config_use_profile.rb +15 -5
- data/lib/chef/knife/configure.rb +1 -1
- data/lib/chef/knife/cookbook_download.rb +1 -1
- data/lib/chef/knife/cookbook_metadata.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +29 -37
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +3 -2
- data/lib/chef/knife/core/subcommand_loader.rb +20 -1
- data/lib/chef/knife/core/ui.rb +8 -2
- data/lib/chef/knife/core/windows_bootstrap_context.rb +33 -26
- data/lib/chef/knife/delete.rb +15 -15
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/rehash.rb +3 -21
- data/lib/chef/knife/ssh.rb +11 -7
- data/lib/chef/knife/xargs.rb +19 -19
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/log.rb +7 -2
- data/lib/chef/mixin/checksum.rb +0 -1
- data/{spec/functional/resource/base.rb → lib/chef/mixin/chef_utils_wiring.rb} +24 -12
- data/lib/chef/mixin/deep_merge.rb +35 -6
- data/{spec/unit/log_spec.rb → lib/chef/mixin/default_paths.rb} +13 -5
- data/lib/chef/mixin/openssl_helper.rb +30 -6
- data/lib/chef/mixin/path_sanity.rb +5 -4
- data/lib/chef/mixin/shell_out.rb +4 -188
- data/lib/chef/mixin/template.rb +1 -0
- data/lib/chef/mixin/which.rb +6 -3
- data/lib/chef/mixins.rb +1 -0
- data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
- data/lib/chef/node.rb +36 -12
- data/lib/chef/node/attribute.rb +2 -4
- data/lib/chef/node_map.rb +21 -18
- data/lib/chef/platform/service_helpers.rb +31 -28
- data/lib/chef/property.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +0 -2
- data/lib/chef/provider/git.rb +17 -9
- data/lib/chef/provider/group.rb +0 -2
- data/lib/chef/provider/group/suse.rb +5 -5
- data/lib/chef/provider/ifconfig.rb +1 -4
- data/lib/chef/provider/mount.rb +0 -2
- data/lib/chef/provider/mount/solaris.rb +0 -1
- data/lib/chef/provider/package.rb +0 -2
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/snap.rb +3 -4
- data/lib/chef/provider/package/windows.rb +9 -4
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -9
- data/lib/chef/provider/package/zypper.rb +0 -1
- data/lib/chef/provider/powershell_script.rb +21 -5
- data/lib/chef/provider/route.rb +1 -1
- data/lib/chef/provider/service.rb +2 -2
- data/lib/chef/provider/service/arch.rb +1 -1
- data/lib/chef/provider/service/debian.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +1 -4
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +10 -10
- data/lib/chef/provider/systemd_unit.rb +0 -2
- data/lib/chef/provider/template/content.rb +1 -0
- data/lib/chef/provider/user/dscl.rb +2 -2
- data/lib/chef/provider/user/mac.rb +9 -9
- data/lib/chef/provider/windows_task.rb +0 -3
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +1 -2
- data/lib/chef/providers.rb +0 -1
- data/lib/chef/recipe.rb +1 -1
- data/lib/chef/resource.rb +9 -11
- data/lib/chef/resource/alternatives.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +1 -10
- data/lib/chef/resource/build_essential.rb +2 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +1 -1
- data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
- data/lib/chef/resource/chef_gem.rb +57 -21
- data/lib/chef/resource/chef_vault_secret.rb +13 -13
- data/lib/chef/resource/chocolatey_feature.rb +1 -2
- data/lib/chef/resource/cron/cron_d.rb +1 -1
- data/lib/chef/resource/cron_access.rb +2 -2
- data/lib/chef/resource/dmg_package.rb +2 -2
- data/lib/chef/resource/execute.rb +4 -5
- data/lib/chef/resource/gem_package.rb +35 -2
- data/lib/chef/resource/homebrew_update.rb +2 -2
- data/lib/chef/resource/hostname.rb +18 -18
- data/lib/chef/resource/launchd.rb +1 -1
- data/lib/chef/resource/lwrp_base.rb +1 -0
- data/lib/chef/resource/macos_userdefaults.rb +176 -61
- data/lib/chef/resource/openssl_dhparam.rb +2 -0
- data/lib/chef/resource/openssl_ec_private_key.rb +2 -0
- data/lib/chef/resource/openssl_ec_public_key.rb +2 -0
- data/lib/chef/resource/openssl_rsa_private_key.rb +2 -0
- data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
- data/lib/chef/resource/openssl_x509_certificate.rb +35 -35
- data/lib/chef/resource/openssl_x509_crl.rb +3 -2
- data/lib/chef/resource/openssl_x509_request.rb +23 -20
- data/lib/chef/resource/osx_profile.rb +227 -5
- data/lib/chef/resource/powershell_package_source.rb +1 -1
- data/lib/chef/resource/powershell_script.rb +24 -30
- data/lib/chef/resource/service.rb +2 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +16 -1
- data/lib/chef/resource/sudo.rb +31 -4
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/sysctl.rb +5 -5
- data/lib/chef/resource/timezone.rb +15 -0
- data/lib/chef/resource/user_ulimit.rb +1 -1
- data/lib/chef/resource/windows_ad_join.rb +2 -0
- data/lib/chef/resource/windows_audit_policy.rb +3 -0
- data/lib/chef/resource/windows_auto_run.rb +2 -0
- data/lib/chef/resource/windows_certificate.rb +2 -0
- data/lib/chef/resource/windows_dfs_folder.rb +2 -0
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
- data/lib/chef/resource/windows_dfs_server.rb +2 -0
- data/lib/chef/resource/windows_dns_record.rb +25 -5
- data/lib/chef/resource/windows_dns_zone.rb +12 -7
- data/lib/chef/resource/windows_feature.rb +2 -0
- data/lib/chef/resource/windows_feature_dism.rb +10 -0
- data/lib/chef/resource/windows_feature_powershell.rb +14 -2
- data/lib/chef/resource/windows_firewall_profile.rb +199 -0
- data/lib/chef/resource/windows_firewall_rule.rb +5 -3
- data/lib/chef/resource/windows_font.rb +3 -1
- data/lib/chef/resource/windows_pagefile.rb +4 -0
- data/lib/chef/resource/windows_printer.rb +17 -18
- data/lib/chef/resource/windows_printer_port.rb +14 -13
- data/lib/chef/resource/windows_security_policy.rb +52 -21
- data/lib/chef/resource/windows_share.rb +5 -3
- data/lib/chef/resource/windows_shortcut.rb +2 -0
- data/lib/chef/resource/windows_uac.rb +2 -0
- data/lib/chef/resource/windows_user_privilege.rb +27 -2
- data/lib/chef/resource/windows_workgroup.rb +2 -3
- data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
- data/lib/chef/resource_inspector.rb +7 -1
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/role.rb +3 -4
- data/lib/chef/run_context/cookbook_compiler.rb +20 -20
- data/lib/chef/run_status.rb +2 -6
- data/lib/chef/server_api_versions.rb +4 -0
- data/lib/chef/shell.rb +1 -1
- data/lib/chef/shell/shell_session.rb +2 -0
- data/lib/chef/util/backup.rb +1 -1
- data/lib/chef/util/diff.rb +11 -12
- data/lib/chef/util/powershell/cmdlet.rb +1 -1
- data/lib/chef/version.rb +2 -2
- data/lib/chef/win32/file.rb +2 -2
- data/lib/chef/win32/file/version_info.rb +5 -5
- data/lib/chef/win32/registry.rb +1 -2
- data/spec/data/ssl/chef-rspec.cert +15 -15
- data/spec/functional/knife/configure_spec.rb +1 -1
- data/spec/functional/knife/ssh_spec.rb +5 -16
- data/spec/functional/resource/aix_service_spec.rb +9 -2
- data/spec/functional/resource/aixinit_service_spec.rb +8 -9
- data/spec/functional/resource/apt_package_spec.rb +0 -1
- data/spec/functional/resource/bash_spec.rb +3 -2
- data/spec/functional/resource/bff_spec.rb +3 -3
- data/spec/functional/resource/chocolatey_package_spec.rb +4 -0
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +10 -2
- data/spec/functional/resource/dnf_package_spec.rb +4 -1
- data/spec/functional/resource/dsc_resource_spec.rb +1 -1
- data/spec/functional/resource/dsc_script_spec.rb +0 -1
- data/spec/functional/resource/execute_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +23 -1
- data/spec/functional/resource/group_spec.rb +21 -9
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +7 -7
- data/spec/functional/resource/link_spec.rb +22 -25
- data/spec/functional/resource/mount_spec.rb +9 -1
- data/spec/functional/resource/msu_package_spec.rb +9 -3
- data/spec/functional/resource/powershell_script_spec.rb +8 -8
- data/spec/functional/resource/remote_file_spec.rb +7 -13
- data/spec/functional/resource/rpm_spec.rb +3 -3
- data/spec/functional/resource/timezone_spec.rb +2 -0
- data/spec/functional/resource/windows_certificate_spec.rb +3 -3
- data/spec/functional/resource/windows_font_spec.rb +49 -0
- data/spec/functional/resource/windows_package_spec.rb +0 -1
- data/spec/functional/resource/windows_path_spec.rb +4 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -4
- data/spec/functional/resource/windows_service_spec.rb +4 -0
- data/spec/functional/resource/windows_task_spec.rb +4 -3
- data/spec/functional/resource/windows_user_privilege_spec.rb +1 -2
- data/spec/functional/resource/yum_package_spec.rb +4 -1
- data/spec/functional/resource/zypper_package_spec.rb +4 -1
- data/spec/functional/run_lock_spec.rb +26 -25
- data/spec/functional/shell_spec.rb +5 -6
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/crypto_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +8 -8
- data/spec/functional/win32/service_manager_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +12 -12
- data/spec/integration/knife/config_get_profile_spec.rb +69 -68
- data/spec/integration/knife/config_get_spec.rb +126 -125
- data/spec/integration/knife/config_list_profiles_spec.rb +181 -152
- data/spec/integration/knife/config_use_profile_spec.rb +115 -61
- data/spec/integration/knife/cookbook_upload_spec.rb +28 -1
- data/spec/integration/knife/data_bag_from_file_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +3 -1
- data/spec/integration/knife/download_spec.rb +3 -1
- data/spec/integration/knife/environment_from_file_spec.rb +1 -1
- data/spec/integration/knife/node_from_file_spec.rb +1 -1
- data/spec/integration/knife/role_from_file_spec.rb +1 -1
- data/spec/integration/knife/serve_spec.rb +5 -5
- data/spec/integration/knife/upload_spec.rb +3 -1
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +2 -2
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +1 -1
- data/spec/integration/recipes/notifying_block_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +5 -1
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
- data/spec/integration/recipes/resource_load_spec.rb +4 -2
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +1 -1
- data/spec/scripts/ssl-serve.rb +1 -1
- data/spec/spec_helper.rb +16 -10
- data/spec/support/chef_helpers.rb +1 -20
- data/spec/support/platform_helpers.rb +9 -11
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/directory_resource.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/file_resource.rb +20 -21
- data/spec/support/shared/functional/securable_resource.rb +1 -2
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +5 -5
- data/spec/support/shared/integration/integration_helper.rb +22 -52
- data/spec/support/shared/integration/knife_support.rb +2 -9
- data/spec/support/shared/unit/application_dot_d.rb +0 -1
- data/spec/support/shared/unit/provider/file.rb +12 -8
- data/spec/support/shared/unit/script_resource.rb +6 -20
- data/spec/support/shared/unit/windows_script_resource.rb +15 -28
- data/spec/unit/application/solo_spec.rb +4 -2
- data/spec/unit/application_spec.rb +4 -2
- data/spec/unit/chef_fs/config_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +8 -8
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +2 -4
- data/spec/unit/chef_fs/{parallelizer.rb → parallelizer_spec.rb} +1 -1
- data/spec/unit/client_spec.rb +4 -1
- data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +26 -24
- data/spec/unit/data_bag_spec.rb +6 -3
- data/spec/unit/data_collector_spec.rb +23 -1
- data/spec/unit/decorator_spec.rb +23 -23
- data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
- data/spec/unit/environment_spec.rb +12 -8
- data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
- data/spec/unit/guard_interpreter_spec.rb +1 -1
- data/spec/unit/http/api_versions_spec.rb +20 -2
- data/spec/unit/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +17 -20
- data/spec/unit/knife/cookbook_download_spec.rb +6 -6
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- data/spec/unit/knife/cookbook_show_spec.rb +6 -7
- data/spec/unit/knife/cookbook_upload_spec.rb +7 -10
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +3 -3
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +21 -12
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -1
- data/spec/unit/knife/supermarket_share_spec.rb +1 -1
- data/spec/unit/log/syslog_spec.rb +6 -10
- data/spec/unit/log/winevt_spec.rb +21 -13
- data/spec/unit/lwrp_spec.rb +9 -6
- data/spec/unit/mixin/{path_sanity_spec.rb → default_paths_spec.rb} +14 -14
- data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
- data/spec/unit/mixin/powershell_out_spec.rb +2 -4
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +0 -1
- data/spec/unit/mixin/shell_out_spec.rb +25 -26
- data/spec/unit/mixin/subclass_directive_spec.rb +2 -2
- data/spec/unit/mixin/template_spec.rb +30 -30
- data/spec/unit/mixin/unformatter_spec.rb +2 -2
- data/spec/unit/mixin/uris_spec.rb +1 -1
- data/spec/unit/mixin/which.rb +8 -0
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
- data/spec/unit/node/immutable_collections_spec.rb +6 -2
- data/spec/unit/node_spec.rb +103 -16
- data/spec/unit/property_spec.rb +5 -5
- data/spec/unit/provider/batch_spec.rb +1 -1
- data/spec/unit/provider/cron/unix_spec.rb +1 -1
- data/spec/unit/provider/dsc_resource_spec.rb +22 -38
- data/spec/unit/provider/dsc_script_spec.rb +10 -10
- data/spec/unit/provider/execute_spec.rb +1 -8
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/ifconfig_spec.rb +0 -1
- data/spec/unit/provider/mdadm_spec.rb +1 -3
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
- data/spec/unit/provider/package/openbsd_spec.rb +1 -1
- data/spec/unit/provider/package/pacman_spec.rb +17 -20
- data/spec/unit/provider/package/rubygems_spec.rb +5 -10
- data/spec/unit/provider/package/smartos_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +30 -53
- data/spec/unit/provider/powershell_script_spec.rb +11 -4
- data/spec/unit/provider/remote_directory_spec.rb +9 -9
- data/spec/unit/provider/service/arch_service_spec.rb +3 -2
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
- data/spec/unit/provider/service/macosx_spec.rb +3 -3
- data/spec/unit/provider/service/redhat_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider/service/windows_spec.rb +2 -6
- data/spec/unit/provider/systemd_unit_spec.rb +28 -24
- data/spec/unit/provider/user/dscl_spec.rb +2 -2
- data/spec/unit/provider/windows_env_spec.rb +5 -4
- data/spec/unit/provider_resolver_spec.rb +6 -6
- data/spec/unit/provider_spec.rb +1 -0
- data/spec/unit/resource/batch_spec.rb +6 -6
- data/spec/unit/resource/chef_client_cron_spec.rb +23 -7
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +7 -4
- data/spec/unit/resource/execute_spec.rb +123 -118
- data/spec/unit/resource/file/verification_spec.rb +2 -1
- data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
- data/spec/unit/resource/osx_profile_spec.rb +233 -0
- data/spec/unit/resource/powershell_script_spec.rb +11 -29
- data/spec/unit/resource/script_spec.rb +6 -1
- data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
- data/spec/unit/resource/windows_firewall_profile_spec.rb +77 -0
- data/spec/unit/resource/windows_package_spec.rb +1 -0
- data/spec/unit/resource_reporter_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +25 -8
- data/spec/unit/role_spec.rb +30 -28
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
- data/spec/unit/run_lock_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +1 -1
- data/spec/unit/server_api_spec.rb +43 -16
- data/spec/unit/util/backup_spec.rb +1 -1
- data/spec/unit/util/diff_spec.rb +1 -15
- data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +2 -1
- data/spec/unit/win32/security_spec.rb +4 -3
- data/tasks/rspec.rb +1 -1
- metadata +53 -40
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
@@ -73,19 +73,19 @@ class Chef
|
|
73
73
|
description: "The Chef environment of the data if storing per environment values."
|
74
74
|
|
75
75
|
load_current_value do
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
76
|
+
|
77
|
+
item = ChefVault::Item.load(data_bag, id)
|
78
|
+
raw_data item.raw_data
|
79
|
+
clients item.get_clients
|
80
|
+
admins item.get_admins
|
81
|
+
search item.search
|
82
|
+
rescue ChefVault::Exceptions::SecretDecryption
|
83
|
+
current_value_does_not_exist!
|
84
|
+
rescue ChefVault::Exceptions::KeysNotFound
|
85
|
+
current_value_does_not_exist!
|
86
|
+
rescue Net::HTTPClientException => e
|
87
|
+
current_value_does_not_exist! if e.response_code == "404"
|
88
|
+
|
89
89
|
end
|
90
90
|
|
91
91
|
action :create do
|
@@ -89,8 +89,7 @@ class Chef
|
|
89
89
|
# @param [String] action the name of the action to perform
|
90
90
|
# @return [String] the choco feature command string
|
91
91
|
def choco_cmd(action)
|
92
|
-
|
93
|
-
cmd
|
92
|
+
"#{ENV["ALLUSERSPROFILE"]}\\chocolatey\\bin\\choco feature #{action} --name #{new_resource.feature_name}"
|
94
93
|
end
|
95
94
|
end
|
96
95
|
end
|
@@ -158,7 +158,7 @@ class Chef
|
|
158
158
|
|
159
159
|
# @todo this is Chef 12 era cleanup. Someday we should remove it all
|
160
160
|
template "/etc/cron.d/#{sanitized_name}" do
|
161
|
-
source ::File.expand_path("
|
161
|
+
source ::File.expand_path("../support/cron.d.erb", __dir__)
|
162
162
|
local true
|
163
163
|
mode new_resource.mode
|
164
164
|
variables(
|
@@ -70,7 +70,7 @@ class Chef
|
|
70
70
|
|
71
71
|
with_run_context :root do
|
72
72
|
edit_resource(:template, allow_path) do |new_resource|
|
73
|
-
source ::File.expand_path("
|
73
|
+
source ::File.expand_path("support/cron_access.erb", __dir__)
|
74
74
|
local true
|
75
75
|
mode "0600"
|
76
76
|
variables["users"] ||= []
|
@@ -87,7 +87,7 @@ class Chef
|
|
87
87
|
|
88
88
|
with_run_context :root do
|
89
89
|
edit_resource(:template, deny_path) do |new_resource|
|
90
|
-
source ::File.expand_path("
|
90
|
+
source ::File.expand_path("support/cron_access.erb", __dir__)
|
91
91
|
local true
|
92
92
|
mode "0600"
|
93
93
|
variables["users"] ||= []
|
@@ -38,7 +38,7 @@ class Chef
|
|
38
38
|
end
|
39
39
|
```
|
40
40
|
|
41
|
-
**Install
|
41
|
+
**Install VirtualBox from the .mpkg**:
|
42
42
|
|
43
43
|
```ruby
|
44
44
|
dmg_package 'Virtualbox' do
|
@@ -66,7 +66,7 @@ class Chef
|
|
66
66
|
description: "The remote URL that is used to download the `.dmg` file, if specified."
|
67
67
|
|
68
68
|
property :file, String,
|
69
|
-
description: "The
|
69
|
+
description: "The absolute path to the `.dmg` file on the local system."
|
70
70
|
|
71
71
|
property :owner, [String, Integer],
|
72
72
|
description: "The user that should own the package installation."
|
@@ -161,11 +161,11 @@ class Chef
|
|
161
161
|
|
162
162
|
```ruby
|
163
163
|
execute 'test_rule' do
|
164
|
-
command
|
164
|
+
command "command_to_run
|
165
165
|
--option value
|
166
166
|
--option value
|
167
167
|
--source \#{node[:name_of_node][:ipsec][:local][:subnet]}
|
168
|
-
-j test_rule
|
168
|
+
-j test_rule"
|
169
169
|
|
170
170
|
action :nothing
|
171
171
|
end
|
@@ -509,7 +509,6 @@ class Chef
|
|
509
509
|
def initialize(name, run_context = nil)
|
510
510
|
super
|
511
511
|
@command = name
|
512
|
-
@backup = 5
|
513
512
|
@default_guard_interpreter = :execute
|
514
513
|
@is_guard_interpreter = false
|
515
514
|
end
|
@@ -630,11 +629,11 @@ class Chef
|
|
630
629
|
end
|
631
630
|
|
632
631
|
# if domain is provided in both username and domain
|
633
|
-
if specified_user && ((specified_user.include? '\\') || (specified_user.include? "@")) && specified_domain
|
632
|
+
if specified_user.is_a?(String) && ((specified_user.include? '\\') || (specified_user.include? "@")) && specified_domain
|
634
633
|
raise ArgumentError, "The domain is provided twice. Username: `#{specified_user}`, Domain: `#{specified_domain}`. Please specify domain only once."
|
635
634
|
end
|
636
635
|
|
637
|
-
if
|
636
|
+
if specified_user.is_a?(String) && specified_domain.nil?
|
638
637
|
# Splitting username of format: Domain\Username
|
639
638
|
domain_and_user = user.split('\\')
|
640
639
|
|
@@ -25,7 +25,40 @@ class Chef
|
|
25
25
|
unified_mode true
|
26
26
|
provides :gem_package
|
27
27
|
|
28
|
-
description
|
28
|
+
description <<~DESC
|
29
|
+
Use the **gem_package** resource to manage gem packages that are only included in recipes.
|
30
|
+
When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
|
31
|
+
|
32
|
+
Note: The **gem_package** resource must be specified as `gem_package` and cannot be shortened to `package` in a recipe.
|
33
|
+
|
34
|
+
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
|
35
|
+
installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
|
36
|
+
available only to #{Chef::Dist::PRODUCT}.
|
37
|
+
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
|
38
|
+
Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
|
39
|
+
DESC
|
40
|
+
|
41
|
+
examples <<~EXAMPLES
|
42
|
+
The following examples demonstrate various approaches for using the **gem_package** resource in recipes:
|
43
|
+
|
44
|
+
**Install a gem file from the local file system**
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
gem_package 'right_aws' do
|
48
|
+
source '/tmp/right_aws-1.11.0.gem'
|
49
|
+
action :install
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
**Use the `ignore_failure` common attribute**
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
gem_package 'syntax' do
|
57
|
+
action :install
|
58
|
+
ignore_failure true
|
59
|
+
end
|
60
|
+
```
|
61
|
+
EXAMPLES
|
29
62
|
|
30
63
|
property :package_name, String,
|
31
64
|
description: "An optional property to set the package name if it differs from the resource block's name.",
|
@@ -53,7 +86,7 @@ class Chef
|
|
53
86
|
default: lazy { Chef::Config[:clear_gem_sources] }, desired_state: false
|
54
87
|
|
55
88
|
property :gem_binary, String, desired_state: false,
|
56
|
-
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be
|
89
|
+
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used."
|
57
90
|
|
58
91
|
property :include_default_source, [ TrueClass, FalseClass, nil ],
|
59
92
|
description: "Set to `false` to not include `Chef::Config[:rubygems_url]` in the sources.",
|
@@ -86,7 +86,7 @@ class Chef
|
|
86
86
|
end
|
87
87
|
|
88
88
|
action :periodic do
|
89
|
-
return unless
|
89
|
+
return unless macos?
|
90
90
|
|
91
91
|
unless brew_up_to_date?
|
92
92
|
converge_by "update new lists of packages" do
|
@@ -96,7 +96,7 @@ class Chef
|
|
96
96
|
end
|
97
97
|
|
98
98
|
action :update do
|
99
|
-
return unless
|
99
|
+
return unless macos?
|
100
100
|
|
101
101
|
converge_by "force update new lists of packages" do
|
102
102
|
do_update
|
@@ -87,8 +87,7 @@ class Chef
|
|
87
87
|
def updated_ec2_config_xml
|
88
88
|
begin
|
89
89
|
require "rexml/document" unless defined?(REXML::Document)
|
90
|
-
|
91
|
-
config = REXML::Document.new(::File.read(config_file))
|
90
|
+
config = REXML::Document.new(::File.read(WINDOWS_EC2_CONFIG))
|
92
91
|
# find an element named State with a sibling element whose value is Ec2SetComputerName
|
93
92
|
REXML::XPath.each(config, "//Plugin/State[../Name/text() = 'Ec2SetComputerName']") do |element|
|
94
93
|
element.text = "Disabled"
|
@@ -223,35 +222,36 @@ class Chef
|
|
223
222
|
end
|
224
223
|
|
225
224
|
else # windows
|
225
|
+
WINDOWS_EC2_CONFIG = 'C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml'.freeze
|
226
|
+
|
226
227
|
raise "Windows hostnames cannot contain a period." if new_resource.hostname.match?(/\./)
|
227
228
|
|
228
229
|
# suppress EC2 config service from setting our hostname
|
229
|
-
if ::File.exist?(
|
230
|
+
if ::File.exist?(WINDOWS_EC2_CONFIG)
|
230
231
|
xml_contents = updated_ec2_config_xml
|
231
232
|
if xml_contents.empty?
|
232
233
|
Chef::Log.warn('Unable to properly parse and update C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml contents. Skipping file update.')
|
233
234
|
else
|
234
|
-
|
235
|
+
file WINDOWS_EC2_CONFIG do
|
235
236
|
content xml_contents
|
236
237
|
end
|
237
238
|
end
|
238
239
|
end
|
239
240
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
not_if { Socket.gethostbyname(Socket.gethostname).first == new_resource.hostname }
|
248
|
-
end
|
241
|
+
unless Socket.gethostbyname(Socket.gethostname).first == new_resource.hostname
|
242
|
+
converge_by "set hostname to #{new_resource.hostname}" do
|
243
|
+
powershell_out! <<~EOH
|
244
|
+
$sysInfo = Get-WmiObject -Class Win32_ComputerSystem
|
245
|
+
$sysInfo.Rename("#{new_resource.hostname}")
|
246
|
+
EOH
|
247
|
+
end
|
249
248
|
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
249
|
+
# reboot because $windows
|
250
|
+
reboot "setting hostname" do
|
251
|
+
reason "#{Chef::Dist::PRODUCT} updated system hostname"
|
252
|
+
only_if { new_resource.windows_reboot }
|
253
|
+
action :request_reboot
|
254
|
+
end
|
255
255
|
end
|
256
256
|
end
|
257
257
|
end
|
@@ -68,7 +68,7 @@ class Chef
|
|
68
68
|
# check. According to `man 5 launchd.plist`:
|
69
69
|
# StartCalendarInterval <dictionary of integers or array of dictionaries of integers>
|
70
70
|
# ... Missing arguments are considered to be wildcard.
|
71
|
-
# What the man page doesn't state, but what was observed (OSX 10.11.5,
|
71
|
+
# What the man page doesn't state, but what was observed (OSX 10.11.5, launchctl v3.4.0)
|
72
72
|
# Is that keys that are specified, but invalid, will also be treated as a wildcard
|
73
73
|
# this means that an entry like:
|
74
74
|
# { "Hour"=>0, "Weekday"=>"6-7"}
|
@@ -16,6 +16,8 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require_relative "../resource"
|
19
|
+
require_relative "../dist"
|
20
|
+
require "plist"
|
19
21
|
|
20
22
|
class Chef
|
21
23
|
class Resource
|
@@ -28,99 +30,210 @@ class Chef
|
|
28
30
|
|
29
31
|
description "Use the **macos_userdefaults** resource to manage the macOS user defaults system. The properties of this resource are passed to the defaults command, and the parameters follow the convention of that command. See the defaults(1) man page for details on how the tool works."
|
30
32
|
introduced "14.0"
|
33
|
+
examples <<~DOC
|
34
|
+
**Specify a global domain value**
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
macos_userdefaults 'Full keyboard access to all controls' do
|
38
|
+
key 'AppleKeyboardUIMode'
|
39
|
+
value 2
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
**Setting a value on a specific domain**
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
macos_userdefaults 'Enable macOS firewall' do
|
47
|
+
domain '/Library/Preferences/com.apple.alf'
|
48
|
+
key 'globalstate'
|
49
|
+
value 1
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
**Specifying the type of a key to skip automatic type detection**
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
macos_userdefaults 'Finder expanded save dialogs' do
|
57
|
+
key 'NSNavPanelExpandedStateForSaveMode'
|
58
|
+
value 'TRUE'
|
59
|
+
type 'bool'
|
60
|
+
end
|
61
|
+
```
|
62
|
+
DOC
|
31
63
|
|
32
64
|
property :domain, String,
|
33
65
|
description: "The domain that the user defaults belong to.",
|
34
|
-
|
66
|
+
default: "NSGlobalDomain",
|
67
|
+
default_description: "NSGlobalDomain: the global domain.",
|
68
|
+
desired_state: false
|
35
69
|
|
36
70
|
property :global, [TrueClass, FalseClass],
|
37
71
|
description: "Determines whether or not the domain is global.",
|
38
|
-
|
72
|
+
deprecated: true,
|
73
|
+
default: false,
|
74
|
+
desired_state: false
|
39
75
|
|
40
76
|
property :key, String,
|
41
|
-
description: "The preference key."
|
77
|
+
description: "The preference key.",
|
78
|
+
required: true
|
79
|
+
|
80
|
+
property :host, [String, Symbol],
|
81
|
+
description: "Set either :current or a hostname to set the user default at the host level.",
|
82
|
+
desired_state: false,
|
83
|
+
introduced: "16.3"
|
42
84
|
|
43
85
|
property :value, [Integer, Float, String, TrueClass, FalseClass, Hash, Array],
|
44
|
-
description: "The value of the key.",
|
45
|
-
required:
|
86
|
+
description: "The value of the key. Note: With the `type` property set to `bool`, `String` forms of Boolean true/false values that Apple accepts in the defaults command will be coerced: 0/1, 'TRUE'/'FALSE,' 'true'/false', 'YES'/'NO', or 'yes'/'no'.",
|
87
|
+
required: [:write],
|
88
|
+
coerce: proc { |v| v.is_a?(Hash) ? v.transform_keys(&:to_s) : v } # make sure keys are all strings for comparison
|
46
89
|
|
47
90
|
property :type, String,
|
48
91
|
description: "The value type of the preference key.",
|
49
|
-
|
92
|
+
equal_to: %w{bool string int float array dict},
|
93
|
+
desired_state: false
|
50
94
|
|
51
95
|
property :user, String,
|
52
|
-
description: "The system user that the default will be applied to."
|
96
|
+
description: "The system user that the default will be applied to.",
|
97
|
+
desired_state: false
|
53
98
|
|
54
99
|
property :sudo, [TrueClass, FalseClass],
|
55
|
-
description: "Set to true if the setting you wish to modify requires privileged access.",
|
100
|
+
description: "Set to true if the setting you wish to modify requires privileged access. This requires passwordless sudo for the '/usr/bin/defaults' command to be setup for the user running #{Chef::Dist::PRODUCT}.",
|
56
101
|
default: false,
|
57
102
|
desired_state: false
|
58
103
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
desired_state: false,
|
63
|
-
skip_docs: true
|
104
|
+
load_current_value do |desired|
|
105
|
+
Chef::Log.debug "#load_current_value: shelling out \"#{defaults_export_cmd(desired).join(" ")}\" to determine state"
|
106
|
+
state = shell_out(defaults_export_cmd(desired), user: desired.user)
|
64
107
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
108
|
+
if state.error? || state.stdout.empty?
|
109
|
+
Chef::Log.debug "#load_current_value: #{defaults_export_cmd(desired).join(" ")} returned stdout: #{state.stdout} and stderr: #{state.stderr}"
|
110
|
+
current_value_does_not_exist!
|
111
|
+
end
|
112
|
+
|
113
|
+
plist_data = ::Plist.parse_xml(state.stdout)
|
114
|
+
|
115
|
+
# handle the situation where the key doesn't exist in the domain
|
116
|
+
if plist_data.key?(desired.key)
|
117
|
+
key desired.key
|
118
|
+
else
|
119
|
+
current_value_does_not_exist!
|
120
|
+
end
|
71
121
|
|
72
|
-
|
122
|
+
value plist_data[desired.key]
|
73
123
|
end
|
74
124
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
125
|
+
#
|
126
|
+
# The defaults command to export a domain
|
127
|
+
#
|
128
|
+
# @return [Array] defaults command
|
129
|
+
#
|
130
|
+
def defaults_export_cmd(resource)
|
131
|
+
state_cmd = ["/usr/bin/defaults"]
|
132
|
+
|
133
|
+
if resource.host == "current"
|
134
|
+
state_cmd.concat(["-currentHost"])
|
135
|
+
elsif resource.host # they specified a non-nil value, which is a hostname
|
136
|
+
state_cmd.concat(["-host", resource.host])
|
137
|
+
end
|
138
|
+
|
139
|
+
state_cmd.concat(["export", resource.domain, "-"])
|
140
|
+
state_cmd
|
88
141
|
end
|
89
142
|
|
90
143
|
action :write do
|
91
|
-
description "Write the
|
92
|
-
|
93
|
-
unless current_resource.is_set
|
94
|
-
cmd = ["defaults write"]
|
95
|
-
cmd.unshift("sudo") if new_resource.sudo
|
96
|
-
|
97
|
-
cmd << if new_resource.global
|
98
|
-
"NSGlobalDomain"
|
99
|
-
else
|
100
|
-
"'#{new_resource.domain}'"
|
101
|
-
end
|
102
|
-
|
103
|
-
cmd << "'#{new_resource.key}'" if new_resource.key
|
104
|
-
value = new_resource.value
|
105
|
-
type = new_resource.type.empty? ? value_type(value) : new_resource.type
|
106
|
-
# creates a string of Key1 Value1 Key2 Value2...
|
107
|
-
value = value.map { |k, v| "\"#{k}\" \"#{v}\"" }.join(" ") if type == "dict"
|
108
|
-
if type == "array"
|
109
|
-
value = value.join("' '")
|
110
|
-
value = "'#{value}'"
|
111
|
-
end
|
112
|
-
cmd << "-#{type}" if type
|
113
|
-
cmd << value
|
144
|
+
description "Write the value to the specified domain/key."
|
114
145
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
146
|
+
converge_if_changed do
|
147
|
+
cmd = defaults_modify_cmd
|
148
|
+
Chef::Log.debug("Updating defaults value by shelling out: #{cmd.join(" ")}")
|
149
|
+
|
150
|
+
shell_out!(cmd, user: new_resource.user)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
action :delete do
|
155
|
+
description "Delete a key from a domain."
|
156
|
+
|
157
|
+
# if it's not there there's nothing to remove
|
158
|
+
return unless current_resource
|
159
|
+
|
160
|
+
converge_by("delete domain:#{new_resource.domain} key:#{new_resource.key}") do
|
161
|
+
|
162
|
+
cmd = defaults_modify_cmd
|
163
|
+
Chef::Log.debug("Removing defaults key by shelling out: #{cmd.join(" ")}")
|
164
|
+
|
165
|
+
shell_out!(cmd, user: new_resource.user)
|
120
166
|
end
|
121
167
|
end
|
122
168
|
|
123
169
|
action_class do
|
170
|
+
#
|
171
|
+
# The command used to write or delete delete values from domains
|
172
|
+
#
|
173
|
+
# @return [Array] Array representation of defaults command to run
|
174
|
+
#
|
175
|
+
def defaults_modify_cmd
|
176
|
+
cmd = ["/usr/bin/defaults"]
|
177
|
+
|
178
|
+
if new_resource.host == :current
|
179
|
+
cmd.concat(["-currentHost"])
|
180
|
+
elsif new_resource.host # they specified a non-nil value, which is a hostname
|
181
|
+
cmd.concat(["-host", new_resource.host])
|
182
|
+
end
|
183
|
+
|
184
|
+
cmd.concat([action.to_s, new_resource.domain, new_resource.key])
|
185
|
+
cmd.concat(processed_value) if action == :write
|
186
|
+
cmd.prepend("sudo") if new_resource.sudo
|
187
|
+
cmd
|
188
|
+
end
|
189
|
+
|
190
|
+
#
|
191
|
+
# convert the provided value into the format defaults expects
|
192
|
+
#
|
193
|
+
# @return [array] array of values starting with the type if applicable
|
194
|
+
#
|
195
|
+
def processed_value
|
196
|
+
type = new_resource.type || value_type(new_resource.value)
|
197
|
+
|
198
|
+
# when dict this creates an array of values ["Key1", "Value1", "Key2", "Value2" ...]
|
199
|
+
cmd_values = ["-#{type}"]
|
200
|
+
|
201
|
+
case type
|
202
|
+
when "dict"
|
203
|
+
cmd_values.concat(new_resource.value.flatten)
|
204
|
+
when "array"
|
205
|
+
cmd_values.concat(new_resource.value)
|
206
|
+
when "bool"
|
207
|
+
cmd_values.concat(bool_to_defaults_bool(new_resource.value))
|
208
|
+
else
|
209
|
+
cmd_values.concat([new_resource.value])
|
210
|
+
end
|
211
|
+
|
212
|
+
cmd_values
|
213
|
+
end
|
214
|
+
|
215
|
+
#
|
216
|
+
# defaults booleans on the CLI must be 'TRUE' or 'FALSE' so convert various inputs to that
|
217
|
+
#
|
218
|
+
# @param [String, Integer, Boolean] input <description>
|
219
|
+
#
|
220
|
+
# @return [String] TRUE or FALSE
|
221
|
+
#
|
222
|
+
def bool_to_defaults_bool(input)
|
223
|
+
return ["TRUE"] if [true, "TRUE", "1", "true", "YES", "yes"].include?(input)
|
224
|
+
return ["FALSE"] if [false, "FALSE", "0", "false", "NO", "no"].include?(input)
|
225
|
+
|
226
|
+
# make sure it's very clear bad input was given
|
227
|
+
raise ArgumentError, "#{input} cannot be converted to a boolean value for use with Apple's defaults command. Acceptable values are: 'TRUE', 'YES', 'true, 'yes', '0', true, 'FALSE', 'false', 'NO', 'no', '1', or false."
|
228
|
+
end
|
229
|
+
|
230
|
+
#
|
231
|
+
# convert ruby type to defaults type
|
232
|
+
#
|
233
|
+
# @param [Integer, Float, String, TrueClass, FalseClass, Hash, Array] value The value being set
|
234
|
+
#
|
235
|
+
# @return [string, nil] the type value used by defaults or nil if not applicable
|
236
|
+
#
|
124
237
|
def value_type(value)
|
125
238
|
case value
|
126
239
|
when true, false
|
@@ -133,6 +246,8 @@ class Chef
|
|
133
246
|
"dict"
|
134
247
|
when Array
|
135
248
|
"array"
|
249
|
+
when String
|
250
|
+
"string"
|
136
251
|
end
|
137
252
|
end
|
138
253
|
end
|