chef 16.2.73-universal-mingw32 → 16.4.41-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 +1 -1
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +2 -1
- 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 +5 -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/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/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_content_management/tempfile.rb +9 -9
- data/lib/chef/handler.rb +2 -0
- data/lib/chef/http.rb +11 -11
- 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 +6 -12
- 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/configure.rb +3 -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 +28 -33
- 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 +32 -25
- 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/lib/chef/mixin/chef_utils_wiring.rb +40 -0
- 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 +8 -10
- 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_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/execute.rb +4 -5
- data/lib/chef/resource/homebrew_update.rb +2 -2
- data/lib/chef/resource/hostname.rb +18 -18
- 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 +1 -1
- data/lib/chef/resource/sudo.rb +2 -2
- data/lib/chef/resource/sysctl.rb +5 -5
- data/lib/chef/resource/timezone.rb +112 -73
- 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 +51 -20
- 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 +2 -0
- 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/ssh_spec.rb +5 -16
- data/spec/functional/resource/aix_service_spec.rb +0 -2
- data/spec/functional/resource/aixinit_service_spec.rb +7 -8
- data/spec/functional/resource/apt_package_spec.rb +0 -1
- data/spec/functional/resource/bff_spec.rb +2 -2
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +0 -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/git_spec.rb +23 -1
- data/spec/functional/resource/group_spec.rb +12 -8
- data/spec/functional/resource/insserv_spec.rb +4 -5
- data/spec/functional/resource/link_spec.rb +20 -20
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- data/spec/functional/resource/remote_file_spec.rb +1 -7
- data/spec/functional/resource/rpm_spec.rb +2 -2
- 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_security_policy_spec.rb +0 -3
- data/spec/functional/resource/windows_user_privilege_spec.rb +1 -1
- data/spec/functional/run_lock_spec.rb +26 -25
- data/spec/functional/shell_spec.rb +5 -5
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_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 +110 -109
- data/spec/integration/knife/cookbook_upload_spec.rb +27 -0
- data/spec/integration/knife/diff_spec.rb +3 -1
- data/spec/integration/knife/download_spec.rb +3 -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 +1 -1
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
- data/spec/integration/recipes/resource_load_spec.rb +2 -0
- 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/win32_service.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +3 -3
- 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/script_resource.rb +6 -20
- data/spec/support/shared/unit/windows_script_resource.rb +15 -28
- data/spec/unit/application_spec.rb +4 -2
- 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/cookbook/gem_installer_spec.rb +2 -1
- data/spec/unit/data_collector_spec.rb +29 -1
- data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
- data/spec/unit/environment_spec.rb +7 -7
- data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
- data/spec/unit/http/api_versions_spec.rb +19 -1
- data/spec/unit/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +16 -20
- data/spec/unit/knife/cookbook_download_spec.rb +4 -4
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- 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/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 +4 -4
- 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/securable_spec.rb +0 -1
- data/spec/unit/mixin/shell_out_spec.rb +25 -26
- data/spec/unit/mixin/template_spec.rb +30 -30
- 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/execute_spec.rb +0 -7
- data/spec/unit/provider/ifconfig_spec.rb +0 -1
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
- 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_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_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/execute_spec.rb +123 -118
- 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/timezone_spec.rb +63 -0
- 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/role_spec.rb +11 -11
- 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/diff_spec.rb +1 -15
- data/spec/unit/win32/security_spec.rb +4 -3
- data/tasks/rspec.rb +1 -1
- metadata +39 -31
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
data/lib/chef/recipe.rb
CHANGED
data/lib/chef/resource.rb
CHANGED
@@ -19,8 +19,6 @@
|
|
19
19
|
#
|
20
20
|
|
21
21
|
require_relative "exceptions"
|
22
|
-
require_relative "dsl/data_query"
|
23
|
-
require_relative "dsl/registry_helper"
|
24
22
|
require_relative "dsl/reboot_pending"
|
25
23
|
require_relative "dsl/resources"
|
26
24
|
require_relative "dsl/declare_resource"
|
@@ -53,8 +51,6 @@ class Chef
|
|
53
51
|
#
|
54
52
|
|
55
53
|
include Chef::DSL::DeclareResource
|
56
|
-
include Chef::DSL::DataQuery
|
57
|
-
include Chef::DSL::RegistryHelper
|
58
54
|
include Chef::DSL::RebootPending
|
59
55
|
extend Chef::Mixin::Provides
|
60
56
|
|
@@ -638,6 +634,7 @@ class Chef
|
|
638
634
|
# Do NOT use this. It may be removed. It is for internal purposes only.
|
639
635
|
# @api private
|
640
636
|
attr_reader :resource_initializing
|
637
|
+
|
641
638
|
def resource_initializing=(value)
|
642
639
|
if value
|
643
640
|
@resource_initializing = true
|
@@ -662,17 +659,17 @@ class Chef
|
|
662
659
|
|
663
660
|
all_props = {}
|
664
661
|
self.class.state_properties.map do |p|
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
662
|
+
|
663
|
+
all_props[p.name.to_s] = p.sensitive? ? '"*sensitive value suppressed*"' : value_to_text(p.get(self))
|
664
|
+
rescue Chef::Exceptions::ValidationFailed
|
665
|
+
# This space left intentionally blank, the property was probably required or had an invalid default.
|
666
|
+
|
670
667
|
end
|
671
668
|
|
672
669
|
ivars = instance_variables.map(&:to_sym) - HIDDEN_IVARS
|
673
670
|
ivars.each do |ivar|
|
674
671
|
iv = ivar.to_s.sub(/^@/, "")
|
675
|
-
if all_props.
|
672
|
+
if all_props.key?(iv)
|
676
673
|
text << " #{iv} #{all_props[iv]}\n"
|
677
674
|
elsif (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?)
|
678
675
|
text << " #{iv} #{value_to_text(value)}\n"
|
@@ -888,6 +885,7 @@ class Chef
|
|
888
885
|
# have.
|
889
886
|
#
|
890
887
|
attr_writer :allowed_actions
|
888
|
+
|
891
889
|
def allowed_actions(value = NOT_PASSED)
|
892
890
|
if value != NOT_PASSED
|
893
891
|
self.allowed_actions = value
|
@@ -192,16 +192,7 @@ class Chef
|
|
192
192
|
#
|
193
193
|
# @return [Boolean] is the key valid or not
|
194
194
|
def key_is_valid?(key)
|
195
|
-
valid =
|
196
|
-
|
197
|
-
so = shell_out("apt-key", "list")
|
198
|
-
so.stdout.split(/\n/).map do |t|
|
199
|
-
if t =~ %r{^\/#{key}.*\[expired: .*\]$}
|
200
|
-
logger.debug "Found expired key: #{t}"
|
201
|
-
valid = false
|
202
|
-
break
|
203
|
-
end
|
204
|
-
end
|
195
|
+
valid = shell_out("apt-key", "list").stdout.each_line.none?(%r{^\/#{key}.*\[expired: .*\]$})
|
205
196
|
|
206
197
|
logger.debug "key #{key} #{valid ? "is valid" : "is not valid"}"
|
207
198
|
valid
|
@@ -146,8 +146,8 @@ class Chef
|
|
146
146
|
def install_xcode_cli_tools(label)
|
147
147
|
# This script was graciously borrowed and modified from Tim Sutton's
|
148
148
|
# osx-vm-templates at https://github.com/timsutton/osx-vm-templates/blob/b001475df54a9808d3d56d06e71b8fa3001fff42/scripts/xcode-cli-tools.sh
|
149
|
-
|
150
|
-
|
149
|
+
bash "install Xcode Command Line Tools" do
|
150
|
+
code <<-EOH
|
151
151
|
# create the placeholder file that's checked by CLI updates' .dist code
|
152
152
|
# in Apple's SUS catalog
|
153
153
|
touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
@@ -112,11 +112,11 @@ class Chef
|
|
112
112
|
|
113
113
|
action :remove do
|
114
114
|
systemd_unit "#{new_resource.job_name}.service" do
|
115
|
-
action :
|
115
|
+
action :delete
|
116
116
|
end
|
117
117
|
|
118
118
|
systemd_unit "#{new_resource.job_name}.timer" do
|
119
|
-
action :
|
119
|
+
action :delete
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -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"] ||= []
|
@@ -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
|
|
@@ -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
|
@@ -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
|