chef 16.3.45 → 16.4.35
Sign up to get free protection for your applications and to get access to all the features.
- 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))
|