chef 16.5.64 → 16.8.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -14
- data/README.md +1 -1
- data/Rakefile +21 -14
- data/chef-universal-mingw32.gemspec +1 -1
- data/chef.gemspec +3 -2
- data/lib/chef/application.rb +2 -2
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/application/client.rb +7 -2
- data/lib/chef/application/knife.rb +1 -1
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_pattern.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +1 -1
- data/lib/chef/client.rb +6 -32
- data/lib/chef/compliance/default_attributes.rb +89 -0
- data/lib/chef/compliance/fetcher/automate.rb +69 -0
- data/lib/chef/compliance/fetcher/chef_server.rb +134 -0
- data/lib/chef/compliance/reporter/automate.rb +202 -0
- data/lib/chef/compliance/reporter/chef_server_automate.rb +94 -0
- data/lib/chef/compliance/reporter/compliance_enforcer.rb +20 -0
- data/lib/chef/compliance/reporter/json_file.rb +19 -0
- data/lib/chef/compliance/runner.rb +261 -0
- data/lib/chef/cookbook/gem_installer.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +2 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +2 -5
- data/lib/chef/data_collector.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/environment.rb +1 -1
- data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
- data/lib/chef/exceptions.rb +5 -1
- data/lib/chef/file_access_control/windows.rb +1 -4
- data/lib/chef/file_content_management/tempfile.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +5 -5
- data/lib/chef/formatters/indentable_output_stream.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
- data/lib/chef/http.rb +2 -12
- data/lib/chef/http/basic_client.rb +1 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/http/socketless_chef_zero_client.rb +1 -1
- data/lib/chef/http/ssl_policies.rb +6 -0
- data/lib/chef/json_compat.rb +2 -7
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife/bootstrap.rb +2 -1
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +2 -2
- data/lib/chef/knife/bootstrap/train_connector.rb +1 -1
- data/lib/chef/knife/config_show.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/ui.rb +5 -2
- data/lib/chef/knife/core/windows_bootstrap_context.rb +7 -4
- data/lib/chef/knife/node_policy_set.rb +2 -2
- data/lib/chef/knife/node_run_list_add.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/node_run_list_set.rb +1 -1
- data/lib/chef/knife/role_env_run_list_add.rb +1 -1
- data/lib/chef/knife/role_env_run_list_set.rb +1 -1
- data/lib/chef/knife/role_run_list_add.rb +1 -1
- data/lib/chef/knife/role_run_list_set.rb +1 -1
- data/lib/chef/knife/search.rb +0 -1
- data/lib/chef/knife/ssh.rb +5 -3
- data/lib/chef/knife/tag_create.rb +1 -1
- data/lib/chef/knife/tag_delete.rb +1 -1
- data/lib/chef/local_mode.rb +1 -1
- data/lib/chef/mixin/convert_to_class_name.rb +0 -56
- data/lib/chef/mixin/openssl_helper.rb +1 -1
- data/lib/chef/mixin/powershell_exec.rb +24 -10
- data/lib/chef/mixin/powershell_out.rb +12 -5
- data/lib/chef/mixin/properties.rb +2 -0
- data/lib/chef/mixin/template.rb +1 -1
- data/lib/chef/mixin/unformatter.rb +1 -1
- data/lib/chef/mixin/uris.rb +3 -1
- data/lib/chef/node/attribute_collections.rb +2 -6
- data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/platform/query_helpers.rb +4 -4
- data/lib/chef/policy_builder/dynamic.rb +2 -0
- data/lib/chef/powershell.rb +10 -4
- data/lib/chef/property.rb +1 -1
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/provider/cron.rb +2 -13
- data/lib/chef/provider/dsc_resource.rb +12 -24
- data/lib/chef/provider/dsc_script.rb +16 -20
- data/lib/chef/provider/file.rb +1 -1
- data/lib/chef/provider/git.rb +5 -5
- data/lib/chef/provider/group.rb +14 -6
- data/lib/chef/provider/group/windows.rb +12 -1
- data/lib/chef/provider/ifconfig.rb +8 -8
- data/lib/chef/provider/ifconfig/debian.rb +38 -22
- data/lib/chef/provider/ifconfig/redhat.rb +54 -18
- data/lib/chef/provider/launchd.rb +1 -11
- data/lib/chef/provider/link.rb +0 -9
- data/lib/chef/provider/mount.rb +18 -1
- data/lib/chef/provider/mount/linux.rb +4 -0
- data/lib/chef/provider/mount/mount.rb +41 -43
- data/lib/chef/provider/package.rb +3 -0
- data/lib/chef/provider/package/apt.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +6 -6
- data/lib/chef/provider/package/dpkg.rb +3 -12
- data/lib/chef/provider/package/freebsd/base.rb +3 -2
- data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
- data/lib/chef/provider/package/homebrew.rb +1 -1
- data/lib/chef/provider/package/ips.rb +1 -1
- data/lib/chef/provider/package/powershell.rb +2 -3
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/snap.rb +1 -3
- data/lib/chef/provider/package/solaris.rb +0 -2
- data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +98 -71
- data/lib/chef/provider/powershell_script.rb +12 -1
- data/lib/chef/provider/registry_key.rb +4 -3
- data/lib/chef/provider/route.rb +2 -2
- data/lib/chef/provider/service/debian.rb +2 -1
- data/lib/chef/provider/service/redhat.rb +1 -1
- data/lib/chef/provider/user.rb +17 -9
- data/lib/chef/provider/user/aix.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +2 -2
- data/lib/chef/provider/user/mac.rb +14 -6
- data/lib/chef/provider/user/solaris.rb +1 -1
- data/lib/chef/provider/user/windows.rb +10 -3
- data/lib/chef/providers.rb +0 -3
- data/lib/chef/pwsh.rb +71 -0
- data/lib/chef/resource.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +6 -5
- data/lib/chef/resource/bash.rb +119 -1
- data/lib/chef/resource/batch.rb +1 -1
- data/lib/chef/resource/breakpoint.rb +3 -1
- data/lib/chef/resource/build_essential.rb +5 -8
- data/lib/chef/resource/chef_client_config.rb +313 -0
- data/lib/chef/resource/chef_client_cron.rb +5 -5
- data/lib/chef/resource/chef_client_scheduled_task.rb +4 -4
- data/lib/chef/resource/chef_client_systemd_timer.rb +5 -5
- data/lib/chef/resource/chef_handler.rb +1 -0
- data/lib/chef/resource/chef_sleep.rb +1 -1
- data/lib/chef/resource/cron/_cron_shared.rb +1 -0
- data/lib/chef/resource/cron/cron_d.rb +2 -2
- data/lib/chef/resource/csh.rb +2 -2
- data/lib/chef/resource/dsc_script.rb +8 -1
- data/lib/chef/resource/execute.rb +6 -4
- data/lib/chef/resource/file.rb +2 -2
- data/lib/chef/resource/homebrew_update.rb +4 -1
- data/lib/chef/resource/hostname.rb +5 -5
- data/lib/chef/resource/ifconfig.rb +52 -5
- data/lib/chef/resource/kernel_module.rb +1 -1
- data/lib/chef/resource/ksh.rb +3 -3
- data/lib/chef/resource/launchd.rb +15 -15
- data/lib/chef/resource/lwrp_base.rb +3 -5
- data/lib/chef/resource/mount.rb +8 -2
- data/lib/chef/resource/perl.rb +2 -2
- data/lib/chef/resource/plist.rb +2 -6
- data/lib/chef/resource/powershell_package_source.rb +19 -18
- data/lib/chef/resource/powershell_script.rb +14 -11
- data/lib/chef/resource/python.rb +2 -2
- data/lib/chef/resource/registry_key.rb +93 -2
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby.rb +2 -2
- data/lib/chef/resource/scm/_scm.rb +2 -1
- data/lib/chef/resource/scm/git.rb +82 -1
- data/lib/chef/resource/scm/subversion.rb +12 -0
- data/lib/chef/resource/script.rb +2 -2
- data/lib/chef/resource/solaris_package.rb +0 -2
- data/lib/chef/resource/sudo.rb +1 -1
- data/lib/chef/resource/support/client.erb +64 -0
- data/lib/chef/resource/systemd_unit.rb +42 -1
- data/lib/chef/resource/template.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +9 -9
- data/lib/chef/resource/windows_audit_policy.rb +26 -24
- data/lib/chef/resource/windows_certificate.rb +13 -7
- data/lib/chef/resource/windows_dfs_server.rb +7 -4
- data/lib/chef/resource/windows_env.rb +173 -0
- data/lib/chef/resource/windows_feature.rb +2 -0
- data/lib/chef/resource/windows_firewall_profile.rb +7 -12
- data/lib/chef/resource/windows_firewall_rule.rb +9 -11
- data/lib/chef/resource/windows_font.rb +1 -1
- data/lib/chef/resource/windows_package.rb +1 -0
- data/lib/chef/resource/windows_path.rb +38 -0
- data/lib/chef/resource/windows_security_policy.rb +5 -5
- data/lib/chef/resource/windows_service.rb +108 -0
- data/lib/chef/resource/windows_share.rb +18 -18
- data/lib/chef/resource/windows_task.rb +629 -28
- data/lib/chef/resource/windows_workgroup.rb +6 -4
- data/lib/chef/resource/yum_repository.rb +1 -1
- data/lib/chef/resource_collection/resource_set.rb +2 -6
- data/lib/chef/resource_inspector.rb +77 -75
- data/lib/chef/resource_reporter.rb +0 -2
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/run_lock.rb +2 -2
- data/lib/chef/search/query.rb +3 -1
- data/lib/chef/server_api.rb +0 -4
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/backup.rb +1 -1
- data/lib/chef/util/dsc/configuration_generator.rb +52 -11
- data/lib/chef/util/dsc/lcm_output_parser.rb +4 -7
- data/lib/chef/util/dsc/local_configuration_manager.rb +18 -15
- data/lib/chef/util/dsc/resource_store.rb +5 -11
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/file.rb +4 -0
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/security/sid.rb +1 -1
- data/lib/chef/win32/unicode.rb +1 -1
- data/spec/functional/mixin/powershell_out_spec.rb +11 -3
- data/spec/functional/resource/apt_package_spec.rb +4 -6
- data/spec/functional/resource/chocolatey_package_spec.rb +3 -3
- data/spec/functional/resource/cron_spec.rb +3 -3
- data/spec/functional/resource/dsc_script_spec.rb +6 -9
- data/spec/functional/resource/mount_spec.rb +10 -2
- data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
- data/spec/functional/resource/powershell_script_spec.rb +57 -14
- data/spec/functional/resource/windows_certificate_spec.rb +10 -6
- data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
- data/spec/functional/resource/windows_package_spec.rb +36 -10
- data/spec/functional/resource/windows_share_spec.rb +103 -0
- data/spec/functional/resource/windows_task_spec.rb +2 -3
- data/spec/functional/resource/zypper_package_spec.rb +11 -0
- data/spec/integration/client/client_spec.rb +2 -1
- data/spec/integration/compliance/compliance_spec.rb +81 -0
- data/spec/integration/knife/client_key_create_spec.rb +1 -1
- data/spec/integration/knife/node_create_spec.rb +1 -1
- data/spec/integration/knife/node_environment_set_spec.rb +1 -1
- data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
- data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
- data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
- data/spec/integration/knife/node_show_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +1 -1
- data/spec/integration/recipes/provider_choice.rb +2 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -0
- data/spec/spec_helper.rb +3 -4
- data/spec/support/lib/chef/resource/cat.rb +1 -1
- data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
- data/spec/support/mock/platform.rb +24 -16
- data/spec/support/platform_helpers.rb +11 -4
- data/spec/support/shared/unit/knife_shared.rb +1 -1
- data/spec/support/shared/unit/script_resource.rb +4 -4
- data/spec/support/shared/unit/windows_script_resource.rb +1 -1
- data/spec/unit/chef_fs/config_spec.rb +1 -1
- data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/spec/unit/client_spec.rb +17 -0
- data/spec/unit/compliance/fetcher/automate_spec.rb +134 -0
- data/spec/unit/compliance/fetcher/chef_server_spec.rb +93 -0
- data/spec/unit/compliance/reporter/automate_spec.rb +427 -0
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +177 -0
- data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +48 -0
- data/spec/unit/compliance/runner_spec.rb +140 -0
- data/spec/unit/data_collector_spec.rb +0 -4
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
- data/spec/unit/http/ssl_policies_spec.rb +11 -0
- data/spec/unit/knife/client_create_spec.rb +2 -2
- data/spec/unit/knife/configure_client_spec.rb +5 -5
- data/spec/unit/knife/configure_spec.rb +3 -3
- data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
- data/spec/unit/knife/cookbook_download_spec.rb +2 -2
- data/spec/unit/knife/cookbook_list_spec.rb +2 -2
- data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
- data/spec/unit/knife/core/node_editor_spec.rb +1 -1
- data/spec/unit/knife/environment_compare_spec.rb +3 -3
- data/spec/unit/knife/supermarket_download_spec.rb +8 -8
- data/spec/unit/knife/supermarket_list_spec.rb +3 -3
- data/spec/unit/knife/supermarket_search_spec.rb +1 -1
- data/spec/unit/knife/tag_create_spec.rb +1 -1
- data/spec/unit/knife/tag_delete_spec.rb +1 -1
- data/spec/unit/knife/user_create_spec.rb +1 -1
- data/spec/unit/mixin/powershell_exec_spec.rb +41 -4
- data/spec/unit/mixin/powershell_out_spec.rb +14 -0
- data/spec/unit/mixin/which.rb +1 -1
- data/spec/unit/platform/query_helpers_spec.rb +11 -12
- data/spec/unit/provider/dsc_resource_spec.rb +10 -27
- data/spec/unit/provider/dsc_script_spec.rb +1 -1
- data/spec/unit/provider/group/windows_spec.rb +6 -0
- data/spec/unit/provider/group_spec.rb +1 -1
- data/spec/unit/provider/mount/linux_spec.rb +10 -0
- data/spec/unit/provider/mount/mount_spec.rb +21 -10
- data/spec/unit/provider/mount/solaris_spec.rb +1 -1
- data/spec/unit/provider/mount/windows_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +31 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +1 -2
- data/spec/unit/provider/package/powershell_spec.rb +87 -95
- data/spec/unit/provider/package/zypper_spec.rb +0 -25
- data/spec/unit/provider/package_spec.rb +2 -2
- data/spec/unit/provider/powershell_script_spec.rb +11 -0
- data/spec/unit/provider/subversion_spec.rb +0 -3
- data/spec/unit/provider/systemd_unit_spec.rb +1 -1
- data/spec/unit/provider/user_spec.rb +7 -1
- data/spec/unit/provider/windows_env_spec.rb +18 -34
- data/spec/unit/provider/windows_path_spec.rb +6 -11
- data/spec/unit/provider/windows_task_spec.rb +7 -6
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/build_essential_spec.rb +0 -12
- data/spec/unit/resource/chef_client_config_spec.rb +137 -0
- data/spec/unit/resource/ifconfig_spec.rb +2 -10
- data/spec/unit/resource/mount_spec.rb +18 -5
- data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
- data/spec/unit/resource/powershell_script_spec.rb +4 -74
- data/spec/unit/resource/service_spec.rb +2 -2
- data/spec/unit/resource/solaris_package_spec.rb +8 -10
- data/spec/unit/resource/windows_certificate_spec.rb +12 -0
- data/spec/unit/resource_inspector_spec.rb +3 -3
- data/spec/unit/shell_spec.rb +2 -2
- data/spec/unit/util/dsc/configuration_generator_spec.rb +79 -0
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +27 -35
- data/tasks/rspec.rb +1 -1
- metadata +47 -24
- data/lib/chef/monkey_patches/net_http.rb +0 -22
- data/lib/chef/provider/windows_env.rb +0 -210
- data/lib/chef/provider/windows_path.rb +0 -61
- data/lib/chef/provider/windows_task.rb +0 -631
- data/lib/chef/util/powershell/cmdlet.rb +0 -175
- data/lib/chef/util/powershell/cmdlet_result.rb +0 -61
- data/spec/functional/util/powershell/cmdlet_spec.rb +0 -111
- data/spec/support/mock/constant.rb +0 -52
- data/spec/unit/monkey_patches/uri_spec.rb +0 -34
- data/spec/unit/provider_resolver_spec.rb +0 -885
- data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
- data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
- data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -63,17 +63,15 @@ class Chef
|
|
63
63
|
|
64
64
|
Chef::Log.trace("Loaded contents of #{filename} into resource #{resource_name} (#{resource_class})")
|
65
65
|
|
66
|
-
LWRPBase.loaded_lwrps[filename] = true
|
67
|
-
|
68
66
|
# wire up the default resource name after the class is parsed only if we haven't declared one.
|
69
67
|
# (this ordering is important for MapCollision deprecation warnings)
|
70
68
|
resource_class.provides resource_name.to_sym unless Chef::ResourceResolver.includes_handler?(resource_name.to_sym, self)
|
71
69
|
|
70
|
+
LWRPBase.loaded_lwrps[filename] = resource_class
|
71
|
+
|
72
72
|
resource_class
|
73
73
|
end
|
74
74
|
|
75
|
-
alias :attribute :property
|
76
|
-
|
77
75
|
# Adds +action_names+ to the list of valid actions for this resource.
|
78
76
|
# Does not include superclass's action list when appending.
|
79
77
|
def actions(*action_names)
|
@@ -88,7 +86,7 @@ class Chef
|
|
88
86
|
|
89
87
|
# @deprecated
|
90
88
|
def valid_actions(*args)
|
91
|
-
Chef::Log.warn("`valid_actions
|
89
|
+
Chef::Log.warn("`valid_actions` is deprecated, please use `allowed_actions` instead!")
|
92
90
|
allowed_actions(*args)
|
93
91
|
end
|
94
92
|
|
data/lib/chef/resource/mount.rb
CHANGED
@@ -41,6 +41,7 @@ class Chef
|
|
41
41
|
sensitive: true
|
42
42
|
|
43
43
|
property :mount_point, String, name_property: true,
|
44
|
+
coerce: proc { |arg| arg.chomp("/") }, # Removed "/" from the end of str, because it was causing idempotency issue.
|
44
45
|
description: "The directory (or path) in which the device is to be mounted. Defaults to the name of the resource block if not provided."
|
45
46
|
|
46
47
|
property :device, String, identity: true,
|
@@ -65,7 +66,7 @@ class Chef
|
|
65
66
|
|
66
67
|
property :options, [Array, String, nil],
|
67
68
|
description: "An array or comma separated list of options for the mount.",
|
68
|
-
coerce: proc { |arg| arg
|
69
|
+
coerce: proc { |arg| mount_options(arg) }, # Please see #mount_options method.
|
69
70
|
default: %w{defaults}
|
70
71
|
|
71
72
|
property :dump, [Integer, FalseClass],
|
@@ -84,7 +85,7 @@ class Chef
|
|
84
85
|
description: "Windows only: Use to specify the user name."
|
85
86
|
|
86
87
|
property :domain, String,
|
87
|
-
description: "Windows only: Use to specify the domain in which the username and password are located."
|
88
|
+
description: "Windows only: Use to specify the domain in which the `username` and `password` are located."
|
88
89
|
|
89
90
|
private
|
90
91
|
|
@@ -94,6 +95,11 @@ class Chef
|
|
94
95
|
@fstype = nil
|
95
96
|
end
|
96
97
|
|
98
|
+
# Returns array of string without leading and trailing whitespace.
|
99
|
+
def mount_options(options)
|
100
|
+
(options.is_a?(String) ? options.split(",") : options).collect(&:strip)
|
101
|
+
end
|
102
|
+
|
97
103
|
end
|
98
104
|
end
|
99
105
|
end
|
data/lib/chef/resource/perl.rb
CHANGED
@@ -32,9 +32,9 @@ class Chef
|
|
32
32
|
|
33
33
|
description "Use the **perl** resource to execute scripts using the Perl interpreter."\
|
34
34
|
" This resource may also use any of the actions and properties that are"\
|
35
|
-
" available to the execute resource. Commands that are executed with this"\
|
35
|
+
" available to the **execute** resource. Commands that are executed with this"\
|
36
36
|
" resource are (by their nature) not idempotent, as they are typically"\
|
37
|
-
" unique to the environment in which they are run. Use not_if and only_if"\
|
37
|
+
" unique to the environment in which they are run. Use `not_if` and `only_if`"\
|
38
38
|
" to guard this resource for idempotence."
|
39
39
|
end
|
40
40
|
end
|
data/lib/chef/resource/plist.rb
CHANGED
@@ -151,9 +151,7 @@ class Chef
|
|
151
151
|
value.to_i
|
152
152
|
when "float"
|
153
153
|
value.to_f
|
154
|
-
when "string"
|
155
|
-
value
|
156
|
-
when "dictionary"
|
154
|
+
when "string", "dictionary"
|
157
155
|
value
|
158
156
|
when nil
|
159
157
|
""
|
@@ -168,9 +166,7 @@ class Chef
|
|
168
166
|
"array"
|
169
167
|
when Integer
|
170
168
|
"integer"
|
171
|
-
when FalseClass
|
172
|
-
"bool"
|
173
|
-
when TrueClass
|
169
|
+
when FalseClass, TrueClass
|
174
170
|
"bool"
|
175
171
|
when Hash
|
176
172
|
"dict"
|
@@ -16,7 +16,6 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require_relative "../resource"
|
19
|
-
require_relative "../json_compat"
|
20
19
|
|
21
20
|
class Chef
|
22
21
|
class Resource
|
@@ -57,11 +56,11 @@ class Chef
|
|
57
56
|
|
58
57
|
load_current_value do
|
59
58
|
cmd = load_resource_state_script(source_name)
|
60
|
-
repo =
|
61
|
-
if repo.
|
59
|
+
repo = powershell_exec!(cmd)
|
60
|
+
if repo.result.empty?
|
62
61
|
current_value_does_not_exist!
|
63
62
|
else
|
64
|
-
status =
|
63
|
+
status = repo.result
|
65
64
|
end
|
66
65
|
url status["url"]
|
67
66
|
trusted status["trusted"]
|
@@ -78,28 +77,28 @@ class Chef
|
|
78
77
|
if package_source_exists?
|
79
78
|
converge_if_changed :url, :trusted, :publish_location, :script_source_location, :script_publish_location do
|
80
79
|
update_cmd = build_ps_repository_command("Set", new_resource)
|
81
|
-
res =
|
82
|
-
raise "Failed to update #{new_resource.source_name}: #{res.
|
80
|
+
res = powershell_exec(update_cmd)
|
81
|
+
raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
|
83
82
|
end
|
84
83
|
else
|
85
84
|
converge_by("register source: #{new_resource.source_name}") do
|
86
85
|
register_cmd = build_ps_repository_command("Register", new_resource)
|
87
|
-
res =
|
88
|
-
raise "Failed to register #{new_resource.source_name}: #{res.
|
86
|
+
res = powershell_exec(register_cmd)
|
87
|
+
raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
|
89
88
|
end
|
90
89
|
end
|
91
90
|
else
|
92
91
|
if package_source_exists?
|
93
92
|
converge_if_changed :url, :trusted, :provider_name do
|
94
93
|
update_cmd = build_package_source_command("Set", new_resource)
|
95
|
-
res =
|
96
|
-
raise "Failed to update #{new_resource.source_name}: #{res.
|
94
|
+
res = powershell_exec(update_cmd)
|
95
|
+
raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
|
97
96
|
end
|
98
97
|
else
|
99
98
|
converge_by("register source: #{new_resource.source_name}") do
|
100
99
|
register_cmd = build_package_source_command("Register", new_resource)
|
101
|
-
res =
|
102
|
-
raise "Failed to register #{new_resource.source_name}: #{res.
|
100
|
+
res = powershell_exec(register_cmd)
|
101
|
+
raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
|
103
102
|
end
|
104
103
|
end
|
105
104
|
end
|
@@ -110,16 +109,16 @@ class Chef
|
|
110
109
|
if package_source_exists?
|
111
110
|
unregister_cmd = "Get-PackageSource -Name '#{new_resource.source_name}' | Unregister-PackageSource"
|
112
111
|
converge_by("unregister source: #{new_resource.source_name}") do
|
113
|
-
res =
|
114
|
-
raise "Failed to unregister #{new_resource.source_name}: #{res.
|
112
|
+
res = powershell_exec(unregister_cmd)
|
113
|
+
raise "Failed to unregister #{new_resource.source_name}: #{res.errors}" if res.error?
|
115
114
|
end
|
116
115
|
end
|
117
116
|
end
|
118
117
|
|
119
118
|
action_class do
|
120
119
|
def package_source_exists?
|
121
|
-
cmd =
|
122
|
-
cmd.
|
120
|
+
cmd = powershell_exec!("(Get-PackageSource -Name '#{new_resource.source_name}' -ErrorAction SilentlyContinue).Name")
|
121
|
+
!cmd.result.empty? && cmd.result.to_s.downcase.strip == new_resource.source_name.downcase
|
123
122
|
end
|
124
123
|
|
125
124
|
def psrepository_cmdlet_appropriate?
|
@@ -133,6 +132,7 @@ class Chef
|
|
133
132
|
cmd << " -PublishLocation '#{new_resource.publish_location}'" if new_resource.publish_location
|
134
133
|
cmd << " -ScriptSourceLocation '#{new_resource.script_source_location}'" if new_resource.script_source_location
|
135
134
|
cmd << " -ScriptPublishLocation '#{new_resource.script_publish_location}'" if new_resource.script_publish_location
|
135
|
+
cmd << " | Out-Null"
|
136
136
|
cmd
|
137
137
|
end
|
138
138
|
|
@@ -141,6 +141,7 @@ class Chef
|
|
141
141
|
cmd << " -Location '#{new_resource.url}'" if new_resource.url
|
142
142
|
cmd << " -Trusted:#{new_resource.trusted ? "$true" : "$false"}"
|
143
143
|
cmd << " -ProviderName '#{new_resource.provider_name}'" if new_resource.provider_name
|
144
|
+
cmd << " | Out-Null"
|
144
145
|
cmd
|
145
146
|
end
|
146
147
|
end
|
@@ -157,11 +158,11 @@ class Chef
|
|
157
158
|
if ((Get-PackageSource -Name '#{name}').ProviderName -eq 'PowerShellGet') {
|
158
159
|
(Get-PSRepository -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.SourceLocation}},
|
159
160
|
@{n='trusted';e={$_.Trusted}}, @{n='provider_name';e={$_.PackageManagementProvider}}, @{n='publish_location';e={$_.PublishLocation}},
|
160
|
-
@{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}}
|
161
|
+
@{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}}
|
161
162
|
}
|
162
163
|
else {
|
163
164
|
(Get-PackageSource -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.Location}},
|
164
|
-
@{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}}
|
165
|
+
@{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}}
|
165
166
|
}
|
166
167
|
}
|
167
168
|
EOH
|
@@ -22,11 +22,24 @@ class Chef
|
|
22
22
|
class PowershellScript < Chef::Resource::WindowsScript
|
23
23
|
unified_mode true
|
24
24
|
|
25
|
+
set_guard_inherited_attributes(:interpreter)
|
26
|
+
|
25
27
|
provides :powershell_script, os: "windows"
|
26
28
|
|
29
|
+
description <<~DESC
|
30
|
+
Use the **powershell_script** resource to execute a script using the Windows PowerShell interpreter, much like how the script and script-based resources **bash**, **csh**, **perl**, **python**, and **ruby** are used. The **powershell_script** resource is specific to the Microsoft Windows platform, but may use both the the Windows PowerShell interpreter or the PowerShell Core (pwsh) interpreter as of Chef Infra Client 16.6 and later.
|
31
|
+
|
32
|
+
The **powershell_script** resource creates and executes a temporary file rather than running the command inline. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use `not_if` and `only_if` conditionals to guard this resource for idempotence.
|
33
|
+
DESC
|
34
|
+
|
27
35
|
property :flags, String,
|
28
36
|
description: "A string that is passed to the Windows PowerShell command"
|
29
37
|
|
38
|
+
property :interpreter, String,
|
39
|
+
default: "powershell",
|
40
|
+
equal_to: %w{powershell pwsh},
|
41
|
+
description: "The interpreter type, `powershell` or `pwsh` (PowerShell Core)"
|
42
|
+
|
30
43
|
property :convert_boolean_return, [true, false],
|
31
44
|
default: false,
|
32
45
|
description: <<~DESC
|
@@ -51,18 +64,8 @@ class Chef
|
|
51
64
|
```
|
52
65
|
DESC
|
53
66
|
|
54
|
-
description "Use the **powershell_script** resource to execute a script using the Windows PowerShell"\
|
55
|
-
" interpreter, much like how the script and script-based resources—bash, csh, perl, python,"\
|
56
|
-
" and ruby—are used. The powershell_script is specific to the Microsoft Windows platform"\
|
57
|
-
" and the Windows PowerShell interpreter.\n\n The powershell_script resource creates and"\
|
58
|
-
" executes a temporary file (similar to how the script resource behaves), rather than running"\
|
59
|
-
" the command inline. Commands that are executed with this resource are (by their nature) not"\
|
60
|
-
" idempotent, as they are typically unique to the environment in which they are run. Use not_if"\
|
61
|
-
" and only_if to guard this resource for idempotence."
|
62
|
-
|
63
67
|
def initialize(*args)
|
64
68
|
super
|
65
|
-
@interpreter = "powershell.exe"
|
66
69
|
@default_guard_interpreter = resource_name
|
67
70
|
end
|
68
71
|
|
@@ -73,7 +76,7 @@ class Chef
|
|
73
76
|
# default for this resource, this method can be removed since
|
74
77
|
# guard context and recipe resource context will have the
|
75
78
|
# same behavior.
|
76
|
-
def self.get_default_attributes
|
79
|
+
def self.get_default_attributes
|
77
80
|
{ convert_boolean_return: true }
|
78
81
|
end
|
79
82
|
end
|
data/lib/chef/resource/python.rb
CHANGED
@@ -31,9 +31,9 @@ class Chef
|
|
31
31
|
|
32
32
|
description "Use the **python** resource to execute scripts using the Python interpreter."\
|
33
33
|
" This resource may also use any of the actions and properties that are available"\
|
34
|
-
" to the execute resource. Commands that are executed with this resource are (by"\
|
34
|
+
" to the **execute** resource. Commands that are executed with this resource are (by"\
|
35
35
|
" their nature) not idempotent, as they are typically unique to the environment in"\
|
36
|
-
" which they are run. Use not_if and only_if to guard this resource for idempotence."
|
36
|
+
" which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -27,7 +27,96 @@ class Chef
|
|
27
27
|
provides(:registry_key) { true }
|
28
28
|
|
29
29
|
description "Use the **registry_key** resource to create and delete registry keys in Microsoft Windows."
|
30
|
-
|
30
|
+
examples <<~'DOC'
|
31
|
+
**Create a registry key**
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
registry_key 'HKEY_LOCAL_MACHINE\\path-to-key\\Policies\\System' do
|
35
|
+
values [{
|
36
|
+
name: 'EnableLUA',
|
37
|
+
type: :dword,
|
38
|
+
data: 0
|
39
|
+
}]
|
40
|
+
action :create
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
**Create a registry key with binary data: "\x01\x02\x03"**:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
registry_key 'HKEY_CURRENT_USER\ChefTest' do
|
48
|
+
values [{
|
49
|
+
:name => "test",
|
50
|
+
:type => :binary,
|
51
|
+
:data => [0, 1, 2].map(&:chr).join
|
52
|
+
}]
|
53
|
+
action :create
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
**Create 32-bit key in redirected wow6432 tree**
|
58
|
+
|
59
|
+
In 64-bit versions of Microsoft Windows, HKEY_LOCAL_MACHINE\SOFTWARE\Example is a re-directed key. In the following examples, because HKEY_LOCAL_MACHINE\SOFTWARE\Example is a 32-bit key, the output will be “Found 32-bit key” if they are run on a version of Microsoft Windows that is 64-bit:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\Example' do
|
63
|
+
architecture :i386
|
64
|
+
recursive true
|
65
|
+
action :create
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
69
|
+
**Set proxy settings to be the same as those used by Chef Infra Client**
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
proxy = URI.parse(Chef::Config[:http_proxy])
|
73
|
+
registry_key 'HKCU\Software\Microsoft\path\to\key\Internet Settings' do
|
74
|
+
values [{name: 'ProxyEnable', type: :reg_dword, data: 1},
|
75
|
+
{name: 'ProxyServer', data: "#{proxy.host}:#{proxy.port}"},
|
76
|
+
{name: 'ProxyOverride', type: :reg_string, data: <local>},
|
77
|
+
]
|
78
|
+
action :create
|
79
|
+
end
|
80
|
+
```
|
81
|
+
|
82
|
+
**Set the name of a registry key to "(Default)"**
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
registry_key 'Set (Default) value' do
|
86
|
+
key 'HKLM\Software\Test\Key\Path'
|
87
|
+
values [
|
88
|
+
{name: '', type: :string, data: 'test'},
|
89
|
+
]
|
90
|
+
action :create
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
**Delete a registry key value**
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
registry_key 'HKEY_LOCAL_MACHINE\SOFTWARE\path\to\key\AU' do
|
98
|
+
values [{
|
99
|
+
name: 'NoAutoRebootWithLoggedOnUsers',
|
100
|
+
type: :dword,
|
101
|
+
data: ''
|
102
|
+
}]
|
103
|
+
action :delete
|
104
|
+
end
|
105
|
+
```
|
106
|
+
|
107
|
+
Note: If data: is not specified, you get an error: Missing data key in RegistryKey values hash
|
108
|
+
|
109
|
+
**Delete a registry key and its subkeys, recursively**
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
registry_key 'HKCU\SOFTWARE\Policies\path\to\key\Themes' do
|
113
|
+
recursive true
|
114
|
+
action :delete_key
|
115
|
+
end
|
116
|
+
```
|
117
|
+
|
118
|
+
Note: Be careful when using the :delete_key action with the recursive attribute. This will delete the registry key, all of its values and all of the names, types, and data associated with them. This cannot be undone by Chef Infra Client.
|
119
|
+
DOC
|
31
120
|
|
32
121
|
state_attrs :values
|
33
122
|
|
@@ -72,6 +161,8 @@ class Chef
|
|
72
161
|
|
73
162
|
property :key, String, name_property: true
|
74
163
|
|
164
|
+
VALID_VALUE_HASH_KEYS = %i{name type data}.freeze
|
165
|
+
|
75
166
|
def values(arg = nil)
|
76
167
|
if not arg.nil?
|
77
168
|
if arg.is_a?(Hash)
|
@@ -89,7 +180,7 @@ class Chef
|
|
89
180
|
raise ArgumentError, "Missing name key in RegistryKey values hash" unless v.key?(:name)
|
90
181
|
|
91
182
|
v.each_key do |key|
|
92
|
-
raise ArgumentError, "Bad key #{key} in RegistryKey values hash" unless
|
183
|
+
raise ArgumentError, "Bad key #{key} in RegistryKey values hash" unless VALID_VALUE_HASH_KEYS.include?(key)
|
93
184
|
end
|
94
185
|
raise ArgumentError, "Type of name => #{v[:name]} should be string" unless v[:name].is_a?(String)
|
95
186
|
|
data/lib/chef/resource/route.rb
CHANGED
@@ -43,7 +43,7 @@ class Chef
|
|
43
43
|
description: "The route metric value."
|
44
44
|
|
45
45
|
property :netmask, [String, nil],
|
46
|
-
description: "The decimal representation of the network mask. For example: 255.255.255.0
|
46
|
+
description: "The decimal representation of the network mask. For example: `255.255.255.0`."
|
47
47
|
|
48
48
|
property :gateway, [String, nil],
|
49
49
|
description: "The gateway for the route."
|
data/lib/chef/resource/ruby.rb
CHANGED
@@ -27,9 +27,9 @@ class Chef
|
|
27
27
|
|
28
28
|
description "Use the **ruby** resource to execute scripts using the Ruby interpreter. This"\
|
29
29
|
" resource may also use any of the actions and properties that are available"\
|
30
|
-
" to the execute resource. Commands that are executed with this resource are (by"\
|
30
|
+
" to the **execute** resource. Commands that are executed with this resource are (by"\
|
31
31
|
" their nature) not idempotent, as they are typically unique to the environment"\
|
32
|
-
" in which they are run. Use not_if and only_if to guard this resource for idempotence."
|
32
|
+
" in which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
|
33
33
|
|
34
34
|
def initialize(name, run_context = nil)
|
35
35
|
super
|
@@ -33,7 +33,8 @@ property :revision, String,
|
|
33
33
|
default: "HEAD"
|
34
34
|
|
35
35
|
property :user, [String, Integer],
|
36
|
-
description: "The system user that will own the checked-out code."
|
36
|
+
description: "The system user that will own the checked-out code.",
|
37
|
+
default_description: "`HOME` environment variable of the user running #{ChefUtils::Dist::Infra::CLIENT}"
|
37
38
|
|
38
39
|
property :group, [String, Integer],
|
39
40
|
description: "The system group that will own the checked-out code."
|
@@ -28,6 +28,87 @@ class Chef
|
|
28
28
|
provides :git
|
29
29
|
|
30
30
|
description "Use the **git** resource to manage source control resources that exist in a git repository. git version 1.6.5 (or higher) is required to use all of the functionality in the git resource."
|
31
|
+
examples <<~DOC
|
32
|
+
**Use the git mirror**
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
git '/opt/my_sources/couch' do
|
36
|
+
repository 'git://git.apache.org/couchdb.git'
|
37
|
+
revision 'master'
|
38
|
+
action :sync
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
**Use different branches**
|
43
|
+
|
44
|
+
To use different branches, depending on the environment of the node:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
branch_name = if node.chef_environment == 'QA'
|
48
|
+
'staging'
|
49
|
+
else
|
50
|
+
'master'
|
51
|
+
end
|
52
|
+
|
53
|
+
git '/home/user/deployment' do
|
54
|
+
repository 'git@github.com:git_site/deployment.git'
|
55
|
+
revision branch_name
|
56
|
+
action :sync
|
57
|
+
user 'user'
|
58
|
+
group 'test'
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
Where the `branch_name` variable is set to staging or master, depending on the environment of the node. Once this is determined, the `branch_name` variable is used to set the revision for the repository. If the git status command is used after running the example above, it will return the branch name as `deploy`, as this is the default value. Run Chef Infra Client in debug mode to verify that the correct branches are being checked out:
|
63
|
+
|
64
|
+
```
|
65
|
+
sudo chef-client -l debug
|
66
|
+
```
|
67
|
+
|
68
|
+
**Install an application from git using bash**
|
69
|
+
|
70
|
+
The following example shows how Bash can be used to install a plug-in for rbenv named ruby-build, which is located in git version source control. First, the application is synchronized, and then Bash changes its working directory to the location in which ruby-build is located, and then runs a command.
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
git "#{Chef::Config[:file_cache_path]}/ruby-build" do
|
74
|
+
repository 'git://github.com/rbenv/ruby-build.git'
|
75
|
+
revision 'master'
|
76
|
+
action :sync
|
77
|
+
end
|
78
|
+
|
79
|
+
bash 'install_ruby_build' do
|
80
|
+
cwd "#{Chef::Config[:file_cache_path]}/ruby-build"
|
81
|
+
user 'rbenv'
|
82
|
+
group 'rbenv'
|
83
|
+
code <<-EOH
|
84
|
+
./install.sh
|
85
|
+
EOH
|
86
|
+
environment 'PREFIX' => '/usr/local'
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
**Notify a resource post-checkout**
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
git "#{Chef::Config[:file_cache_path]}/my_app" do
|
94
|
+
repository node['my_app']['git_repository']
|
95
|
+
revision node['my_app']['git_revision']
|
96
|
+
action :sync
|
97
|
+
notifies :run, 'bash[compile_my_app]', :immediately
|
98
|
+
end
|
99
|
+
```
|
100
|
+
|
101
|
+
**Pass in environment variables**
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
git '/opt/my_sources/couch' do
|
105
|
+
repository 'git://git.apache.org/couchdb.git'
|
106
|
+
revision 'master'
|
107
|
+
environment 'VAR' => 'whatever'
|
108
|
+
action :sync
|
109
|
+
end
|
110
|
+
```
|
111
|
+
DOC
|
31
112
|
|
32
113
|
property :additional_remotes, Hash,
|
33
114
|
description: "A Hash of additional remotes that are added to the git repository configuration.",
|
@@ -41,7 +122,7 @@ class Chef
|
|
41
122
|
default: false
|
42
123
|
|
43
124
|
property :enable_checkout, [TrueClass, FalseClass],
|
44
|
-
description: "Check out a repo from master. Set to false when using the checkout_branch attribute to prevent the git resource from attempting to check out master from master
|
125
|
+
description: "Check out a repo from master. Set to `false` when using the `checkout_branch` attribute to prevent the git resource from attempting to check out `master` from `master`.",
|
45
126
|
default: true
|
46
127
|
|
47
128
|
property :remote, String,
|