chef 16.3.45 → 16.4.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/chef-universal-mingw32.gemspec +0 -1
- data/lib/chef/action_collection.rb +4 -0
- data/lib/chef/api_client/registration.rb +8 -8
- data/lib/chef/application.rb +6 -1
- data/lib/chef/application/apply.rb +5 -5
- data/lib/chef/application/base.rb +2 -0
- data/lib/chef/application/client.rb +3 -0
- data/lib/chef/application/windows_service.rb +27 -27
- 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/file_system/chef_server/acl_entry.rb +10 -10
- 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/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/client.rb +11 -11
- data/lib/chef/data_collector/run_end_message.rb +11 -1
- data/lib/chef/dsl/platform_introspection.rb +8 -8
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
- data/lib/chef/environment.rb +2 -2
- data/lib/chef/exceptions.rb +1 -1
- data/lib/chef/file_content_management/tempfile.rb +9 -9
- data/lib/chef/http.rb +2 -1
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/knife/bootstrap.rb +2 -2
- 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 +23 -23
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +2 -2
- data/lib/chef/knife/core/windows_bootstrap_context.rb +32 -24
- data/lib/chef/knife/delete.rb +15 -15
- data/lib/chef/knife/exec.rb +2 -2
- data/lib/chef/knife/ssh.rb +6 -6
- data/lib/chef/knife/xargs.rb +19 -19
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/mixin/checksum.rb +0 -1
- data/lib/chef/mixin/deep_merge.rb +35 -6
- data/lib/chef/mixin/openssl_helper.rb +3 -1
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/mixin/which.rb +1 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
- data/lib/chef/node/attribute.rb +2 -4
- data/lib/chef/platform/service_helpers.rb +1 -1
- data/lib/chef/property.rb +1 -1
- data/lib/chef/provider/cron/unix.rb +0 -2
- data/lib/chef/provider/git.rb +5 -5
- 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/package.rb +0 -2
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/snap.rb +1 -1
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -9
- data/lib/chef/provider/powershell_script.rb +21 -5
- data/lib/chef/provider/route.rb +1 -1
- 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/zypper_repository.rb +0 -1
- data/lib/chef/providers.rb +0 -1
- data/lib/chef/recipe.rb +1 -1
- data/lib/chef/resource.rb +6 -10
- data/lib/chef/resource/apt_repository.rb +1 -10
- 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/execute.rb +2 -3
- data/lib/chef/resource/homebrew_update.rb +2 -2
- 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 +24 -21
- data/lib/chef/resource/openssl_x509_crl.rb +2 -0
- 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/sudo.rb +1 -1
- data/lib/chef/resource/sysctl.rb +5 -5
- 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 +10 -7
- 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 +4 -2
- 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 +2 -0
- 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/role.rb +2 -2
- data/lib/chef/run_context/cookbook_compiler.rb +20 -20
- data/lib/chef/run_status.rb +2 -6
- data/lib/chef/shell.rb +1 -1
- data/lib/chef/util/backup.rb +1 -1
- data/lib/chef/util/diff.rb +11 -11
- data/lib/chef/util/powershell/cmdlet.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/file.rb +2 -2
- data/lib/chef/win32/file/version_info.rb +5 -5
- data/spec/data/ssl/chef-rspec.cert +15 -15
- data/spec/functional/resource/aixinit_service_spec.rb +7 -7
- data/spec/functional/resource/bff_spec.rb +2 -2
- data/spec/functional/resource/cookbook_file_spec.rb +1 -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/group_spec.rb +6 -6
- data/spec/functional/resource/insserv_spec.rb +4 -4
- data/spec/functional/resource/link_spec.rb +20 -20
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- 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/run_lock_spec.rb +24 -24
- 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 -180
- data/spec/integration/knife/config_use_profile_spec.rb +110 -109
- 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/lwrp_inline_resources_spec.rb +1 -1
- data/spec/spec_helper.rb +6 -6
- data/spec/support/platform_helpers.rb +9 -9
- 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 -20
- 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/unit/script_resource.rb +6 -20
- data/spec/support/shared/unit/windows_script_resource.rb +15 -28
- data/spec/unit/data_collector_spec.rb +22 -0
- data/spec/unit/environment_spec.rb +7 -7
- data/spec/unit/knife/bootstrap_spec.rb +14 -14
- 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/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/mixin/template_spec.rb +30 -30
- 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 +5 -5
- 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 +2 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider_resolver_spec.rb +6 -6
- data/spec/unit/resource/batch_spec.rb +6 -6
- data/spec/unit/resource/execute_spec.rb +113 -118
- data/spec/unit/resource/osx_profile_spec.rb +233 -0
- data/spec/unit/resource/powershell_script_spec.rb +11 -29
- data/spec/unit/resource/script_spec.rb +6 -1
- data/spec/unit/resource/windows_feature_powershell_spec.rb +30 -4
- data/spec/unit/role_spec.rb +11 -11
- data/tasks/rspec.rb +1 -1
- metadata +7 -8
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5cd173a8bc2e595b0c39776bd219be73951547e20a8ea7ca42e10ab9f4caf301
|
|
4
|
+
data.tar.gz: 8868bce6fe0f624417e2b431bdd0bd160b7747f1801ce93a2ab73b9225c210dc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2880171bce3ce18571abc3142417189f5a31f768adfa4654a1d7b3bf7acdee3483032bd0b5da61e895cb3c1613cccbf95edd76788a44bc2290fe0e4c6823534b
|
|
7
|
+
data.tar.gz: c1d9c41879c5db64c0d104cc41ceb8c3c97a7188d6d2f11333ef33b06ec4574833e586a507c5f1dbbf3c0da43f6df97e462c1c54983cccabdba98075437425f5
|
|
@@ -3,7 +3,6 @@ gemspec = eval(IO.read(File.expand_path("chef.gemspec", __dir__)))
|
|
|
3
3
|
gemspec.platform = Gem::Platform.new(%w{universal mingw32})
|
|
4
4
|
|
|
5
5
|
gemspec.add_dependency "win32-api", "~> 1.5.3"
|
|
6
|
-
gemspec.add_dependency "win32-dir", "~> 0.5.0"
|
|
7
6
|
gemspec.add_dependency "win32-event", "~> 0.6.1"
|
|
8
7
|
# TODO: Relax this pin and make the necessary updaets. The issue originally
|
|
9
8
|
# leading to this pin has been fixed in 0.6.5.
|
|
@@ -44,6 +44,9 @@ class Chef
|
|
|
44
44
|
# @return [Exception] The exception that was thrown
|
|
45
45
|
attr_accessor :exception
|
|
46
46
|
|
|
47
|
+
# @return [Hash] JSON-formatted error description from the Chef::Formatters::ErrorMapper
|
|
48
|
+
attr_accessor :error_description
|
|
49
|
+
|
|
47
50
|
# @return [Numeric] The elapsed time in seconds with machine precision
|
|
48
51
|
attr_accessor :elapsed_time
|
|
49
52
|
|
|
@@ -223,6 +226,7 @@ class Chef
|
|
|
223
226
|
|
|
224
227
|
current_record.status = :failed
|
|
225
228
|
current_record.exception = exception
|
|
229
|
+
current_record.error_description = Formatters::ErrorMapper.resource_failed(new_resource, action, exception).for_json
|
|
226
230
|
end
|
|
227
231
|
|
|
228
232
|
# Hook called after an action is completed. This is always called, even if the action fails.
|
|
@@ -72,14 +72,14 @@ class Chef
|
|
|
72
72
|
|
|
73
73
|
def assert_destination_writable!
|
|
74
74
|
abs_path = File.expand_path(destination)
|
|
75
|
-
unless File.
|
|
75
|
+
unless File.exist?(File.dirname(abs_path))
|
|
76
76
|
begin
|
|
77
77
|
FileUtils.mkdir_p(File.dirname(abs_path))
|
|
78
78
|
rescue Errno::EACCES
|
|
79
79
|
raise Chef::Exceptions::CannotWritePrivateKey, "I can't create the configuration directory at #{File.dirname(abs_path)} - check permissions?"
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
|
-
if (File.
|
|
82
|
+
if (File.exist?(abs_path) && !File.writable?(abs_path)) || !File.writable?(File.dirname(abs_path))
|
|
83
83
|
raise Chef::Exceptions::CannotWritePrivateKey, "I can't write your private key to #{abs_path} - check permissions?"
|
|
84
84
|
end
|
|
85
85
|
end
|
|
@@ -157,12 +157,12 @@ class Chef
|
|
|
157
157
|
end
|
|
158
158
|
|
|
159
159
|
def http_api
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
160
|
+
options = {}
|
|
161
|
+
options[:api_version] = "0"
|
|
162
|
+
options[:client_name] = Chef::Config[:validation_client_name]
|
|
163
|
+
options[:raw_key] = Chef::Config[:validation_key_contents]
|
|
164
|
+
options[:signing_key_filename] = Chef::Config[:validation_key] unless options[:raw_key]
|
|
165
|
+
@http_api ||= Chef::ServerAPI.new(Chef::Config[:chef_server_url], options)
|
|
166
166
|
end
|
|
167
167
|
|
|
168
168
|
# Whether or not to generate keys locally and post the public key to the
|
data/lib/chef/application.rb
CHANGED
|
@@ -19,13 +19,14 @@
|
|
|
19
19
|
require "pp" unless defined?(PP)
|
|
20
20
|
require "socket" unless defined?(Socket)
|
|
21
21
|
require_relative "config"
|
|
22
|
+
require "chef-config/mixin/chef_cloud"
|
|
22
23
|
require_relative "exceptions"
|
|
23
24
|
require_relative "local_mode"
|
|
24
25
|
require_relative "log"
|
|
25
26
|
require_relative "platform"
|
|
26
27
|
require "mixlib/cli" unless defined?(Mixlib::CLI)
|
|
27
28
|
require "tmpdir" unless defined?(Dir.mktmpdir)
|
|
28
|
-
require "rbconfig"
|
|
29
|
+
require "rbconfig" unless defined?(RbConfig)
|
|
29
30
|
require_relative "application/exit_code"
|
|
30
31
|
require_relative "dist"
|
|
31
32
|
require "license_acceptance/acceptor"
|
|
@@ -136,6 +137,10 @@ class Chef
|
|
|
136
137
|
|
|
137
138
|
if config[:config_file].nil?
|
|
138
139
|
logger.warn("No config file found or specified on command line. Using command line options instead.")
|
|
140
|
+
elsif ChefConfig::Mixin::ChefCloud.cloud_config?
|
|
141
|
+
logger.warn("*****************************************")
|
|
142
|
+
logger.warn("Found Chef Cloud configuration. Overriding local values from cloud.")
|
|
143
|
+
logger.warn("*****************************************")
|
|
139
144
|
elsif config_fetcher.config_missing?
|
|
140
145
|
logger.warn("*****************************************")
|
|
141
146
|
logger.warn("Did not find config file: #{config[:config_file]}. Using command line options instead.")
|
|
@@ -213,11 +213,11 @@ class Chef::Application::Apply < Chef::Application
|
|
|
213
213
|
end
|
|
214
214
|
runner = Chef::Runner.new(run_context)
|
|
215
215
|
catch(:end_client_run_early) do
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
216
|
+
|
|
217
|
+
runner.converge
|
|
218
|
+
ensure
|
|
219
|
+
@recipe_fh.close
|
|
220
|
+
|
|
221
221
|
end
|
|
222
222
|
Chef::Platform::Rebooter.reboot_if_needed!(runner)
|
|
223
223
|
end
|
|
@@ -22,6 +22,7 @@ require_relative "../mixin/shell_out"
|
|
|
22
22
|
require_relative "../config_fetcher"
|
|
23
23
|
require_relative "../dist"
|
|
24
24
|
require_relative "../daemon"
|
|
25
|
+
require "chef-config/mixin/chef_cloud"
|
|
25
26
|
require "chef-config/mixin/dot_d"
|
|
26
27
|
require "license_acceptance/cli_flags/mixlib_cli"
|
|
27
28
|
require "mixlib/archive" unless defined?(Mixlib::Archive)
|
|
@@ -39,6 +40,7 @@ require "mixlib/archive" unless defined?(Mixlib::Archive)
|
|
|
39
40
|
#
|
|
40
41
|
class Chef::Application::Base < Chef::Application
|
|
41
42
|
include Chef::Mixin::ShellOut
|
|
43
|
+
include ChefConfig::Mixin::ChefCloud
|
|
42
44
|
include ChefConfig::Mixin::DotD
|
|
43
45
|
include LicenseAcceptance::CLIFlags::MixlibCLI
|
|
44
46
|
|
|
@@ -156,6 +156,9 @@ class Chef::Application::Client < Chef::Application::Base
|
|
|
156
156
|
|
|
157
157
|
# Load all config files in client.d
|
|
158
158
|
load_dot_d(Chef::Config[:client_d_dir]) if Chef::Config[:client_d_dir]
|
|
159
|
+
|
|
160
|
+
# Load cloud config if present
|
|
161
|
+
load_cloud_config
|
|
159
162
|
end
|
|
160
163
|
|
|
161
164
|
def configure_logging
|
|
@@ -78,33 +78,33 @@ class Chef
|
|
|
78
78
|
while running?
|
|
79
79
|
# Grab the service_action_mutex to make a chef-client run
|
|
80
80
|
@service_action_mutex.synchronize do
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
81
|
+
|
|
82
|
+
Chef::Log.info("Next #{Chef::Dist::CLIENT} run will happen in #{timeout} seconds")
|
|
83
|
+
@service_signal.wait(@service_action_mutex, timeout)
|
|
84
|
+
|
|
85
|
+
# Continue only if service is RUNNING
|
|
86
|
+
next if state != RUNNING
|
|
87
|
+
|
|
88
|
+
# Reconfigure each time through to pick up any changes in the client file
|
|
89
|
+
Chef::Log.info("Reconfiguring with startup parameters")
|
|
90
|
+
reconfigure(startup_parameters)
|
|
91
|
+
timeout = Chef::Config[:interval]
|
|
92
|
+
|
|
93
|
+
# Honor splay sleep config
|
|
94
|
+
timeout += rand Chef::Config[:splay]
|
|
95
|
+
|
|
96
|
+
# run chef-client only if service is in RUNNING state
|
|
97
|
+
next if state != RUNNING
|
|
98
|
+
|
|
99
|
+
Chef::Log.info("#{Chef::Dist::CLIENT} service is starting a #{Chef::Dist::CLIENT} run...")
|
|
100
|
+
run_chef_client
|
|
101
|
+
rescue SystemExit => e
|
|
102
|
+
# Do not raise any of the errors here in order to
|
|
103
|
+
# prevent service crash
|
|
104
|
+
Chef::Log.error("#{e.class}: #{e}")
|
|
105
|
+
rescue Exception => e
|
|
106
|
+
Chef::Log.error("#{e.class}: #{e}")
|
|
107
|
+
|
|
108
108
|
end
|
|
109
109
|
end
|
|
110
110
|
|
data/lib/chef/chef_class.rb
CHANGED
|
@@ -172,11 +172,11 @@ class Chef
|
|
|
172
172
|
@memory_store.create_dir(path, name, *options)
|
|
173
173
|
else
|
|
174
174
|
with_parent_dir(path + [name], *options) do |parent, name|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
175
|
+
|
|
176
|
+
parent.create_child(name, nil)
|
|
177
|
+
rescue Chef::ChefFS::FileSystem::AlreadyExistsError => e
|
|
178
|
+
raise ChefZero::DataStore::DataAlreadyExistsError.new(to_zero_path(e.entry), e)
|
|
179
|
+
|
|
180
180
|
end
|
|
181
181
|
end
|
|
182
182
|
end
|
|
@@ -251,11 +251,11 @@ class Chef
|
|
|
251
251
|
end
|
|
252
252
|
|
|
253
253
|
with_parent_dir(path + [name], *options) do |parent, name|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
254
|
+
|
|
255
|
+
parent.create_child(name, data)
|
|
256
|
+
rescue Chef::ChefFS::FileSystem::AlreadyExistsError => e
|
|
257
|
+
raise ChefZero::DataStore::DataAlreadyExistsError.new(to_zero_path(e.entry), e)
|
|
258
|
+
|
|
259
259
|
end
|
|
260
260
|
end
|
|
261
261
|
end
|
|
@@ -349,11 +349,11 @@ class Chef
|
|
|
349
349
|
|
|
350
350
|
else
|
|
351
351
|
with_entry(path) do |entry|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
352
|
+
|
|
353
|
+
entry.read
|
|
354
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
|
355
|
+
raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
|
|
356
|
+
|
|
357
357
|
end
|
|
358
358
|
end
|
|
359
359
|
end
|
|
@@ -433,15 +433,15 @@ class Chef
|
|
|
433
433
|
|
|
434
434
|
else
|
|
435
435
|
with_entry(path) do |entry|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
end
|
|
442
|
-
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
|
443
|
-
raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
|
|
436
|
+
|
|
437
|
+
if %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length >= 3
|
|
438
|
+
entry.delete(true)
|
|
439
|
+
else
|
|
440
|
+
entry.delete(false)
|
|
444
441
|
end
|
|
442
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
|
443
|
+
raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
|
|
444
|
+
|
|
445
445
|
end
|
|
446
446
|
end
|
|
447
447
|
end
|
|
@@ -471,11 +471,11 @@ class Chef
|
|
|
471
471
|
|
|
472
472
|
else
|
|
473
473
|
with_entry(path) do |entry|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
474
|
+
|
|
475
|
+
entry.delete(options.include?(:recursive))
|
|
476
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
|
477
|
+
raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
|
|
478
|
+
|
|
479
479
|
end
|
|
480
480
|
end
|
|
481
481
|
end
|
|
@@ -487,11 +487,11 @@ class Chef
|
|
|
487
487
|
# LIST /policies
|
|
488
488
|
elsif path == [ "policies" ]
|
|
489
489
|
with_entry([ path[0] ]) do |policies|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
490
|
+
|
|
491
|
+
policies.children.map { |policy| policy.name[0..-6].rpartition("-")[0] }.uniq
|
|
492
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError
|
|
493
|
+
[]
|
|
494
|
+
|
|
495
495
|
end
|
|
496
496
|
|
|
497
497
|
# LIST /policies/POLICY/revisions
|
|
@@ -524,19 +524,19 @@ class Chef
|
|
|
524
524
|
|
|
525
525
|
elsif %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length == 1
|
|
526
526
|
with_entry(path) do |entry|
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
end
|
|
536
|
-
rescue Chef::ChefFS::FileSystem::NotFoundError
|
|
537
|
-
# If the cookbooks dir doesn't exist, we have no cookbooks (not 404)
|
|
538
|
-
[]
|
|
527
|
+
|
|
528
|
+
if path[0] == "cookbook_artifacts"
|
|
529
|
+
entry.children.map { |child| child.name.rpartition("-")[0] }.uniq
|
|
530
|
+
elsif chef_fs.versioned_cookbooks
|
|
531
|
+
# /cookbooks/name-version -> /cookbooks/name
|
|
532
|
+
entry.children.map { |child| split_name_version(child.name)[0] }.uniq
|
|
533
|
+
else
|
|
534
|
+
entry.children.map(&:name)
|
|
539
535
|
end
|
|
536
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError
|
|
537
|
+
# If the cookbooks dir doesn't exist, we have no cookbooks (not 404)
|
|
538
|
+
[]
|
|
539
|
+
|
|
540
540
|
end
|
|
541
541
|
|
|
542
542
|
elsif %w{cookbooks cookbook_artifacts}.include?(path[0]) && path.length == 2
|
|
@@ -560,16 +560,16 @@ class Chef
|
|
|
560
560
|
|
|
561
561
|
else
|
|
562
562
|
result = with_entry(path) do |entry|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
end
|
|
563
|
+
|
|
564
|
+
entry.children.map { |c| zero_filename(c) }.sort
|
|
565
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError => e
|
|
566
|
+
# /cookbooks, /data, etc. never return 404
|
|
567
|
+
if path_always_exists?(path)
|
|
568
|
+
[]
|
|
569
|
+
else
|
|
570
|
+
raise ChefZero::DataStore::DataNotFoundError.new(to_zero_path(e.entry), e)
|
|
572
571
|
end
|
|
572
|
+
|
|
573
573
|
end
|
|
574
574
|
|
|
575
575
|
# Older versions of chef-zero do not understand policies and cookbook_artifacts,
|
|
@@ -47,17 +47,17 @@ class Chef
|
|
|
47
47
|
# ACL writes are fun.
|
|
48
48
|
acls = data_handler.normalize(Chef::JSONCompat.parse(file_contents), self)
|
|
49
49
|
PERMISSIONS.each do |permission|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
end
|
|
50
|
+
|
|
51
|
+
rest.put("#{api_path}/#{permission}", { permission => acls[permission] })
|
|
52
|
+
rescue Timeout::Error => e
|
|
53
|
+
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "Timeout writing: #{e}")
|
|
54
|
+
rescue Net::HTTPClientException => e
|
|
55
|
+
if e.response.code == "404"
|
|
56
|
+
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e)
|
|
57
|
+
else
|
|
58
|
+
raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "HTTP error writing: #{e}")
|
|
60
59
|
end
|
|
60
|
+
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
end
|
|
@@ -44,15 +44,15 @@ class Chef
|
|
|
44
44
|
actual_invites = _read_json.inject({}) { |h, val| h[val["username"]] = val["id"]; h }
|
|
45
45
|
invites = actual_invites.keys
|
|
46
46
|
(desired_invites - invites).each do |invite|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
end
|
|
47
|
+
|
|
48
|
+
rest.post(api_path, { "user" => invite })
|
|
49
|
+
rescue Net::HTTPClientException => e
|
|
50
|
+
if e.response.code == "409"
|
|
51
|
+
Chef::Log.warn("Could not invite #{invite} to organization #{org}: #{api_error_text(e.response)}")
|
|
52
|
+
else
|
|
53
|
+
raise
|
|
55
54
|
end
|
|
55
|
+
|
|
56
56
|
end
|
|
57
57
|
(invites - desired_invites).each do |invite|
|
|
58
58
|
rest.delete(File.join(api_path, actual_invites[invite]))
|
|
@@ -43,15 +43,15 @@ class Chef
|
|
|
43
43
|
desired_members = minimize_value(Chef::JSONCompat.parse(contents, create_additions: false))
|
|
44
44
|
members = minimize_value(_read_json)
|
|
45
45
|
(desired_members - members).each do |member|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
end
|
|
46
|
+
|
|
47
|
+
rest.post(api_path, "username" => member)
|
|
48
|
+
rescue Net::HTTPClientException => e
|
|
49
|
+
if %w{404 405}.include?(e.response.code)
|
|
50
|
+
raise "Chef server at #{api_path} does not allow you to directly add members. Please either upgrade your Chef server or move the users you want into invitations.json instead of members.json."
|
|
51
|
+
else
|
|
52
|
+
raise
|
|
54
53
|
end
|
|
54
|
+
|
|
55
55
|
end
|
|
56
56
|
(members - desired_members).each do |member|
|
|
57
57
|
rest.delete(File.join(api_path, member))
|