chef 11.14.0.alpha.4-x86-mingw32 → 11.14.0.rc.2-x86-mingw32
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.
- data/CONTRIBUTING.md +0 -4
- data/README.md +1 -1
- data/distro/common/man/man1/chef-shell.1 +4 -4
- data/distro/common/man/man1/knife-bootstrap.1 +14 -11
- data/distro/common/man/man1/knife-client.1 +14 -11
- data/distro/common/man/man1/knife-configure.1 +7 -7
- data/distro/common/man/man1/knife-cookbook-site.1 +23 -23
- data/distro/common/man/man1/knife-cookbook.1 +23 -23
- data/distro/common/man/man1/knife-data-bag.1 +13 -13
- data/distro/common/man/man1/knife-delete.1 +9 -9
- data/distro/common/man/man1/knife-deps.1 +9 -9
- data/distro/common/man/man1/knife-diff.1 +10 -10
- data/distro/common/man/man1/knife-download.1 +9 -9
- data/distro/common/man/man1/knife-edit.1 +7 -7
- data/distro/common/man/man1/knife-environment.1 +10 -10
- data/distro/common/man/man1/knife-exec.1 +7 -7
- data/distro/common/man/man1/knife-index-rebuild.1 +1 -1
- data/distro/common/man/man1/knife-list.1 +12 -12
- data/distro/common/man/man1/knife-node.1 +12 -9
- data/distro/common/man/man1/knife-raw.1 +7 -7
- data/distro/common/man/man1/knife-recipe-list.1 +1 -1
- data/distro/common/man/man1/knife-role.1 +8 -8
- data/distro/common/man/man1/knife-search.1 +9 -9
- data/distro/common/man/man1/knife-serve.1 +109 -0
- data/distro/common/man/man1/knife-show.1 +8 -8
- data/distro/common/man/man1/knife-ssh.1 +9 -9
- data/distro/common/man/man1/knife-ssl-check.1 +9 -9
- data/distro/common/man/man1/knife-ssl-fetch.1 +10 -10
- data/distro/common/man/man1/knife-status.1 +9 -9
- data/distro/common/man/man1/knife-tag.1 +7 -7
- data/distro/common/man/man1/knife-upload.1 +10 -10
- data/distro/common/man/man1/knife-user.1 +9 -9
- data/distro/common/man/man1/knife-xargs.1 +7 -7
- data/distro/common/man/man1/knife.1 +118 -14
- data/distro/common/man/man8/chef-client.8 +13 -10
- data/distro/common/man/man8/chef-solo.8 +13 -14
- data/distro/common/markdown/man1/knife.mkd +1 -1
- data/lib/chef/application/knife.rb +1 -1
- data/lib/chef/application/windows_service.rb +0 -1
- data/lib/chef/chef_fs/file_system.rb +6 -2
- data/lib/chef/config.rb +3 -2
- data/lib/chef/config_fetcher.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +20 -14
- data/lib/chef/cookbook/synchronizer.rb +24 -13
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +2 -2
- data/lib/chef/exceptions.rb +1 -0
- data/lib/chef/file_content_management/deploy/mv_windows.rb +1 -1
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +1 -1
- data/lib/chef/http.rb +6 -1
- data/lib/chef/http/http_request.rb +9 -1
- data/lib/chef/http/simple.rb +2 -1
- data/lib/chef/json_compat.rb +5 -16
- data/lib/chef/knife/bootstrap.rb +2 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +2 -2
- data/lib/chef/knife/core/object_loader.rb +3 -1
- data/lib/chef/knife/ssh.rb +14 -7
- data/lib/chef/mixin/convert_to_class_name.rb +1 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +24 -4
- data/lib/chef/platform/provider_mapping.rb +13 -0
- data/lib/chef/provider/env/windows.rb +3 -6
- data/lib/chef/provider/git.rb +1 -2
- data/lib/chef/provider/log.rb +15 -1
- data/lib/chef/provider/package/apt.rb +3 -3
- data/lib/chef/provider/package/dpkg.rb +35 -16
- data/lib/chef/provider/package/paludis.rb +91 -0
- data/lib/chef/provider/package/rpm.rb +3 -2
- data/lib/chef/provider/package/yum-dump.py +6 -6
- data/lib/chef/provider/package/yum.rb +2 -0
- data/lib/chef/provider/registry_key.rb +4 -5
- data/lib/chef/provider/remote_file/cache_control_data.rb +1 -1
- data/lib/chef/provider/service/solaris.rb +1 -1
- data/lib/chef/provider/service/upstart.rb +2 -1
- data/lib/chef/provider/service/windows.rb +37 -9
- data/lib/chef/provider/user/pw.rb +1 -1
- data/lib/chef/provider/user/useradd.rb +1 -1
- data/lib/chef/provider/windows_script.rb +2 -1
- data/lib/chef/providers.rb +1 -0
- data/lib/chef/resource.rb +10 -0
- data/lib/chef/resource/file.rb +0 -9
- data/lib/chef/resource/package.rb +14 -4
- data/lib/chef/resource/paludis_package.rb +33 -0
- data/lib/chef/resource/registry_key.rb +62 -3
- data/lib/chef/resource/service.rb +21 -4
- data/lib/chef/resource_reporter.rb +10 -0
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/role.rb +14 -10
- data/lib/chef/shell.rb +8 -0
- data/lib/chef/shell/shell_session.rb +3 -3
- data/lib/chef/user.rb +12 -11
- data/lib/chef/util/selinux.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version_constraint.rb +6 -5
- data/lib/chef/win32/api/process.rb +1 -0
- data/lib/chef/win32/api/system.rb +14 -0
- data/lib/chef/win32/error.rb +1 -1
- data/lib/chef/win32/security.rb +5 -5
- data/lib/chef/win32/version.rb +6 -2
- data/spec/data/trusted_certs/opscode.pem +57 -35
- data/spec/functional/application_spec.rb +2 -2
- data/spec/functional/resource/mount_spec.rb +3 -1
- data/spec/functional/shell_spec.rb +10 -0
- data/spec/functional/tiny_server_spec.rb +2 -2
- data/spec/support/chef_helpers.rb +1 -1
- data/spec/support/shared/functional/securable_resource.rb +11 -2
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +13 -2
- data/spec/tiny_server.rb +1 -1
- data/spec/unit/config_spec.rb +5 -0
- data/spec/unit/cookbook/metadata_spec.rb +24 -0
- data/spec/unit/environment_spec.rb +6 -0
- data/spec/unit/http/http_request_spec.rb +91 -0
- data/spec/unit/http_spec.rb +23 -0
- data/spec/unit/knife/bootstrap_spec.rb +2 -2
- data/spec/unit/knife/ssh_spec.rb +7 -13
- data/spec/unit/knife_spec.rb +1 -1
- data/spec/unit/mixin/convert_to_class_name_spec.rb +4 -0
- data/spec/unit/provider/git_spec.rb +2 -2
- data/spec/unit/provider/log_spec.rb +18 -0
- data/spec/unit/provider/mount/solaris_spec.rb +3 -1
- data/spec/unit/provider/package/apt_spec.rb +85 -40
- data/spec/unit/provider/package/dpkg_spec.rb +24 -48
- data/spec/unit/provider/package/paludis_spec.rb +135 -0
- data/spec/unit/provider/package/rpm_spec.rb +40 -32
- data/spec/unit/provider/package/yum_spec.rb +11 -4
- data/spec/unit/provider/registry_key_spec.rb +67 -53
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +10 -1
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +23 -2
- data/spec/unit/provider/service/upstart_service_spec.rb +7 -0
- data/spec/unit/provider/service/windows_spec.rb +72 -0
- data/spec/unit/provider/user/pw_spec.rb +21 -4
- data/spec/unit/provider/user/useradd_spec.rb +10 -0
- data/spec/unit/resource/package_spec.rb +26 -18
- data/spec/unit/resource/registry_key_spec.rb +28 -0
- data/spec/unit/resource/service_spec.rb +14 -0
- data/spec/unit/resource_reporter_spec.rb +37 -12
- data/spec/unit/resource_spec.rb +41 -6
- data/spec/unit/rest_spec.rb +2 -2
- data/spec/unit/role_spec.rb +46 -28
- data/spec/unit/shell/shell_session_spec.rb +42 -2
- data/spec/unit/shell_spec.rb +1 -1
- data/spec/unit/user_spec.rb +12 -0
- data/spec/unit/util/selinux_spec.rb +4 -4
- data/spec/unit/version_constraint_spec.rb +14 -2
- metadata +223 -167
- checksums.yaml +0 -7
@@ -41,7 +41,7 @@ documentation using `knife help TOPIC`.
|
|
41
41
|
* `-c`, `--config` CONFIG:
|
42
42
|
The configuration file to use
|
43
43
|
* `-E`, `--environment ENVIRONMENT`:
|
44
|
-
Set the Chef environment
|
44
|
+
Set the Chef environment (except for in searches, where this will be flagrantly ignored)
|
45
45
|
* `-e`, `--editor` EDITOR:
|
46
46
|
Set the editor to use for interactive commands
|
47
47
|
* `-F`, `--format` FORMAT:
|
@@ -51,7 +51,7 @@ class Chef::Application::Knife < Chef::Application
|
|
51
51
|
option :environment,
|
52
52
|
:short => "-E ENVIRONMENT",
|
53
53
|
:long => "--environment ENVIRONMENT",
|
54
|
-
:description => "Set the Chef environment"
|
54
|
+
:description => "Set the Chef environment (except for in searches, where this will be flagrantly ignored)"
|
55
55
|
|
56
56
|
option :editor,
|
57
57
|
:short => "-e EDITOR",
|
@@ -211,7 +211,6 @@ class Chef
|
|
211
211
|
def reconfigure(startup_parameters=[])
|
212
212
|
configure_chef startup_parameters
|
213
213
|
configure_logging
|
214
|
-
configure_proxy_environment_variables
|
215
214
|
|
216
215
|
Chef::Config[:chef_server_url] = config[:chef_server_url] if config.has_key? :chef_server_url
|
217
216
|
unless Chef::Config[:exception_handlers].any? {|h| Chef::Handler::ErrorReport === h}
|
@@ -285,8 +285,12 @@ class Chef
|
|
285
285
|
if options[:dry_run]
|
286
286
|
ui.output "Would delete #{dest_path}" if ui
|
287
287
|
else
|
288
|
-
|
289
|
-
|
288
|
+
begin
|
289
|
+
dest_entry.delete(true)
|
290
|
+
ui.output "Deleted extra entry #{dest_path} (purge is on)" if ui
|
291
|
+
rescue Chef::ChefFS::FileSystem::NotFoundError
|
292
|
+
ui.output "Entry #{dest_path} does not exist. Nothing to do. (purge is on)" if ui
|
293
|
+
end
|
290
294
|
end
|
291
295
|
else
|
292
296
|
ui.output ("Not deleting extra entry #{dest_path} (purge is off)") if ui
|
data/lib/chef/config.rb
CHANGED
@@ -331,6 +331,7 @@ class Chef
|
|
331
331
|
|
332
332
|
default :rest_timeout, 300
|
333
333
|
default :yum_timeout, 900
|
334
|
+
default :yum_lock_timeout, 30
|
334
335
|
default :solo, false
|
335
336
|
default :splay, nil
|
336
337
|
default :why_run, false
|
@@ -551,8 +552,8 @@ class Chef
|
|
551
552
|
windows_home_path = env['SYSTEMDRIVE'] + env['HOMEPATH'] if env['SYSTEMDRIVE'] && env['HOMEPATH']
|
552
553
|
end
|
553
554
|
|
554
|
-
# returns a platform specific path to the user home dir
|
555
|
-
default( :user_home ) { env['HOME'] || windows_home_path || env['USERPROFILE'] }
|
555
|
+
# returns a platform specific path to the user home dir if set, otherwise default to current directory.
|
556
|
+
default( :user_home ) { env['HOME'] || windows_home_path || env['USERPROFILE'] || Dir.pwd }
|
556
557
|
|
557
558
|
# Enable file permission fixup for selinux. Fixup will be done
|
558
559
|
# only if selinux is enabled in the system.
|
data/lib/chef/config_fetcher.rb
CHANGED
@@ -18,7 +18,7 @@ class Chef
|
|
18
18
|
config_data = read_config
|
19
19
|
begin
|
20
20
|
Chef::JSONCompat.from_json(config_data)
|
21
|
-
rescue
|
21
|
+
rescue FFI_Yajl::ParseError => error
|
22
22
|
Chef::Application.fatal!("Could not parse the provided JSON file (#{config_location}): " + error.message, 2)
|
23
23
|
end
|
24
24
|
end
|
@@ -242,8 +242,8 @@ class Chef
|
|
242
242
|
# versions<Array>:: Returns the list of versions for the platform
|
243
243
|
def supports(platform, *version_args)
|
244
244
|
version = new_args_format(:supports, platform, version_args)
|
245
|
-
|
246
|
-
@platforms[platform] =
|
245
|
+
normalized_version = normalize_version_constraint(:supports, platform, version)
|
246
|
+
@platforms[platform] = normalized_version
|
247
247
|
@platforms[platform]
|
248
248
|
end
|
249
249
|
|
@@ -259,8 +259,8 @@ class Chef
|
|
259
259
|
# versions<Array>:: Returns the list of versions for the platform
|
260
260
|
def depends(cookbook, *version_args)
|
261
261
|
version = new_args_format(:depends, cookbook, version_args)
|
262
|
-
|
263
|
-
@dependencies[cookbook] =
|
262
|
+
normalized_version = normalize_version_constraint(:depends, cookbook, version)
|
263
|
+
@dependencies[cookbook] = normalized_version
|
264
264
|
@dependencies[cookbook]
|
265
265
|
end
|
266
266
|
|
@@ -276,8 +276,8 @@ class Chef
|
|
276
276
|
# versions<Array>:: Returns the list of versions for the platform
|
277
277
|
def recommends(cookbook, *version_args)
|
278
278
|
version = new_args_format(:recommends, cookbook, version_args)
|
279
|
-
|
280
|
-
@recommendations[cookbook] =
|
279
|
+
normalized_version = normalize_version_constraint(:recommends, cookbook, version)
|
280
|
+
@recommendations[cookbook] = normalized_version
|
281
281
|
@recommendations[cookbook]
|
282
282
|
end
|
283
283
|
|
@@ -293,8 +293,8 @@ class Chef
|
|
293
293
|
# versions<Array>:: Returns the list of versions for the platform
|
294
294
|
def suggests(cookbook, *version_args)
|
295
295
|
version = new_args_format(:suggests, cookbook, version_args)
|
296
|
-
|
297
|
-
@suggestions[cookbook] =
|
296
|
+
normalized_version = normalize_version_constraint(:suggests, cookbook, version)
|
297
|
+
@suggestions[cookbook] = normalized_version
|
298
298
|
@suggestions[cookbook]
|
299
299
|
end
|
300
300
|
|
@@ -310,8 +310,8 @@ class Chef
|
|
310
310
|
# versions<Array>:: Returns the list of versions for the platform
|
311
311
|
def conflicts(cookbook, *version_args)
|
312
312
|
version = new_args_format(:conflicts, cookbook, version_args)
|
313
|
-
|
314
|
-
@conflicting[cookbook] =
|
313
|
+
normalized_version = normalize_version_constraint(:conflicts, cookbook, version)
|
314
|
+
@conflicting[cookbook] = normalized_version
|
315
315
|
@conflicting[cookbook]
|
316
316
|
end
|
317
317
|
|
@@ -331,8 +331,8 @@ class Chef
|
|
331
331
|
# versions<Array>:: Returns the list of versions for the platform
|
332
332
|
def provides(cookbook, *version_args)
|
333
333
|
version = new_args_format(:provides, cookbook, version_args)
|
334
|
-
|
335
|
-
@providing[cookbook] =
|
334
|
+
normalized_version = normalize_version_constraint(:provides, cookbook, version)
|
335
|
+
@providing[cookbook] = normalized_version
|
336
336
|
@providing[cookbook]
|
337
337
|
end
|
338
338
|
|
@@ -347,8 +347,8 @@ class Chef
|
|
347
347
|
# versions<Array>:: Returns the list of versions for the platform
|
348
348
|
def replaces(cookbook, *version_args)
|
349
349
|
version = new_args_format(:replaces, cookbook, version_args)
|
350
|
-
|
351
|
-
@replacing[cookbook] =
|
350
|
+
normalized_version = normalize_version_constraint(:replaces, cookbook, version)
|
351
|
+
@replacing[cookbook] = normalized_version
|
352
352
|
@replacing[cookbook]
|
353
353
|
end
|
354
354
|
|
@@ -532,6 +532,12 @@ Called from:
|
|
532
532
|
INVALID
|
533
533
|
raise Exceptions::InvalidVersionConstraint, msg
|
534
534
|
end
|
535
|
+
|
536
|
+
def normalize_version_constraint(caller_name, dep_name, constraint_str)
|
537
|
+
version_constraint = validate_version_constraint(caller_name, dep_name, constraint_str)
|
538
|
+
"#{version_constraint.op} #{version_constraint.raw_version}"
|
539
|
+
end
|
540
|
+
|
535
541
|
# Verify that the given array is an array of strings
|
536
542
|
#
|
537
543
|
# Raise an exception if the members of the array are not Strings
|
@@ -68,6 +68,8 @@ class Chef
|
|
68
68
|
@eager_segments.freeze
|
69
69
|
|
70
70
|
@cookbooks_by_name, @events = cookbooks_by_name, events
|
71
|
+
|
72
|
+
@cookbook_full_file_paths = {}
|
71
73
|
end
|
72
74
|
|
73
75
|
def cache
|
@@ -136,14 +138,20 @@ class Chef
|
|
136
138
|
|
137
139
|
files.each do |file|
|
138
140
|
queue << lambda do |lock|
|
139
|
-
sync_file(file)
|
140
|
-
|
141
|
+
full_file_path = sync_file(file)
|
142
|
+
|
143
|
+
lock.synchronize {
|
144
|
+
# Save the full_path of the downloaded file to be restored in the manifest later
|
145
|
+
save_full_file_path(file, full_file_path)
|
146
|
+
mark_file_synced(file)
|
147
|
+
}
|
141
148
|
end
|
142
149
|
end
|
143
150
|
|
144
151
|
@events.cookbook_sync_start(cookbook_count)
|
145
152
|
queue.process(Chef::Config[:cookbook_sync_threads])
|
146
|
-
|
153
|
+
# Update the full file paths in the manifest
|
154
|
+
update_cookbook_filenames()
|
147
155
|
|
148
156
|
rescue Exception => e
|
149
157
|
@events.cookbook_sync_failed(cookbooks, e)
|
@@ -153,6 +161,14 @@ class Chef
|
|
153
161
|
true
|
154
162
|
end
|
155
163
|
|
164
|
+
# Saves the full_path to the file of the cookbook to be updated
|
165
|
+
# in the manifest later
|
166
|
+
def save_full_file_path(file, full_path)
|
167
|
+
@cookbook_full_file_paths[file.cookbook] ||= { }
|
168
|
+
@cookbook_full_file_paths[file.cookbook][file.segment] ||= [ ]
|
169
|
+
@cookbook_full_file_paths[file.cookbook][file.segment] << full_path
|
170
|
+
end
|
171
|
+
|
156
172
|
# Iterates over cached cookbooks' files, removing files belonging to
|
157
173
|
# cookbooks that don't appear in +cookbook_hash+
|
158
174
|
def clear_obsoleted_cookbooks
|
@@ -170,14 +186,9 @@ class Chef
|
|
170
186
|
end
|
171
187
|
|
172
188
|
def update_cookbook_filenames
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
segment_files = files_by_segment[segment]
|
177
|
-
next unless segment_files
|
178
|
-
|
179
|
-
filenames = segment_files.map { |file| file.manifest_record['path'] }
|
180
|
-
cookbook.replace_segment_filenames(segment, filenames)
|
189
|
+
@cookbook_full_file_paths.each do |cookbook, file_segments|
|
190
|
+
file_segments.each do |segment, full_paths|
|
191
|
+
cookbook.replace_segment_filenames(segment, full_paths)
|
181
192
|
end
|
182
193
|
end
|
183
194
|
end
|
@@ -204,8 +215,8 @@ class Chef
|
|
204
215
|
Chef::Log.debug("Not storing #{cache_filename}, as the cache is up to date.")
|
205
216
|
end
|
206
217
|
|
207
|
-
#
|
208
|
-
|
218
|
+
# Load the file in the cache and return the full file path to the loaded file
|
219
|
+
cache.load(cache_filename, false)
|
209
220
|
end
|
210
221
|
|
211
222
|
def cached_copy_up_to_date?(local_path, expected_checksum)
|
@@ -17,7 +17,7 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require 'yaml'
|
20
|
-
require '
|
20
|
+
require 'ffi_yajl'
|
21
21
|
require 'openssl'
|
22
22
|
require 'base64'
|
23
23
|
require 'digest/sha2'
|
@@ -121,8 +121,8 @@ class Chef::EncryptedDataBagItem
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def for_decrypted_item
|
124
|
-
|
125
|
-
rescue
|
124
|
+
FFI_Yajl::Parser.parse(decrypted_data)["json_wrapper"]
|
125
|
+
rescue FFI_Yajl::ParseError
|
126
126
|
# convert to a DecryptionFailure error because the most likely scenario
|
127
127
|
# here is that the decryption step was unsuccessful but returned bad
|
128
128
|
# data rather than raising an error.
|
@@ -19,7 +19,7 @@
|
|
19
19
|
require 'base64'
|
20
20
|
require 'digest/sha2'
|
21
21
|
require 'openssl'
|
22
|
-
require '
|
22
|
+
require 'ffi_yajl'
|
23
23
|
require 'chef/encrypted_data_bag_item'
|
24
24
|
require 'chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format'
|
25
25
|
|
@@ -111,7 +111,7 @@ class Chef::EncryptedDataBagItem
|
|
111
111
|
# Strings) that do not produce valid JSON when serialized without the
|
112
112
|
# wrapper.
|
113
113
|
def serialized_data
|
114
|
-
|
114
|
+
FFI_Yajl::Encoder.encode(:json_wrapper => plaintext_data)
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
data/lib/chef/exceptions.rb
CHANGED
@@ -64,6 +64,7 @@ class Chef
|
|
64
64
|
class PrivateKeyMissing < RuntimeError; end
|
65
65
|
class CannotWritePrivateKey < RuntimeError; end
|
66
66
|
class RoleNotFound < RuntimeError; end
|
67
|
+
class DuplicateRole < RuntimeError; end
|
67
68
|
class ValidationFailed < ArgumentError; end
|
68
69
|
class InvalidPrivateKey < ArgumentError; end
|
69
70
|
class ConfigurationError < ArgumentError; end
|
@@ -60,7 +60,7 @@ class Chef
|
|
60
60
|
# Catch and raise if the user is not elevated enough.
|
61
61
|
# At this point we can't configure the file as expected so
|
62
62
|
# we're failing action on the resource.
|
63
|
-
raise Chef::Exceptions::WindowsNotAdmin, "can not get the security information for '#{dst}' due to missing Administrator
|
63
|
+
raise Chef::Exceptions::WindowsNotAdmin, "can not get the security information for '#{dst}' due to missing Administrator privileges."
|
64
64
|
end
|
65
65
|
|
66
66
|
if dst_sd.dacl_present?
|
@@ -40,7 +40,7 @@ class Chef
|
|
40
40
|
end
|
41
41
|
|
42
42
|
unless dynamic_resource?
|
43
|
-
error_description.section("Resource Declaration:", recipe_snippet)
|
43
|
+
error_description.section("Resource Declaration:", resource.sensitive ? "suppressed sensitive resource output" : recipe_snippet)
|
44
44
|
end
|
45
45
|
|
46
46
|
error_description.section("Compiled Resource:", "#{resource.to_text}")
|
data/lib/chef/http.rb
CHANGED
@@ -21,12 +21,14 @@
|
|
21
21
|
# limitations under the License.
|
22
22
|
#
|
23
23
|
|
24
|
+
require 'tempfile'
|
24
25
|
require 'net/https'
|
25
26
|
require 'uri'
|
26
27
|
require 'chef/http/basic_client'
|
27
28
|
require 'chef/monkey_patches/string'
|
28
29
|
require 'chef/monkey_patches/net_http'
|
29
30
|
require 'chef/config'
|
31
|
+
require 'chef/platform/query_helpers'
|
30
32
|
require 'chef/exceptions'
|
31
33
|
|
32
34
|
class Chef
|
@@ -207,7 +209,10 @@ class Chef
|
|
207
209
|
elsif path.nil? or path.empty?
|
208
210
|
URI.parse(@url)
|
209
211
|
else
|
210
|
-
|
212
|
+
# The regular expressions used here are to make sure '@url' does not have
|
213
|
+
# any trailing slashes and 'path' does not have any leading slashes. This
|
214
|
+
# way they are always joined correctly using just one slash.
|
215
|
+
URI.parse(@url.gsub(%r{/+$}, '') + '/' + path.gsub(%r{^/+}, ''))
|
211
216
|
end
|
212
217
|
end
|
213
218
|
|
@@ -60,6 +60,8 @@ class Chef
|
|
60
60
|
|
61
61
|
HOST_LOWER = "host".freeze
|
62
62
|
|
63
|
+
URI_SCHEME_DEFAULT_PORT = { 'http' => 80, 'https' => 443 }.freeze
|
64
|
+
|
63
65
|
def self.user_agent=(ua)
|
64
66
|
@user_agent = ua
|
65
67
|
end
|
@@ -138,7 +140,13 @@ class Chef
|
|
138
140
|
# No response compression unless we asked for it explicitly:
|
139
141
|
@headers[HTTPRequest::ACCEPT_ENCODING] ||= "identity"
|
140
142
|
@headers['X-Chef-Version'] = ::Chef::VERSION
|
141
|
-
|
143
|
+
|
144
|
+
# Only include port in Host header when it is not the default port
|
145
|
+
# for the url scheme (80;443) - Fixes CHEF-5355
|
146
|
+
host_header = uri_safe_host.dup
|
147
|
+
host_header << ":#{port}" unless URI_SCHEME_DEFAULT_PORT[@url.scheme] == port.to_i
|
148
|
+
@headers['Host'] = host_header unless @headers.keys.any? {|k| k.downcase.to_s == HOST_LOWER }
|
149
|
+
|
142
150
|
@headers
|
143
151
|
end
|
144
152
|
|
data/lib/chef/http/simple.rb
CHANGED
data/lib/chef/json_compat.rb
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
|
18
18
|
# Wrapper class for interacting with JSON.
|
19
19
|
|
20
|
-
require '
|
21
|
-
require '
|
20
|
+
require 'ffi_yajl'
|
21
|
+
require 'ffi_yajl/json_gem' # XXX: parts of chef require JSON gem's Hash#to_json monkeypatch
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class JSONCompat
|
@@ -40,20 +40,9 @@ class Chef
|
|
40
40
|
|
41
41
|
class <<self
|
42
42
|
|
43
|
-
# See CHEF-1292/PL-538. Increase the max nesting for JSON, which defaults
|
44
|
-
# to 19, and isn't enough for some (for example, a Node within a Node)
|
45
|
-
# structures.
|
46
|
-
def opts_add_max_nesting(opts)
|
47
|
-
if opts.nil? || !opts.has_key?(:max_nesting)
|
48
|
-
opts = opts.nil? ? Hash.new : opts.clone
|
49
|
-
opts[:max_nesting] = JSON_MAX_NESTING
|
50
|
-
end
|
51
|
-
opts
|
52
|
-
end
|
53
|
-
|
54
43
|
# Just call the JSON gem's parse method with a modified :max_nesting field
|
55
44
|
def from_json(source, opts = {})
|
56
|
-
obj = ::
|
45
|
+
obj = ::FFI_Yajl::Parser.parse(source)
|
57
46
|
|
58
47
|
# JSON gem requires top level object to be a Hash or Array (otherwise
|
59
48
|
# you get the "must contain two octets" error). Yajl doesn't impose the
|
@@ -99,11 +88,11 @@ class Chef
|
|
99
88
|
end
|
100
89
|
|
101
90
|
def to_json(obj, opts = nil)
|
102
|
-
obj.to_json(
|
91
|
+
obj.to_json(opts)
|
103
92
|
end
|
104
93
|
|
105
94
|
def to_json_pretty(obj, opts = nil)
|
106
|
-
::JSON.pretty_generate(obj,
|
95
|
+
::JSON.pretty_generate(obj, opts)
|
107
96
|
end
|
108
97
|
|
109
98
|
|
data/lib/chef/knife/bootstrap.rb
CHANGED
@@ -239,6 +239,8 @@ class Chef
|
|
239
239
|
if Array(@name_args).first.nil?
|
240
240
|
ui.error("Must pass an FQDN or ip to bootstrap")
|
241
241
|
exit 1
|
242
|
+
elsif Array(@name_args).first == "windows"
|
243
|
+
ui.warn("Hostname containing 'windows' specified. Please install 'knife-windows' if you are attempting to bootstrap a Windows node via WinRM.")
|
242
244
|
end
|
243
245
|
end
|
244
246
|
|
@@ -5,8 +5,8 @@ if [ ! -f /usr/bin/chef-client ]; then
|
|
5
5
|
pacman -Syy
|
6
6
|
pacman -S --noconfirm ruby ntp base-devel
|
7
7
|
ntpdate -u pool.ntp.org
|
8
|
-
gem install ohai --no-
|
9
|
-
gem install chef --no-
|
8
|
+
gem install ohai --no-user-install --no-document --verbose
|
9
|
+
gem install chef --no-user-install --no-document --verbose <%= bootstrap_version_string %>
|
10
10
|
fi
|
11
11
|
|
12
12
|
mkdir -p /etc/chef
|
@@ -16,6 +16,8 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
+
require 'ffi_yajl'
|
20
|
+
|
19
21
|
class Chef
|
20
22
|
class Knife
|
21
23
|
module Core
|
@@ -83,7 +85,7 @@ class Chef
|
|
83
85
|
def object_from_file(filename)
|
84
86
|
case filename
|
85
87
|
when /\.(js|json)$/
|
86
|
-
r =
|
88
|
+
r = FFI_Yajl::Parser.parse(IO.read(filename))
|
87
89
|
|
88
90
|
# Chef::DataBagItem doesn't work well with the json_create method
|
89
91
|
if @klass == Chef::DataBagItem
|