chef 16.4.41 → 16.5.64
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Rakefile +2 -2
- data/bin/knife +1 -1
- data/chef.gemspec +2 -1
- data/lib/chef/application.rb +18 -16
- data/lib/chef/application/apply.rb +12 -7
- data/lib/chef/application/base.rb +26 -23
- data/lib/chef/application/client.rb +10 -4
- data/lib/chef/application/exit_code.rb +13 -4
- data/lib/chef/application/knife.rb +22 -11
- data/lib/chef/application/solo.rb +2 -1
- data/lib/chef/application/windows_service.rb +14 -14
- data/lib/chef/application/windows_service_manager.rb +6 -6
- data/lib/chef/chef_fs/knife.rb +2 -2
- data/lib/chef/chef_fs/parallelizer.rb +0 -1
- data/lib/chef/client.rb +10 -11
- data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
- data/lib/chef/cookbook/synchronizer.rb +2 -2
- data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/data_collector.rb +6 -5
- data/lib/chef/data_collector/config_validation.rb +22 -13
- data/lib/chef/data_collector/run_end_message.rb +2 -2
- data/lib/chef/data_collector/run_start_message.rb +1 -1
- data/lib/chef/deprecated.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +2 -2
- data/lib/chef/digester.rb +2 -2
- data/lib/chef/dsl/chef_vault.rb +1 -1
- data/lib/chef/dsl/data_query.rb +2 -2
- data/lib/chef/dsl/platform_introspection.rb +1 -1
- data/lib/chef/encrypted_data_bag_item.rb +3 -4
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
- data/lib/chef/environment.rb +2 -2
- data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
- data/lib/chef/exceptions.rb +4 -4
- data/lib/chef/file_access_control/windows.rb +5 -1
- data/lib/chef/formatters/doc.rb +7 -6
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
- data/lib/chef/formatters/minimal.rb +5 -4
- data/lib/chef/http.rb +6 -4
- data/lib/chef/http/auth_credentials.rb +5 -1
- data/lib/chef/http/authenticator.rb +1 -1
- data/lib/chef/http/basic_client.rb +4 -2
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +7 -5
- data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
- data/lib/chef/http/ssl_policies.rb +1 -1
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/knife.rb +4 -4
- data/lib/chef/knife/bootstrap.rb +16 -14
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
- data/lib/chef/knife/client_create.rb +3 -3
- data/lib/chef/knife/config_get.rb +8 -97
- data/lib/chef/knife/config_get_profile.rb +9 -9
- data/lib/chef/knife/config_list.rb +139 -0
- data/lib/chef/knife/config_list_profiles.rb +8 -98
- data/lib/chef/knife/config_show.rb +127 -0
- data/lib/chef/knife/config_use.rb +61 -0
- data/lib/chef/knife/config_use_profile.rb +9 -24
- data/lib/chef/knife/configure.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +2 -2
- data/lib/chef/knife/core/object_loader.rb +1 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/node_show.rb +2 -2
- data/lib/chef/knife/serve.rb +3 -3
- data/lib/chef/knife/ssh.rb +16 -1
- data/lib/chef/knife/ssl_check.rb +3 -3
- data/lib/chef/knife/status.rb +2 -2
- data/lib/chef/knife/user_create.rb +2 -2
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/local_mode.rb +2 -2
- data/lib/chef/log/syslog.rb +2 -2
- data/lib/chef/log/winevt.rb +2 -2
- data/lib/chef/mixin/deep_merge.rb +0 -12
- data/lib/chef/mixin/openssl_helper.rb +1 -4
- data/lib/chef/mixin/template.rb +2 -2
- data/lib/chef/mixin/uris.rb +2 -2
- data/lib/chef/mixin/versioned_api.rb +1 -2
- data/lib/chef/monkey_patches/net_http.rb +4 -4
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/policy_builder/policyfile.rb +2 -2
- data/lib/chef/provider.rb +0 -4
- data/lib/chef/provider/file.rb +2 -2
- data/lib/chef/provider/ifconfig.rb +1 -1
- data/lib/chef/provider/launchd.rb +2 -2
- data/lib/chef/provider/mount/linux.rb +63 -0
- data/lib/chef/provider/package/rubygems.rb +21 -18
- data/lib/chef/provider/package/snap.rb +0 -1
- data/lib/chef/provider/package/windows.rb +2 -2
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
- data/lib/chef/provider/package/zypper.rb +1 -1
- data/lib/chef/provider/remote_file/content.rb +3 -0
- data/lib/chef/provider/remote_file/ftp.rb +6 -4
- data/lib/chef/provider/remote_file/sftp.rb +6 -4
- data/lib/chef/provider/route.rb +2 -6
- data/lib/chef/provider/service/macosx.rb +2 -2
- data/lib/chef/provider/template_finder.rb +2 -10
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/mac.rb +1 -1
- data/lib/chef/provider/windows_task.rb +1 -2
- data/lib/chef/provider/zypper_repository.rb +2 -2
- data/lib/chef/provider_resolver.rb +1 -1
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/recipe.rb +2 -2
- data/lib/chef/resource.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +1 -1
- data/lib/chef/resource/bff_package.rb +22 -0
- data/lib/chef/resource/breakpoint.rb +57 -2
- data/lib/chef/resource/build_essential.rb +1 -1
- data/lib/chef/resource/cab_package.rb +29 -0
- data/lib/chef/resource/chef_client_cron.rb +32 -25
- data/lib/chef/resource/chef_client_launchd.rb +194 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
- data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
- data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
- data/lib/chef/resource/chef_gem.rb +10 -10
- data/lib/chef/resource/chef_handler.rb +148 -4
- data/lib/chef/resource/chef_sleep.rb +2 -2
- data/lib/chef/resource/chef_vault_secret.rb +1 -1
- data/lib/chef/resource/cookbook_file.rb +2 -2
- data/lib/chef/resource/cron/cron_d.rb +0 -1
- data/lib/chef/resource/dnf_package.rb +2 -2
- data/lib/chef/resource/dsc_resource.rb +0 -1
- data/lib/chef/resource/dsc_script.rb +2 -2
- data/lib/chef/resource/execute.rb +6 -6
- data/lib/chef/resource/file.rb +4 -4
- data/lib/chef/resource/gem_package.rb +5 -5
- data/lib/chef/resource/homebrew_package.rb +3 -3
- data/lib/chef/resource/homebrew_update.rb +5 -5
- data/lib/chef/resource/hostname.rb +2 -2
- data/lib/chef/resource/launchd.rb +2 -1
- data/lib/chef/resource/locale.rb +2 -2
- data/lib/chef/resource/macos_userdefaults.rb +3 -3
- data/lib/chef/resource/notify_group.rb +0 -1
- data/lib/chef/resource/ohai.rb +46 -3
- data/lib/chef/resource/ohai_hint.rb +33 -0
- data/lib/chef/resource/openssl_dhparam.rb +27 -5
- data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
- data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
- data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
- data/lib/chef/resource/openssl_x509_crl.rb +19 -10
- data/lib/chef/resource/openssl_x509_request.rb +14 -16
- data/lib/chef/resource/osx_profile.rb +77 -13
- data/lib/chef/resource/plist.rb +1 -1
- data/lib/chef/resource/powershell_package_source.rb +5 -5
- data/lib/chef/resource/reboot.rb +2 -2
- data/lib/chef/resource/remote_file.rb +3 -3
- data/lib/chef/resource/rhsm_register.rb +22 -10
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/scm/subversion.rb +2 -2
- data/lib/chef/resource/service.rb +3 -3
- data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
- data/lib/chef/resource/support/cron.d.erb +1 -1
- data/lib/chef/resource/support/cron_access.erb +1 -1
- data/lib/chef/resource/support/sudoer.erb +1 -1
- data/lib/chef/resource/support/ulimit.erb +1 -1
- data/lib/chef/resource/sysctl.rb +1 -5
- data/lib/chef/resource/systemd_unit.rb +2 -2
- data/lib/chef/resource/template.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +10 -3
- data/lib/chef/resource/windows_certificate.rb +6 -4
- data/lib/chef/resource/windows_firewall_profile.rb +22 -20
- data/lib/chef/resource/windows_package.rb +28 -5
- data/lib/chef/resource/windows_printer.rb +5 -3
- data/lib/chef/resource/windows_printer_port.rb +6 -4
- data/lib/chef/resource/windows_user_privilege.rb +53 -54
- data/lib/chef/resource/windows_workgroup.rb +3 -3
- data/lib/chef/resource/yum_package.rb +2 -2
- data/lib/chef/resources.rb +3 -1
- data/lib/chef/run_context.rb +2 -2
- data/lib/chef/run_context/cookbook_compiler.rb +1 -1
- data/lib/chef/run_lock.rb +2 -2
- data/lib/chef/search/query.rb +4 -5
- data/lib/chef/shell.rb +31 -26
- data/lib/chef/shell/ext.rb +11 -11
- data/lib/chef/shell/shell_session.rb +2 -2
- data/lib/chef/train_transport.rb +5 -104
- data/lib/chef/util/diff.rb +3 -3
- data/lib/chef/util/powershell/cmdlet.rb +3 -1
- data/lib/chef/util/powershell/ps_credential.rb +18 -14
- data/lib/chef/util/threaded_job_queue.rb +0 -2
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/crypto.rb +1 -1
- data/lib/chef/win32/registry.rb +1 -2
- data/spec/data/shef-config.rb +1 -1
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
- data/spec/functional/resource/aix_service_spec.rb +2 -2
- data/spec/functional/resource/aixinit_service_spec.rb +1 -1
- data/spec/functional/resource/insserv_spec.rb +1 -1
- data/spec/functional/resource/user/dscl_spec.rb +1 -1
- data/spec/functional/resource/user/mac_user_spec.rb +1 -1
- data/spec/functional/resource/windows_task_spec.rb +13 -13
- data/spec/functional/version_spec.rb +3 -3
- data/spec/integration/client/client_spec.rb +4 -4
- data/spec/integration/client/exit_code_spec.rb +3 -2
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
- data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
- data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
- data/spec/integration/ohai/ohai_spec.rb +61 -0
- data/spec/integration/recipes/remote_directory.rb +1 -1
- data/spec/integration/solo/solo_spec.rb +5 -5
- data/spec/spec_helper.rb +6 -3
- data/spec/stress/win32/file_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +2 -2
- data/spec/support/matchers/leak.rb +2 -2
- data/spec/support/platform_helpers.rb +16 -34
- data/spec/support/shared/functional/securable_resource.rb +108 -27
- data/spec/support/shared/functional/win32_service.rb +1 -1
- data/spec/support/shared/unit/application_dot_d.rb +5 -3
- data/spec/tiny_server.rb +0 -1
- data/spec/unit/application/client_spec.rb +2 -2
- data/spec/unit/application/exit_code_spec.rb +10 -0
- data/spec/unit/application_spec.rb +4 -6
- data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
- data/spec/unit/chef_fs/path_util_spec.rb +1 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
- data/spec/unit/cookbook_spec.rb +2 -2
- data/spec/unit/data_collector/config_validation_spec.rb +208 -0
- data/spec/unit/data_collector_spec.rb +0 -113
- data/spec/unit/dsl/declare_resource_spec.rb +1 -1
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +6 -6
- data/spec/unit/knife/core/ui_spec.rb +1 -0
- data/spec/unit/knife/ssh_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +3 -3
- data/spec/unit/mixin/deep_merge_spec.rb +15 -0
- data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
- data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +2 -2
- data/spec/unit/node/immutable_collections_spec.rb +2 -2
- data/spec/unit/provider/mount/linux_spec.rb +97 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
- data/spec/unit/provider/package/powershell_spec.rb +1 -1
- data/spec/unit/provider/package/rubygems_spec.rb +4 -1
- data/spec/unit/provider/route_spec.rb +0 -2
- data/spec/unit/recipe_spec.rb +1 -1
- data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
- data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
- data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
- data/spec/unit/resource/launchd_spec.rb +8 -0
- data/spec/unit/resource/osx_profile_spec.rb +67 -1
- data/spec/unit/resource/rhsm_register_spec.rb +56 -18
- data/spec/unit/resource/windows_uac_spec.rb +1 -1
- data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
- data/spec/unit/run_lock_spec.rb +5 -1
- data/spec/unit/runner_spec.rb +1 -2
- data/spec/unit/shell/shell_ext_spec.rb +46 -3
- data/spec/unit/shell/shell_session_spec.rb +35 -64
- data/spec/unit/shell_spec.rb +16 -19
- data/spec/unit/train_transport_spec.rb +14 -13
- data/spec/unit/util/selinux_spec.rb +2 -0
- data/tasks/rspec.rb +0 -2
- metadata +41 -17
- data/lib/chef/dist.rb +0 -68
- data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
require_relative "package"
|
20
20
|
require_relative "gem_package"
|
21
|
-
|
21
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Resource
|
@@ -27,27 +27,27 @@ class Chef
|
|
27
27
|
provides :chef_gem
|
28
28
|
|
29
29
|
description <<~DESC
|
30
|
-
Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{
|
30
|
+
Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{ChefUtils::Dist::Infra::CLIENT}.
|
31
31
|
When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
|
32
32
|
|
33
33
|
The **chef_gem** resource works with all of the same properties and options as the **gem_package** resource, but does not
|
34
|
-
accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{
|
34
|
+
accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{ChefUtils::Dist::Infra::CLIENT}` is
|
35
35
|
running. In addition to performing actions similar to the **gem_package** resource, the **chef_gem** resource does the
|
36
36
|
following:
|
37
37
|
- Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is installed.
|
38
38
|
- Runs `Gem.clear_paths` after the action, ensuring that gem is aware of changes so that it can be required immediately after it is installed.
|
39
39
|
|
40
|
-
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{
|
40
|
+
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{ChefUtils::Dist::Infra::PRODUCT} is
|
41
41
|
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
|
42
|
-
available only to #{
|
43
|
-
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{
|
42
|
+
available only to #{ChefUtils::Dist::Infra::PRODUCT}.
|
43
|
+
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{ChefUtils::Dist::Infra::PRODUCT}.
|
44
44
|
Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
|
45
45
|
DESC
|
46
46
|
|
47
47
|
examples <<~EXAMPLES
|
48
48
|
**Compile time vs. converge time installation of gems**
|
49
49
|
|
50
|
-
To install a gem while #{
|
50
|
+
To install a gem while #{ChefUtils::Dist::Infra::PRODUCT} is configuring the node (the converge phase), set the `compile_time` property to `false`:
|
51
51
|
```ruby
|
52
52
|
chef_gem 'right_aws' do
|
53
53
|
compile_time false
|
@@ -63,7 +63,7 @@ class Chef
|
|
63
63
|
end
|
64
64
|
```
|
65
65
|
|
66
|
-
Install MySQL
|
66
|
+
**Install MySQL gem into #{ChefUtils::Dist::Infra::PRODUCT}***
|
67
67
|
```ruby
|
68
68
|
apt_update
|
69
69
|
|
@@ -84,8 +84,8 @@ class Chef
|
|
84
84
|
|
85
85
|
property :gem_binary, String,
|
86
86
|
default: "#{RbConfig::CONFIG["bindir"]}/gem",
|
87
|
-
default_description: "The `gem` binary included with #{
|
88
|
-
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{
|
87
|
+
default_description: "The `gem` binary included with #{ChefUtils::Dist::Infra::PRODUCT}.",
|
88
|
+
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{ChefUtils::Dist::Infra::PRODUCT} will be used.",
|
89
89
|
callbacks: {
|
90
90
|
"The `chef_gem` resource is restricted to the current gem environment, use `gem_package` to install to other environments." =>
|
91
91
|
proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
|
@@ -16,7 +16,7 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require_relative "../resource"
|
19
|
-
|
19
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
class Resource
|
@@ -25,8 +25,152 @@ class Chef
|
|
25
25
|
|
26
26
|
provides(:chef_handler) { true }
|
27
27
|
|
28
|
-
description "Use the **chef_handler** resource to
|
28
|
+
description "Use the **chef_handler** resource to enable handlers during a #{ChefUtils::Dist::Infra::PRODUCT} run. The resource allows arguments to be passed to #{ChefUtils::Dist::Infra::PRODUCT}, which then applies the conditions defined by the custom handler to the node attribute data collected during a #{ChefUtils::Dist::Infra::PRODUCT} run, and then processes the handler based on that data.\nThe **chef_handler** resource is typically defined early in a node's run-list (often being the first item). This ensures that all of the handlers will be available for the entire #{ChefUtils::Dist::Infra::PRODUCT} run."
|
29
29
|
introduced "14.0"
|
30
|
+
examples <<~'DOC'
|
31
|
+
**Enable the 'MyHandler' handler**
|
32
|
+
|
33
|
+
The following example shows how to enable a fictional 'MyHandler' handler which is located on disk at `/etc/chef/my_handler.rb`. The handler will be configured to run with Chef Infra Client and will be passed values to the handler's initializer method:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
chef_handler 'MyHandler' do
|
37
|
+
source '/etc/chef/my_handler.rb' # the file should already be at this path
|
38
|
+
arguments path: '/var/chef/reports'
|
39
|
+
action :enable
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
**Enable handlers during the compile phase**
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
chef_handler 'Chef::Handler::JsonFile' do
|
47
|
+
source 'chef/handler/json_file'
|
48
|
+
arguments path: '/var/chef/reports'
|
49
|
+
action :enable
|
50
|
+
compile_time true
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
**Handle only exceptions**
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
chef_handler 'Chef::Handler::JsonFile' do
|
58
|
+
source 'chef/handler/json_file'
|
59
|
+
arguments path: '/var/chef/reports'
|
60
|
+
type exception: true
|
61
|
+
action :enable
|
62
|
+
end
|
63
|
+
```
|
64
|
+
|
65
|
+
**Cookbook Versions (a custom handler)**
|
66
|
+
|
67
|
+
[@juliandunn](https://github.com/juliandunn) created a custom report handler that logs all of the cookbooks and cookbook versions that were used during a Chef Infra Client run, and then reports after the run is complete.
|
68
|
+
|
69
|
+
cookbook_versions.rb:
|
70
|
+
|
71
|
+
The following custom handler defines how cookbooks and cookbook versions that are used during a Chef Infra Client run will be compiled into a report using the `Chef::Log` class in Chef Infra Client:
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
require 'chef/log'
|
75
|
+
|
76
|
+
module Chef
|
77
|
+
class CookbookVersionsHandler < Chef::Handler
|
78
|
+
def report
|
79
|
+
cookbooks = run_context.cookbook_collection
|
80
|
+
Chef::Log.info('Cookbooks and versions run: #{cookbooks.map {|x| x.name.to_s + ' ' + x.version }}')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
```
|
85
|
+
|
86
|
+
default.rb:
|
87
|
+
|
88
|
+
The following recipe is added to the run-list for every node on which a list of cookbooks and versions will be generated as report output after every Chef Infra Client run.
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
cookbook_file '/etc/chef/cookbook_versions.rb' do
|
92
|
+
source 'cookbook_versions.rb'
|
93
|
+
action :create
|
94
|
+
end
|
95
|
+
|
96
|
+
chef_handler 'Chef::CookbookVersionsHandler' do
|
97
|
+
source '/etc/chef/cookbook_versions.rb'
|
98
|
+
type report: true
|
99
|
+
action :enable
|
100
|
+
end
|
101
|
+
```
|
102
|
+
|
103
|
+
This recipe will generate report output similar to the following:
|
104
|
+
|
105
|
+
[2013-11-26T03:11:06+00:00] INFO: Chef Infra Client Run complete in 0.300029878 seconds
|
106
|
+
[2013-11-26T03:11:06+00:00] INFO: Running report handlers
|
107
|
+
[2013-11-26T03:11:06+00:00] INFO: Cookbooks and versions run: ["cookbook_versions_handler 1.0.0"]
|
108
|
+
[2013-11-26T03:11:06+00:00] INFO: Report handlers complete
|
109
|
+
```
|
110
|
+
|
111
|
+
**JsonFile Handler**
|
112
|
+
|
113
|
+
The JsonFile handler is available from the `chef_handler` cookbook and can be used with exceptions and reports. It serializes run status data to a JSON file. This handler may be enabled in one of the following ways.
|
114
|
+
|
115
|
+
By adding the following lines of Ruby code to either the client.rb file or the solo.rb file, depending on how Chef Infra Client is being run:
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
require 'chef/handler/json_file'
|
119
|
+
report_handlers << Chef::Handler::JsonFile.new(path: '/var/chef/reports')
|
120
|
+
exception_handlers << Chef::Handler::JsonFile.new(path: '/var/chef/reports')
|
121
|
+
```
|
122
|
+
|
123
|
+
By using the `chef_handler` resource in a recipe, similar to the following:
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
chef_handler 'Chef::Handler::JsonFile' do
|
127
|
+
source 'chef/handler/json_file'
|
128
|
+
arguments path: '/var/chef/reports'
|
129
|
+
action :enable
|
130
|
+
end
|
131
|
+
```
|
132
|
+
|
133
|
+
After it has run, the run status data can be loaded and inspected via Interactive Ruby (IRb):
|
134
|
+
|
135
|
+
```
|
136
|
+
irb(main):002:0> require 'json' => true
|
137
|
+
irb(main):003:0> require 'chef' => true
|
138
|
+
irb(main):004:0> r = JSON.parse(IO.read('/var/chef/reports/chef-run-report-20110322060731.json')) => ... output truncated
|
139
|
+
irb(main):005:0> r.keys => ['end_time', 'node', 'updated_resources', 'exception', 'all_resources', 'success', 'elapsed_time', 'start_time', 'backtrace']
|
140
|
+
irb(main):006:0> r['elapsed_time'] => 0.00246
|
141
|
+
```
|
142
|
+
|
143
|
+
Register the JsonFile handler
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
chef_handler 'Chef::Handler::JsonFile' do
|
147
|
+
source 'chef/handler/json_file'
|
148
|
+
arguments path: '/var/chef/reports'
|
149
|
+
action :enable
|
150
|
+
end
|
151
|
+
```
|
152
|
+
|
153
|
+
**ErrorReport Handler**
|
154
|
+
|
155
|
+
The ErrorReport handler is built into Chef Infra Client and can be used for both exceptions and reports. It serializes error report data to a JSON file. This handler may be enabled in one of the following ways.
|
156
|
+
|
157
|
+
By adding the following lines of Ruby code to either the client.rb file or the solo.rb file, depending on how Chef Infra Client is being run:
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
require 'chef/handler/error_report'
|
161
|
+
report_handlers << Chef::Handler::ErrorReport.new
|
162
|
+
exception_handlers << Chef::Handler::ErrorReport.new
|
163
|
+
```
|
164
|
+
|
165
|
+
By using the `chef_handler` resource in a recipe, similar to the following:
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
chef_handler 'Chef::Handler::ErrorReport' do
|
169
|
+
source 'chef/handler/error_report'
|
170
|
+
action :enable
|
171
|
+
end
|
172
|
+
```
|
173
|
+
DOC
|
30
174
|
|
31
175
|
property :class_name, String,
|
32
176
|
description: "The name of the handler class. This can be module name-spaced.",
|
@@ -50,7 +194,7 @@ class Chef
|
|
50
194
|
# This action needs to find an rb file that presumably contains the indicated class in it and the
|
51
195
|
# load that file. It then instantiates that class by name and registers it as a handler.
|
52
196
|
action :enable do
|
53
|
-
description "Enables the handler for the current #{
|
197
|
+
description "Enables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node"
|
54
198
|
|
55
199
|
class_name = new_resource.class_name
|
56
200
|
new_resource.type.each do |type, enable|
|
@@ -74,7 +218,7 @@ class Chef
|
|
74
218
|
end
|
75
219
|
|
76
220
|
action :disable do
|
77
|
-
description "Disables the handler for the current #{
|
221
|
+
description "Disables the handler for the current #{ChefUtils::Dist::Infra::PRODUCT} run on the current node"
|
78
222
|
|
79
223
|
new_resource.type.each_key do |type|
|
80
224
|
unregister_handler(type, new_resource.class_name)
|
@@ -15,7 +15,7 @@
|
|
15
15
|
#
|
16
16
|
|
17
17
|
require_relative "../resource"
|
18
|
-
|
18
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
19
19
|
|
20
20
|
class Chef
|
21
21
|
class Resource
|
@@ -24,7 +24,7 @@ class Chef
|
|
24
24
|
|
25
25
|
unified_mode true
|
26
26
|
|
27
|
-
description "Use the **chef_sleep** resource to pause (sleep) for a number of seconds during a #{
|
27
|
+
description "Use the **chef_sleep** resource to pause (sleep) for a number of seconds during a #{ChefUtils::Dist::Infra::PRODUCT} run. Only use this resource when a command or service exits successfully but is not ready for the next step in a recipe."
|
28
28
|
introduced "15.5"
|
29
29
|
examples <<~DOC
|
30
30
|
**Sleep for 10 seconds**:
|
@@ -21,7 +21,7 @@
|
|
21
21
|
require_relative "file"
|
22
22
|
require_relative "../provider/cookbook_file"
|
23
23
|
require_relative "../mixin/securable"
|
24
|
-
|
24
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
25
25
|
|
26
26
|
class Chef
|
27
27
|
class Resource
|
@@ -31,7 +31,7 @@ class Chef
|
|
31
31
|
|
32
32
|
provides :cookbook_file
|
33
33
|
|
34
|
-
description "Use the **cookbook_file** resource to transfer files from a sub-directory of COOKBOOK_NAME/files/ to a specified path located on a host that is running the #{
|
34
|
+
description "Use the **cookbook_file** resource to transfer files from a sub-directory of COOKBOOK_NAME/files/ to a specified path located on a host that is running the #{ChefUtils::Dist::Infra::PRODUCT}. The file is selected according to file specificity, which allows different source files to be used based on the hostname, host platform (operating system, distro, or as appropriate), or platform version. Files that are located in the COOKBOOK_NAME/files/default sub-directory may be used on any platform.\n\nDuring a #{ChefUtils::Dist::Infra::PRODUCT} run, the checksum for each local file is calculated and then compared against the checksum for the same file as it currently exists in the cookbook on the #{ChefUtils::Dist::Server::PRODUCT}. A file is not transferred when the checksums match. Only files that require an update are transferred from the #{ChefUtils::Dist::Server::PRODUCT} to a node."
|
35
35
|
|
36
36
|
property :source, [ String, Array ],
|
37
37
|
description: "The name of the file in COOKBOOK_NAME/files/default or the path to a file located in COOKBOOK_NAME/files. The path must include the file name and its extension. This can be used to distribute specific files depending upon the platform used.",
|
@@ -18,7 +18,7 @@
|
|
18
18
|
require_relative "package"
|
19
19
|
require_relative "../mixin/which"
|
20
20
|
require_relative "../mixin/shell_out"
|
21
|
-
|
21
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Resource
|
@@ -52,7 +52,7 @@ class Chef
|
|
52
52
|
|
53
53
|
# Flush the in-memory available/installed cache, this does not flush the dnf caches on disk
|
54
54
|
property :flush_cache, Hash,
|
55
|
-
description: "Flush the in-memory cache before or after a DNF operation that installs, upgrades, or removes a package. DNF automatically synchronizes remote metadata to a local cache. The #{
|
55
|
+
description: "Flush the in-memory cache before or after a DNF operation that installs, upgrades, or removes a package. DNF automatically synchronizes remote metadata to a local cache. The #{ChefUtils::Dist::Infra::CLIENT} creates a copy of the local cache, and then stores it in-memory during the #{ChefUtils::Dist::Infra::CLIENT} run. The in-memory cache allows packages to be installed during the #{ChefUtils::Dist::Infra::CLIENT} run without the need to continue synchronizing the remote metadata to the local cache while the #{ChefUtils::Dist::Infra::CLIENT} run is in-progress.",
|
56
56
|
default: { before: false, after: false },
|
57
57
|
coerce: proc { |v|
|
58
58
|
if v.is_a?(Hash)
|
@@ -19,7 +19,7 @@
|
|
19
19
|
require_relative "../resource"
|
20
20
|
require_relative "../exceptions"
|
21
21
|
require_relative "../dsl/powershell"
|
22
|
-
|
22
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
23
23
|
|
24
24
|
class Chef
|
25
25
|
class Resource
|
@@ -29,7 +29,7 @@ class Chef
|
|
29
29
|
unified_mode true
|
30
30
|
provides :dsc_script
|
31
31
|
|
32
|
-
description "Many DSC resources are comparable to built-in #{
|
32
|
+
description "Many DSC resources are comparable to built-in #{ChefUtils::Dist::Infra::PRODUCT} resources. For example, both DSC and #{ChefUtils::Dist::Infra::PRODUCT} have file, package, and service resources. The dsc_script resource is most useful for those DSC resources that do not have a direct comparison to a resource in #{ChefUtils::Dist::Infra::PRODUCT}, such as the Archive resource, a custom DSC resource, an existing DSC script that performs an important task, and so on. Use the dsc_script resource to embed the code that defines a DSC configuration directly within a #{ChefUtils::Dist::Infra::PRODUCT} recipe."
|
33
33
|
|
34
34
|
default_action :run
|
35
35
|
|
@@ -18,7 +18,7 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require_relative "../resource"
|
21
|
-
|
21
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Resource
|
@@ -533,7 +533,7 @@ class Chef
|
|
533
533
|
description: "The group name or group ID that must be changed before running a command."
|
534
534
|
|
535
535
|
property :live_stream, [ TrueClass, FalseClass ], default: false,
|
536
|
-
description: "Send the output of the command run by this execute resource block to the #{
|
536
|
+
description: "Send the output of the command run by this execute resource block to the #{ChefUtils::Dist::Infra::PRODUCT} event stream."
|
537
537
|
|
538
538
|
# default_env defaults to `false` so that the command execution more exactly matches what the user gets on the command line without magic
|
539
539
|
property :default_env, [ TrueClass, FalseClass ], desired_state: false, default: false,
|
@@ -553,7 +553,7 @@ class Chef
|
|
553
553
|
|
554
554
|
property :domain, String,
|
555
555
|
introduced: "12.21",
|
556
|
-
description: "Windows only: The domain of the user user specified by the user property. If not specified, the user name and password specified by the user and password properties will be used to resolve that user against the domain in which the system running #{
|
556
|
+
description: "Windows only: The domain of the user user specified by the user property. If not specified, the user name and password specified by the user and password properties will be used to resolve that user against the domain in which the system running #{ChefUtils::Dist::Infra::PRODUCT} is joined, or if that system is not joined to a domain it will resolve the user as a local account on that system. An alternative way to specify the domain is to leave this property unspecified and specify the domain as part of the user property."
|
557
557
|
|
558
558
|
property :password, String, sensitive: true,
|
559
559
|
introduced: "12.21",
|
@@ -561,11 +561,11 @@ class Chef
|
|
561
561
|
|
562
562
|
# lazy used to set default value of sensitive to true if password is set
|
563
563
|
property :sensitive, [ TrueClass, FalseClass ],
|
564
|
-
description: "Ensure that sensitive resource data is not logged by the #{
|
564
|
+
description: "Ensure that sensitive resource data is not logged by the #{ChefUtils::Dist::Infra::PRODUCT}.",
|
565
565
|
default: lazy { password ? true : false }, default_description: "True if the password property is set. False otherwise."
|
566
566
|
|
567
567
|
property :elevated, [ TrueClass, FalseClass ], default: false,
|
568
|
-
description: "Determines whether the script will run with elevated permissions to circumvent User Access Control (UAC) interactively blocking the process.\nThis will cause the process to be run under a batch login instead of an interactive login. The user running #{
|
568
|
+
description: "Determines whether the script will run with elevated permissions to circumvent User Access Control (UAC) interactively blocking the process.\nThis will cause the process to be run under a batch login instead of an interactive login. The user running #{ChefUtils::Dist::Infra::CLIENT} needs the 'Replace a process level token' and 'Adjust Memory Quotas for a process' permissions. The user that is running the command needs the 'Log on as a batch job' permission.\nBecause this requires a login, the user and password properties are required.",
|
569
569
|
introduced: "13.3"
|
570
570
|
|
571
571
|
property :input, [String],
|
@@ -587,7 +587,7 @@ class Chef
|
|
587
587
|
ancestor_attributes = superclass.guard_inherited_attributes
|
588
588
|
end
|
589
589
|
|
590
|
-
ancestor_attributes.concat(@class_inherited_attributes
|
590
|
+
ancestor_attributes.concat(@class_inherited_attributes || []).uniq
|
591
591
|
end
|
592
592
|
|
593
593
|
# post resource creation validation
|
data/lib/chef/resource/file.rb
CHANGED
@@ -22,7 +22,7 @@ require_relative "../platform/query_helpers"
|
|
22
22
|
require_relative "../mixin/securable"
|
23
23
|
require_relative "file/verification"
|
24
24
|
require "pathname" unless defined?(Pathname)
|
25
|
-
|
25
|
+
require "chef-utils" unless defined?(ChefUtils)
|
26
26
|
|
27
27
|
class Chef
|
28
28
|
class Resource
|
@@ -56,7 +56,7 @@ class Chef
|
|
56
56
|
allowed_actions :create, :delete, :touch, :create_if_missing
|
57
57
|
|
58
58
|
property :path, String, name_property: true,
|
59
|
-
description: "The full path to the file, including the file name and its extension. For example: /files/file.txt. Default value: the name of the resource block. Microsoft Windows: A path that begins with a forward slash (/) will point to the root of the current working directory of the #{
|
59
|
+
description: "The full path to the file, including the file name and its extension. For example: /files/file.txt. Default value: the name of the resource block. Microsoft Windows: A path that begins with a forward slash (/) will point to the root of the current working directory of the #{ChefUtils::Dist::Infra::CLIENT} process. This path can vary from system to system. Therefore, using a path that begins with a forward slash (/) is not recommended."
|
60
60
|
|
61
61
|
property :atomic_update, [ TrueClass, FalseClass ], desired_state: false, default: lazy { docker? && special_docker_files?(path) ? false : Chef::Config[:file_atomic_update] },
|
62
62
|
default_description: "False if modifying /etc/hosts, /etc/hostname, or /etc/resolv.conf within Docker containers. Otherwise default to the client.rb 'file_atomic_update' config value.",
|
@@ -76,10 +76,10 @@ class Chef
|
|
76
76
|
property :diff, [ String, nil ], desired_state: false, skip_docs: true
|
77
77
|
|
78
78
|
property :force_unlink, [ TrueClass, FalseClass ], desired_state: false, default: false,
|
79
|
-
description: "How #{
|
79
|
+
description: "How #{ChefUtils::Dist::Infra::PRODUCT} handles certain situations when the target file turns out not to be a file. For example, when a target file is actually a symlink. Set to `true` for #{ChefUtils::Dist::Infra::PRODUCT} to delete the non-file target and replace it with the specified file. Set to `false` for #{ChefUtils::Dist::Infra::PRODUCT} to raise an error."
|
80
80
|
|
81
81
|
property :manage_symlink_source, [ TrueClass, FalseClass ], desired_state: false,
|
82
|
-
description: "Change the behavior of the file resource if it is pointed at a symlink. When this value is set to true, #{
|
82
|
+
description: "Change the behavior of the file resource if it is pointed at a symlink. When this value is set to true, #{ChefUtils::Dist::Infra::PRODUCT} will manage the symlink's permissions or will replace the symlink with a normal file if the resource has content. When this value is set to false, #{ChefUtils::Dist::Infra::PRODUCT} will follow the symlink and will manage the permissions and content of symlink's target file. The default behavior is true but emits a warning that the default value will be changed to false in a future version; setting this explicitly to true or false suppresses this warning."
|
83
83
|
|
84
84
|
property :verifications, Array, default: lazy { [] }
|
85
85
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require_relative "package"
|
20
|
-
|
20
|
+
require "chef-utils/dist" unless defined?(ChefUtils::Dist)
|
21
21
|
|
22
22
|
class Chef
|
23
23
|
class Resource
|
@@ -31,10 +31,10 @@ class Chef
|
|
31
31
|
|
32
32
|
Note: The **gem_package** resource must be specified as `gem_package` and cannot be shortened to `package` in a recipe.
|
33
33
|
|
34
|
-
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{
|
34
|
+
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{ChefUtils::Dist::Infra::PRODUCT} is
|
35
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 #{
|
37
|
-
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{
|
36
|
+
available only to #{ChefUtils::Dist::Infra::PRODUCT}.
|
37
|
+
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{ChefUtils::Dist::Infra::PRODUCT}.
|
38
38
|
Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
|
39
39
|
DESC
|
40
40
|
|
@@ -86,7 +86,7 @@ class Chef
|
|
86
86
|
default: lazy { Chef::Config[:clear_gem_sources] }, desired_state: false
|
87
87
|
|
88
88
|
property :gem_binary, String, desired_state: false,
|
89
|
-
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{
|
89
|
+
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{ChefUtils::Dist::Infra::PRODUCT} will be used."
|
90
90
|
|
91
91
|
property :include_default_source, [ TrueClass, FalseClass, nil ],
|
92
92
|
description: "Set to `false` to not include `Chef::Config[:rubygems_url]` in the sources.",
|