summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormwrock <matt@mattwrock.com>2020-09-04 18:46:27 -0700
committermwrock <matt@mattwrock.com>2020-09-08 14:46:36 -0700
commit41ae92bd5070b450e04f02ae9a1d30987d14bb93 (patch)
tree952399197c5344e29a648560fda242ef77a7dd7e
parent313afa345a0d19019218807a16bf6fdd6447a87b (diff)
downloadchef-41ae92bd5070b450e04f02ae9a1d30987d14bb93.tar.gz
use autoloading for many required gems
Signed-off-by: mwrock <matt@mattwrock.com>
-rw-r--r--azure-pipelines.yml2
-rw-r--r--chef-config/lib/chef-config/config.rb34
-rw-r--r--chef-config/lib/chef-config/mixin/credentials.rb2
-rw-r--r--lib/chef/application.rb4
-rw-r--r--lib/chef/application/base.rb5
-rw-r--r--lib/chef/application/client.rb7
-rw-r--r--lib/chef/application/knife.rb4
-rw-r--r--lib/chef/client.rb4
-rw-r--r--lib/chef/cookbook_site_streaming_uploader.rb14
-rw-r--r--lib/chef/cookbook_uploader.rb2
-rw-r--r--lib/chef/data_collector.rb2
-rw-r--r--lib/chef/digester.rb4
-rw-r--r--lib/chef/dsl/chef_vault.rb2
-rw-r--r--lib/chef/dsl/data_query.rb4
-rw-r--r--lib/chef/dsl/platform_introspection.rb2
-rw-r--r--lib/chef/encrypted_data_bag_item.rb4
-rw-r--r--lib/chef/encrypted_data_bag_item/decryptor.rb6
-rw-r--r--lib/chef/encrypted_data_bag_item/encryptor.rb6
-rw-r--r--lib/chef/formatters/error_inspectors/api_error_formatting.rb1
-rw-r--r--lib/chef/http.rb10
-rw-r--r--lib/chef/http/auth_credentials.rb6
-rw-r--r--lib/chef/http/authenticator.rb2
-rw-r--r--lib/chef/http/basic_client.rb6
-rw-r--r--lib/chef/http/http_request.rb8
-rw-r--r--lib/chef/http/socketless_chef_zero_client.rb3
-rw-r--r--lib/chef/http/ssl_policies.rb2
-rw-r--r--lib/chef/json_compat.rb2
-rw-r--r--lib/chef/knife/core/object_loader.rb2
-rw-r--r--lib/chef/knife/yaml_convert.rb2
-rw-r--r--lib/chef/mixin/openssl_helper.rb5
-rw-r--r--lib/chef/mixin/template.rb4
-rw-r--r--lib/chef/mixin/uris.rb4
-rw-r--r--lib/chef/monkey_patches/net_http.rb8
-rw-r--r--lib/chef/provider/ifconfig.rb2
-rw-r--r--lib/chef/provider/launchd.rb2
-rw-r--r--lib/chef/provider/package/rubygems.rb33
-rw-r--r--lib/chef/provider/package/windows.rb4
-rw-r--r--lib/chef/provider/package/windows/registry_uninstall_entry.rb4
-rw-r--r--lib/chef/provider/remote_file/content.rb3
-rw-r--r--lib/chef/provider/remote_file/ftp.rb10
-rw-r--r--lib/chef/provider/remote_file/sftp.rb10
-rw-r--r--lib/chef/provider/route.rb2
-rw-r--r--lib/chef/provider/service/macosx.rb2
-rw-r--r--lib/chef/provider/user/dscl.rb4
-rw-r--r--lib/chef/provider/user/mac.rb2
-rw-r--r--lib/chef/provider/windows_task.rb3
-rw-r--r--lib/chef/recipe.rb2
-rw-r--r--lib/chef/resource.rb2
-rw-r--r--lib/chef/resource/apt_repository.rb2
-rw-r--r--lib/chef/resource/build_essential.rb2
-rw-r--r--lib/chef/resource/chef_vault_secret.rb2
-rw-r--r--lib/chef/resource/macos_userdefaults.rb2
-rw-r--r--lib/chef/resource/openssl_ec_private_key.rb8
-rw-r--r--lib/chef/resource/openssl_rsa_private_key.rb8
-rw-r--r--lib/chef/resource/osx_profile.rb4
-rw-r--r--lib/chef/resource/plist.rb2
-rw-r--r--lib/chef/resource/windows_certificate.rb6
-rw-r--r--lib/chef/resource/windows_printer.rb8
-rw-r--r--lib/chef/resource/windows_printer_port.rb10
-rw-r--r--lib/chef/run_context.rb2
-rw-r--r--lib/chef/run_context/cookbook_compiler.rb2
-rw-r--r--lib/chef/search/query.rb9
-rw-r--r--lib/chef/shell.rb5
-rw-r--r--lib/chef/train_transport.rb2
-rw-r--r--lib/chef/util/diff.rb6
-rw-r--r--lib/chef/util/powershell/cmdlet.rb4
-rw-r--r--lib/chef/util/powershell/ps_credential.rb32
-rw-r--r--lib/chef/win32/registry.rb3
68 files changed, 220 insertions, 157 deletions
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index f808fa6ff9..78cfdef9f0 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -82,6 +82,8 @@ jobs:
bundle config set without 'omnibus_package docgen ruby_prof'
bundle install --jobs=3 --retry=3 --path=vendor/bundle
gem install berkshelf --no-doc
+ $env:RUBYOPT="-W0"
berks vendor cookbooks
+ $env:RUBYOPT="-W1"
chef-client -z -o end_to_end --chef-license accept-no-persist
displayName: 'Run end_to_end::default recipe'
diff --git a/chef-config/lib/chef-config/config.rb b/chef-config/lib/chef-config/config.rb
index a767d072ef..2c4323db82 100644
--- a/chef-config/lib/chef-config/config.rb
+++ b/chef-config/lib/chef-config/config.rb
@@ -20,8 +20,8 @@
# limitations under the License.
require "mixlib/config" unless defined?(Mixlib::Config)
-require "pathname" unless defined?(Pathname)
-require "chef-utils" unless defined?(ChefUtils::CANARY)
+autoload :Pathname, "pathname"
+autoload :ChefUtils, "chef-utils"
require_relative "fips"
require_relative "logger"
@@ -29,11 +29,13 @@ require_relative "windows"
require_relative "path_helper"
require_relative "mixin/fuzzy_hostname_matcher"
-require "mixlib/shellout" unless defined?(Mixlib::ShellOut::DEFAULT_READ_TIMEOUT)
-require "uri" unless defined?(URI)
-require "addressable/uri" unless defined?(Addressable::URI)
-require "openssl" unless defined?(OpenSSL)
-require "yaml"
+module Mixlib
+ autoload :ShellOut, "mixlib/shellout"
+end
+autoload :URI, "uri"
+autoload :Addressable, "addressable/uri"
+autoload :OpenSSL, "openssl"
+autoload :YAML, "yaml"
require_relative "dist"
module ChefConfig
@@ -1102,13 +1104,6 @@ module ChefConfig
export_no_proxy(no_proxy) if key?(:no_proxy) && no_proxy
end
- # Character classes for Addressable
- # See https://www.ietf.org/rfc/rfc3986.txt 3.2.1
- # The user part may not have a : in it
- USER = Addressable::URI::CharacterClasses::UNRESERVED + Addressable::URI::CharacterClasses::SUB_DELIMS
- # The password part may have any valid USERINFO characters
- PASSWORD = USER + "\\:"
-
# Builds a proxy uri and exports it to the appropriate environment variables. Examples:
# http://username:password@hostname:port
# https://username@hostname:port
@@ -1120,15 +1115,22 @@ module ChefConfig
# pass = password
# @api private
def self.export_proxy(scheme, path, user, pass)
+ # Character classes for Addressable
+ # See https://www.ietf.org/rfc/rfc3986.txt 3.2.1
+ # The user part may not have a : in it
+ user_class = Addressable::URI::CharacterClasses::UNRESERVED + Addressable::URI::CharacterClasses::SUB_DELIMS
+ # The password part may have any valid USERINFO characters
+ password_class = user_class + "\\:"
+
path = "#{scheme}://#{path}" unless path.include?("://")
# URI.split returns the following parts:
# [scheme, userinfo, host, port, registry, path, opaque, query, fragment]
uri = Addressable::URI.encode(path, Addressable::URI)
if user && !user.empty?
- userinfo = Addressable::URI.encode_component(user, USER)
+ userinfo = Addressable::URI.encode_component(user, user_class)
if pass
- userinfo << ":#{Addressable::URI.encode_component(pass, PASSWORD)}"
+ userinfo << ":#{Addressable::URI.encode_component(pass, password_class)}"
end
uri.userinfo = userinfo
end
diff --git a/chef-config/lib/chef-config/mixin/credentials.rb b/chef-config/lib/chef-config/mixin/credentials.rb
index 12fceef75d..de004a062f 100644
--- a/chef-config/lib/chef-config/mixin/credentials.rb
+++ b/chef-config/lib/chef-config/mixin/credentials.rb
@@ -15,7 +15,7 @@
# limitations under the License.
#
-require "tomlrb"
+autoload :Tomlrb, "tomlrb"
require_relative "../path_helper"
module ChefConfig
diff --git a/lib/chef/application.rb b/lib/chef/application.rb
index 42bcf9445e..be69e01f7f 100644
--- a/lib/chef/application.rb
+++ b/lib/chef/application.rb
@@ -28,7 +28,9 @@ require "tmpdir" unless defined?(Dir.mktmpdir)
require "rbconfig" unless defined?(RbConfig)
require_relative "application/exit_code"
require_relative "dist"
-require "license_acceptance/acceptor"
+module LicenseAcceptance
+ autoload :Acceptor, "license_acceptance/acceptor"
+end
class Chef
class Application
diff --git a/lib/chef/application/base.rb b/lib/chef/application/base.rb
index 1749284ea2..738788fa96 100644
--- a/lib/chef/application/base.rb
+++ b/lib/chef/application/base.rb
@@ -24,7 +24,9 @@ require_relative "../dist"
require_relative "../daemon"
require "chef-config/mixin/dot_d"
require "license_acceptance/cli_flags/mixlib_cli"
-require "mixlib/archive" unless defined?(Mixlib::Archive)
+module Mixlib
+ autoload :Archive, "mixlib/archive"
+end
# This is a temporary class being used as a part of an effort to reduce duplication
# between Chef::Application::Client and Chef::Application::Solo.
@@ -360,6 +362,7 @@ class Chef::Application::Base < Chef::Application
end
def fetch_recipe_tarball(url, path)
+ require "open-uri" unless defined?(OpenURI)
Chef::Log.trace("Download recipes tarball from #{url} to #{path}")
if File.exist?(url)
FileUtils.cp(url, path)
diff --git a/lib/chef/application/client.rb b/lib/chef/application/client.rb
index af942c0254..03ceff1727 100644
--- a/lib/chef/application/client.rb
+++ b/lib/chef/application/client.rb
@@ -20,7 +20,12 @@
require_relative "base"
require_relative "../handler/error_report"
require_relative "../workstation_config_loader"
-require "uri" unless defined?(URI)
+autoload :URI, "uri"
+module Mixlib
+ module Authentication
+ autoload :Log, "mixlib/authentication"
+ end
+end
# DO NOT MAKE EDITS, see Chef::Application::Base
#
diff --git a/lib/chef/application/knife.rb b/lib/chef/application/knife.rb
index c719768f11..3d6563f43a 100644
--- a/lib/chef/application/knife.rb
+++ b/lib/chef/application/knife.rb
@@ -19,7 +19,9 @@ require_relative "../knife"
require_relative "../application"
require "mixlib/log"
require "ohai/config"
-require "chef/monkey_patches/net_http.rb"
+module Net
+ autoload :HTTP, File.expand_path("../monkey_patches/net_http", __dir__)
+end
require_relative "../dist"
class Chef::Application::Knife < Chef::Application
diff --git a/lib/chef/client.rb b/lib/chef/client.rb
index 91d1758f70..1a6da64c8f 100644
--- a/lib/chef/client.rb
+++ b/lib/chef/client.rb
@@ -29,7 +29,7 @@ require_relative "api_client/registration"
require_relative "node"
require_relative "role"
require_relative "file_cache"
-require_relative "run_context"
+Chef.autoload :RunContext, File.expand_path("run_context", __dir__)
require_relative "runner"
require_relative "run_status"
require_relative "cookbook/cookbook_collection"
@@ -48,7 +48,7 @@ require_relative "action_collection"
require_relative "resource_reporter"
require_relative "data_collector"
require_relative "run_lock"
-require_relative "policy_builder"
+Chef.autoload :PolicyBuilder, File.expand_path("policy_builder", __dir__)
require_relative "request_id"
require_relative "platform/rebooter"
require_relative "mixin/deprecation"
diff --git a/lib/chef/cookbook_site_streaming_uploader.rb b/lib/chef/cookbook_site_streaming_uploader.rb
index 1598808234..7de89f9ad8 100644
--- a/lib/chef/cookbook_site_streaming_uploader.rb
+++ b/lib/chef/cookbook_site_streaming_uploader.rb
@@ -18,10 +18,16 @@
# limitations under the License.
#
-require "uri" unless defined?(URI)
-require "net/http" unless defined?(Net::HTTP)
-require "mixlib/authentication/signedheaderauth"
-require "openssl" unless defined?(OpenSSL)
+autoload :URI, "uri"
+module Net
+ autoload :HTTP, File.expand_path("monkey_patches/net_http", __dir__)
+end
+autoload :OpenSSL, "openssl"
+module Mixlib
+ module Authentication
+ autoload :SignedHeaderAuth, "mixlib/authentication/signedheaderauth"
+ end
+end
require_relative "dist"
class Chef
diff --git a/lib/chef/cookbook_uploader.rb b/lib/chef/cookbook_uploader.rb
index 816cbf95fe..235a539b94 100644
--- a/lib/chef/cookbook_uploader.rb
+++ b/lib/chef/cookbook_uploader.rb
@@ -1,5 +1,5 @@
-require "set" unless defined?(Set)
+autoload :Set, "set"
require_relative "exceptions"
require_relative "knife/cookbook_metadata"
require_relative "digester"
diff --git a/lib/chef/data_collector.rb b/lib/chef/data_collector.rb
index 5424461f76..e1d7d9b97b 100644
--- a/lib/chef/data_collector.rb
+++ b/lib/chef/data_collector.rb
@@ -21,7 +21,7 @@
require_relative "server_api"
require_relative "http/simple_json"
require_relative "event_dispatch/base"
-require "set" unless defined?(Set)
+autoload :Set, "set"
require_relative "data_collector/run_end_message"
require_relative "data_collector/run_start_message"
require_relative "data_collector/config_validation"
diff --git a/lib/chef/digester.rb b/lib/chef/digester.rb
index b9180ddd24..36df63f3a1 100644
--- a/lib/chef/digester.rb
+++ b/lib/chef/digester.rb
@@ -18,8 +18,8 @@
# limitations under the License.
#
-require "openssl" unless defined?(OpenSSL)
-require "digest" unless defined?(Digest)
+autoload :OpenSSL, "openssl"
+autoload :Digest, "digest"
require "singleton" unless defined?(Singleton)
class Chef
diff --git a/lib/chef/dsl/chef_vault.rb b/lib/chef/dsl/chef_vault.rb
index bfb256ef3f..031627c358 100644
--- a/lib/chef/dsl/chef_vault.rb
+++ b/lib/chef/dsl/chef_vault.rb
@@ -17,7 +17,7 @@
# limitations under the License.
#
-require "chef-vault"
+autoload :ChefVault, "chef-vault"
require_relative "data_query"
class Chef
diff --git a/lib/chef/dsl/data_query.rb b/lib/chef/dsl/data_query.rb
index 8bfeff96b1..3b15affb5b 100644
--- a/lib/chef/dsl/data_query.rb
+++ b/lib/chef/dsl/data_query.rb
@@ -17,8 +17,8 @@
#
require_relative "../search/query"
-require_relative "../data_bag"
-require_relative "../data_bag_item"
+Chef.autoload :DataBag, File.expand_path("../data_bag", __dir__)
+Chef.autoload :DataBagItem, File.expand_path("../data_bag_item", __dir__)
require_relative "../encrypted_data_bag_item"
require_relative "../encrypted_data_bag_item/check_encrypted"
diff --git a/lib/chef/dsl/platform_introspection.rb b/lib/chef/dsl/platform_introspection.rb
index aa6c8946d9..49ec396cf2 100644
--- a/lib/chef/dsl/platform_introspection.rb
+++ b/lib/chef/dsl/platform_introspection.rb
@@ -16,7 +16,7 @@
# limitations under the License.
#
-require "chef-utils" unless defined?(ChefUtils::CANARY)
+autoload :ChefUtils, "chef-utils"
require_relative "../mixin/chef_utils_wiring" unless defined?(Chef::Mixin::ChefUtilsWiring)
class Chef
diff --git a/lib/chef/encrypted_data_bag_item.rb b/lib/chef/encrypted_data_bag_item.rb
index 4a28d7ed35..c36c6923c5 100644
--- a/lib/chef/encrypted_data_bag_item.rb
+++ b/lib/chef/encrypted_data_bag_item.rb
@@ -17,11 +17,10 @@
#
require_relative "config"
-require_relative "data_bag_item"
+Chef.autoload :DataBagItem, File.expand_path("data_bag_item", __dir__)
require_relative "encrypted_data_bag_item/decryptor"
require_relative "encrypted_data_bag_item/encryptor"
require_relative "dist"
-require "open-uri" unless defined?(OpenURI)
# An EncryptedDataBagItem represents a read-only data bag item where
# all values, except for the value associated with the id key, have
@@ -129,6 +128,7 @@ class Chef::EncryptedDataBagItem
end
def self.load_secret(path = nil)
+ require "open-uri" unless defined?(OpenURI)
path ||= Chef::Config[:encrypted_data_bag_secret]
unless path
raise ArgumentError, "No secret specified and no secret found at #{Chef::Config.platform_specific_path(Chef::Dist::CONF_DIR + "/encrypted_data_bag_secret")}"
diff --git a/lib/chef/encrypted_data_bag_item/decryptor.rb b/lib/chef/encrypted_data_bag_item/decryptor.rb
index 9bc4f32ed3..57119796a9 100644
--- a/lib/chef/encrypted_data_bag_item/decryptor.rb
+++ b/lib/chef/encrypted_data_bag_item/decryptor.rb
@@ -16,10 +16,10 @@
# limitations under the License.
#
-require "yaml" unless defined?(YAML)
+autoload :YAML, "yaml"
require_relative "../json_compat"
-require "openssl" unless defined?(OpenSSL)
-require "base64" unless defined?(Base64)
+autoload :OpenSSL, "openssl"
+autoload :Base64, "base64"
require "digest/sha2" unless defined?(Digest::SHA2)
require_relative "../encrypted_data_bag_item"
require_relative "unsupported_encrypted_data_bag_item_format"
diff --git a/lib/chef/encrypted_data_bag_item/encryptor.rb b/lib/chef/encrypted_data_bag_item/encryptor.rb
index 14094928ca..f068d134d8 100644
--- a/lib/chef/encrypted_data_bag_item/encryptor.rb
+++ b/lib/chef/encrypted_data_bag_item/encryptor.rb
@@ -16,10 +16,10 @@
# limitations under the License.
#
-require "base64" unless defined?(Base64)
+autoload :Base64, "base64"
require "digest/sha2" unless defined?(Digest::SHA2)
-require "openssl" unless defined?(OpenSSL)
-require "ffi_yajl" unless defined?(FFI_Yajl)
+autoload :OpenSSL, "openssl"
+autoload :FFI_Yajl, "ffi_yajl"
require_relative "../encrypted_data_bag_item"
require_relative "unsupported_encrypted_data_bag_item_format"
require_relative "encryption_failure"
diff --git a/lib/chef/formatters/error_inspectors/api_error_formatting.rb b/lib/chef/formatters/error_inspectors/api_error_formatting.rb
index 6a1c75e0d3..47e8523323 100644
--- a/lib/chef/formatters/error_inspectors/api_error_formatting.rb
+++ b/lib/chef/formatters/error_inspectors/api_error_formatting.rb
@@ -18,6 +18,7 @@
require_relative "../../http/authenticator"
require_relative "../../dist"
+require "timeout" unless defined?(Timeout)
class Chef
module Formatters
diff --git a/lib/chef/http.rb b/lib/chef/http.rb
index 650ee73bb7..619cdbecec 100644
--- a/lib/chef/http.rb
+++ b/lib/chef/http.rb
@@ -22,11 +22,13 @@
#
require "tempfile" unless defined?(Tempfile)
-require "openssl" unless defined?(OpenSSL)
-require "net/http" unless defined?(Net::HTTP)
-require "uri" unless defined?(URI)
+autoload :OpenSSL, "openssl"
+autoload :URI, "uri"
+module Net
+ autoload :HTTP, File.expand_path("monkey_patches/net_http", __dir__)
+ autoload :HTTPClientException, File.expand_path("monkey_patches/net_http", __dir__)
+end
require_relative "http/basic_client"
-require_relative "monkey_patches/net_http"
require_relative "config"
require_relative "platform/query_helpers"
require_relative "exceptions"
diff --git a/lib/chef/http/auth_credentials.rb b/lib/chef/http/auth_credentials.rb
index 765c9ee778..1702ae7e24 100644
--- a/lib/chef/http/auth_credentials.rb
+++ b/lib/chef/http/auth_credentials.rb
@@ -21,7 +21,11 @@
# limitations under the License.
#
require_relative "../log"
-require "mixlib/authentication/signedheaderauth"
+module Mixlib
+ module Authentication
+ autoload :SignedHeaderAuth, "mixlib/authentication/signedheaderauth"
+ end
+end
class Chef
class HTTP
diff --git a/lib/chef/http/authenticator.rb b/lib/chef/http/authenticator.rb
index 4a29fcea33..80b32be750 100644
--- a/lib/chef/http/authenticator.rb
+++ b/lib/chef/http/authenticator.rb
@@ -18,7 +18,7 @@
require_relative "auth_credentials"
require_relative "../exceptions"
-require "openssl" unless defined?(OpenSSL)
+autoload :OpenSSL, "openssl"
class Chef
class HTTP
diff --git a/lib/chef/http/basic_client.rb b/lib/chef/http/basic_client.rb
index fa77b67427..f4be3b98ec 100644
--- a/lib/chef/http/basic_client.rb
+++ b/lib/chef/http/basic_client.rb
@@ -20,8 +20,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-require "uri" unless defined?(URI)
-require "net/http" unless defined?(Net::HTTP)
+autoload :URI, "uri"
+module Net
+ autoload :HTTP, File.expand_path("../monkey_patches/net_http", __dir__)
+end
require_relative "ssl_policies"
require_relative "http_request"
diff --git a/lib/chef/http/http_request.rb b/lib/chef/http/http_request.rb
index 9569c4133a..dbb1e0ce70 100644
--- a/lib/chef/http/http_request.rb
+++ b/lib/chef/http/http_request.rb
@@ -20,9 +20,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-require "uri" unless defined?(URI)
-require "cgi" unless defined?(CGI)
-require "net/http" unless defined?(Net::HTTP)
+autoload :URI, "uri"
+autoload :CGI, "cgi"
+module Net
+ autoload :HTTP, File.expand_path("../monkey_patches/net_http", __dir__)
+end
require_relative "../dist"
# To load faster, we only want ohai's version string.
diff --git a/lib/chef/http/socketless_chef_zero_client.rb b/lib/chef/http/socketless_chef_zero_client.rb
index 0cd7b564d9..feebba5a2c 100644
--- a/lib/chef/http/socketless_chef_zero_client.rb
+++ b/lib/chef/http/socketless_chef_zero_client.rb
@@ -45,6 +45,9 @@
require "chef_zero/server"
require_relative "../dist"
+module Net
+ autoload :HTTPResponse, File.expand_path("../monkey_patches/net_http", __dir__)
+end
class Chef
class HTTP
diff --git a/lib/chef/http/ssl_policies.rb b/lib/chef/http/ssl_policies.rb
index 05e4baf581..d03494defe 100644
--- a/lib/chef/http/ssl_policies.rb
+++ b/lib/chef/http/ssl_policies.rb
@@ -21,7 +21,7 @@
# limitations under the License.
#
-require "openssl" unless defined?(OpenSSL)
+autoload :OpenSSL, "openssl"
require_relative "../util/path_helper"
class Chef
diff --git a/lib/chef/json_compat.rb b/lib/chef/json_compat.rb
index 188a5d38f3..47d66dba96 100644
--- a/lib/chef/json_compat.rb
+++ b/lib/chef/json_compat.rb
@@ -17,7 +17,7 @@
# Wrapper class for interacting with JSON.
-require "ffi_yajl" unless defined?(FFI_Yajl)
+autoload :FFI_Yajl, "ffi_yajl"
require_relative "exceptions"
# We're requiring this to prevent breaking consumers using Hash.to_json
require "json" unless defined?(JSON)
diff --git a/lib/chef/knife/core/object_loader.rb b/lib/chef/knife/core/object_loader.rb
index 9cabbf97db..5421fc46ce 100644
--- a/lib/chef/knife/core/object_loader.rb
+++ b/lib/chef/knife/core/object_loader.rb
@@ -16,7 +16,7 @@
# limitations under the License.
#
-require "ffi_yajl" unless defined?(FFI_Yajl)
+autoload :FFI_Yajl, "ffi_yajl"
require_relative "../../util/path_helper"
require_relative "../../data_bag_item"
diff --git a/lib/chef/knife/yaml_convert.rb b/lib/chef/knife/yaml_convert.rb
index ff64f5c53a..6bd2d1c0ea 100644
--- a/lib/chef/knife/yaml_convert.rb
+++ b/lib/chef/knife/yaml_convert.rb
@@ -16,7 +16,7 @@
# limitations under the License.
#
-require "yaml" unless defined?(YAML)
+autoload :YAML, "yaml"
require_relative "../knife"
class Chef::Knife::YamlConvert < Chef::Knife
diff --git a/lib/chef/mixin/openssl_helper.rb b/lib/chef/mixin/openssl_helper.rb
index db422175bb..1d50523df8 100644
--- a/lib/chef/mixin/openssl_helper.rb
+++ b/lib/chef/mixin/openssl_helper.rb
@@ -14,15 +14,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+autoload :OpenSSL, "openssl"
class Chef
module Mixin
# various helpers for use with openssl. Currently used by the openssl_* resources
module OpenSSLHelper
- def self.included(_base)
- require "openssl" unless defined?(::OpenSSL)
- end
-
# determine the key filename from the cert filename
# @param [String] cert_filename the path to the certfile
# @return [String] the path to the keyfile
diff --git a/lib/chef/mixin/template.rb b/lib/chef/mixin/template.rb
index d72bfe9e3a..a369cae9e5 100644
--- a/lib/chef/mixin/template.rb
+++ b/lib/chef/mixin/template.rb
@@ -16,8 +16,8 @@
# limitations under the License.
#
-require "tempfile" unless defined?(Tempfile)
-require "erubis" unless defined?(Erubis)
+autoload :Tempfile, "tempfile"
+autoload :Erubis, "erubis"
class Chef
module Mixin
diff --git a/lib/chef/mixin/uris.rb b/lib/chef/mixin/uris.rb
index ab33c6791e..74c2af73d8 100644
--- a/lib/chef/mixin/uris.rb
+++ b/lib/chef/mixin/uris.rb
@@ -16,8 +16,8 @@
# limitations under the License.
#
-require "uri" unless defined?(URI)
-require "addressable/uri" unless defined?(Addressable::URI)
+autoload :URI, "uri"
+autoload :Addressable, "addressable/uri"
class Chef
module Mixin
diff --git a/lib/chef/monkey_patches/net_http.rb b/lib/chef/monkey_patches/net_http.rb
index 42007d23a7..5955f1c6d2 100644
--- a/lib/chef/monkey_patches/net_http.rb
+++ b/lib/chef/monkey_patches/net_http.rb
@@ -7,16 +7,16 @@ end
require "net/http" unless defined?(Net::HTTP)
module Net
- class HTTPError
+ class HTTPError < Net::ProtocolError
include ChefNetHTTPExceptionExtensions
end
- class HTTPRetriableError
+ class HTTPRetriableError < Net::ProtoRetriableError
include ChefNetHTTPExceptionExtensions
end
- class HTTPClientException
+ class HTTPClientException < Net::ProtoServerError
include ChefNetHTTPExceptionExtensions
end
- class HTTPFatalError
+ class HTTPFatalError < Net::ProtoFatalError
include ChefNetHTTPExceptionExtensions
end
end
diff --git a/lib/chef/provider/ifconfig.rb b/lib/chef/provider/ifconfig.rb
index fbff49468a..d5e18ae730 100644
--- a/lib/chef/provider/ifconfig.rb
+++ b/lib/chef/provider/ifconfig.rb
@@ -20,7 +20,7 @@ require_relative "../log"
require_relative "../provider"
require_relative "../resource/file"
require_relative "../exceptions"
-require "erb" unless defined?(Erb)
+autoload :ERB, "erb"
class Chef
class Provider
diff --git a/lib/chef/provider/launchd.rb b/lib/chef/provider/launchd.rb
index 78ae823596..37c73924f8 100644
--- a/lib/chef/provider/launchd.rb
+++ b/lib/chef/provider/launchd.rb
@@ -20,7 +20,7 @@ require_relative "../provider"
require_relative "../resource/file"
require_relative "../resource/cookbook_file"
require_relative "../resource/macosx_service"
-require "plist"
+autoload :Plist, "plist"
require "forwardable" unless defined?(Forwardable)
class Chef
diff --git a/lib/chef/provider/package/rubygems.rb b/lib/chef/provider/package/rubygems.rb
index 0dd62338dc..f9e89ead02 100644
--- a/lib/chef/provider/package/rubygems.rb
+++ b/lib/chef/provider/package/rubygems.rb
@@ -17,7 +17,7 @@
# limitations under the License.
#
-require "uri" unless defined?(URI)
+autoload :URI, "uri"
require_relative "../package"
require_relative "../../resource/package"
require_relative "../../mixin/get_source_from_package"
@@ -25,31 +25,34 @@ require_relative "../../mixin/which"
require_relative "../../dist"
# Class methods on Gem are defined in rubygems
-require "rubygems" unless defined?(Gem)
+autoload :Gem, "rubygems"
# Ruby 1.9's gem_prelude can interact poorly with loading the full rubygems
# explicitly like this. Make sure rubygems/specification is always last in this
# list
-require "rubygems/version"
-require "rubygems/dependency"
-require "rubygems/spec_fetcher"
-require "rubygems/platform"
-require "rubygems/package" unless defined?(Gem::Package)
-require "rubygems/dependency_installer"
-require "rubygems/uninstaller"
-require "rubygems/specification"
+Gem.autoload :Version, "rubygems/version"
+Gem.autoload :Dependency, "rubygems/dependency"
+Gem.autoload :SpecFetcher, "rubygems/spec_fetcher"
+Gem.autoload :Platform, "rubygems/platform"
+Gem.autoload :Package, "rubygems/package"
+Gem.autoload :DependencyInstaller, "rubygems/dependency_installer"
+Gem.autoload :Uninstaller, "rubygems/uninstaller"
+Gem.autoload :Specification, "rubygems/specification"
class Chef
class Provider
class Package
class Rubygems < Chef::Provider::Package
class GemEnvironment
- # HACK: trigger gem config load early. Otherwise it can get lazy
- # loaded during operations where we've set Gem.sources to an
- # alternate value and overwrite it with the defaults.
- Gem.configuration
-
DEFAULT_UNINSTALLER_OPTS = { ignore: true, executables: true }.freeze
+ def initialize(*args)
+ super
+ # HACK: trigger gem config load early. Otherwise it can get lazy
+ # loaded during operations where we've set Gem.sources to an
+ # alternate value and overwrite it with the defaults.
+ Gem.configuration
+ end
+
# The paths where rubygems should search for installed gems.
# Implemented by subclasses.
def gem_paths
diff --git a/lib/chef/provider/package/windows.rb b/lib/chef/provider/package/windows.rb
index e654c80c83..c722d8222c 100644
--- a/lib/chef/provider/package/windows.rb
+++ b/lib/chef/provider/package/windows.rb
@@ -21,7 +21,7 @@ require_relative "../../resource/windows_package"
require_relative "../package"
require_relative "../../util/path_helper"
require_relative "../../mixin/checksum"
-require "cgi" unless defined?(CGI)
+autoload :CGI, "cgi"
class Chef
class Provider
@@ -33,7 +33,7 @@ class Chef
provides :package, os: "windows"
provides :windows_package
- require "chef/provider/package/windows/registry_uninstall_entry.rb"
+ autoload :RegistryUninstallEntry, ::File.expand_path("windows/registry_uninstall_entry.rb", __dir__)
def define_resource_requirements
if new_resource.checksum
diff --git a/lib/chef/provider/package/windows/registry_uninstall_entry.rb b/lib/chef/provider/package/windows/registry_uninstall_entry.rb
index f1814d5dcf..6e7b825256 100644
--- a/lib/chef/provider/package/windows/registry_uninstall_entry.rb
+++ b/lib/chef/provider/package/windows/registry_uninstall_entry.rb
@@ -17,7 +17,9 @@
# limitations under the License.
#
-require "win32/registry" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
+module Win32
+ autoload :Registry, File.expand_path("../../../monkey_patches/win32/registry", __dir__) if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
+end
class Chef
class Provider
diff --git a/lib/chef/provider/remote_file/content.rb b/lib/chef/provider/remote_file/content.rb
index c76029c091..665da47e8d 100644
--- a/lib/chef/provider/remote_file/content.rb
+++ b/lib/chef/provider/remote_file/content.rb
@@ -21,6 +21,9 @@ require "uri" unless defined?(URI)
require "tempfile" unless defined?(Tempfile)
require_relative "../../file_content_management/content_base"
require_relative "../../mixin/uris"
+module Net
+ autoload :FTPError, "net/ftp"
+end
class Chef
class Provider
diff --git a/lib/chef/provider/remote_file/ftp.rb b/lib/chef/provider/remote_file/ftp.rb
index e2b32ddaf6..44a6d1c6e8 100644
--- a/lib/chef/provider/remote_file/ftp.rb
+++ b/lib/chef/provider/remote_file/ftp.rb
@@ -16,10 +16,12 @@
# limitations under the License.
#
-require "uri" unless defined?(URI)
-require "cgi" unless defined?(CGI)
-require "tempfile" unless defined?(Tempfile)
-require "net/ftp"
+autoload :URI, "uri"
+autoload :CGI, "cgi"
+autoload :Tempfile, "tempfile"
+module Net
+ autoload :FTP, "net/ftp"
+end
require_relative "../remote_file"
require_relative "../../file_content_management/tempfile"
diff --git a/lib/chef/provider/remote_file/sftp.rb b/lib/chef/provider/remote_file/sftp.rb
index 43654bd67c..be2a34fc54 100644
--- a/lib/chef/provider/remote_file/sftp.rb
+++ b/lib/chef/provider/remote_file/sftp.rb
@@ -16,10 +16,12 @@
# limitations under the License.
#
-require "uri" unless defined?(URI)
-require "cgi" unless defined?(CGI)
-require "tempfile" unless defined?(Tempfile)
-require "net/sftp"
+autoload :URI, "uri"
+autoload :CGI, "cgi"
+autoload :Tempfile, "tempfile"
+module Net
+ autoload :SFTP, "net/sftp"
+end
require_relative "../remote_file"
require_relative "../../file_content_management/tempfile"
diff --git a/lib/chef/provider/route.rb b/lib/chef/provider/route.rb
index afb1fd5a88..3eac41aef0 100644
--- a/lib/chef/provider/route.rb
+++ b/lib/chef/provider/route.rb
@@ -19,7 +19,7 @@
require_relative "../log"
require_relative "../provider"
-require "ipaddr" unless defined?(IPAddr)
+autoload :IPAddr, "ipaddr"
class Chef
class Provider
diff --git a/lib/chef/provider/service/macosx.rb b/lib/chef/provider/service/macosx.rb
index 7e695aaf2b..ae04c7bfdd 100644
--- a/lib/chef/provider/service/macosx.rb
+++ b/lib/chef/provider/service/macosx.rb
@@ -18,7 +18,7 @@
#
require "etc" unless defined?(Etc)
-require "rexml/document" unless defined?(REXML::Document)
+autoload :REXML, "rexml/document"
require_relative "../../resource/service"
require_relative "../../resource/macosx_service"
require_relative "simple"
diff --git a/lib/chef/provider/user/dscl.rb b/lib/chef/provider/user/dscl.rb
index 7b86fa5269..80853d43da 100644
--- a/lib/chef/provider/user/dscl.rb
+++ b/lib/chef/provider/user/dscl.rb
@@ -19,8 +19,8 @@
require_relative "../../mixin/shell_out"
require_relative "../user"
require_relative "../../resource/user/dscl_user"
-require "openssl" unless defined?(OpenSSL)
-require "plist"
+autoload :OpenSSL, "openssl"
+autoload :Plist, "plist"
require_relative "../../util/path_helper"
class Chef
diff --git a/lib/chef/provider/user/mac.rb b/lib/chef/provider/user/mac.rb
index 9ae1628d5c..a738fa4aa0 100644
--- a/lib/chef/provider/user/mac.rb
+++ b/lib/chef/provider/user/mac.rb
@@ -22,7 +22,7 @@ require_relative "../../mixin/shell_out"
require_relative "../../mixin/which"
require_relative "../user"
require_relative "../../resource/user/mac_user"
-require "plist"
+autoload :Plist, "plist"
class Chef
class Provider
diff --git a/lib/chef/provider/windows_task.rb b/lib/chef/provider/windows_task.rb
index c402818321..963c52ef02 100644
--- a/lib/chef/provider/windows_task.rb
+++ b/lib/chef/provider/windows_task.rb
@@ -16,8 +16,7 @@
# limitations under the License.
#
-require "rexml/document" unless defined?(REXML::Document)
-require "iso8601" if ChefUtils.windows?
+autoload :ISO8601, "iso8601" if ChefUtils.windows?
require_relative "../provider"
require_relative "../util/path_helper"
require "win32/taskscheduler" if ChefUtils.windows?
diff --git a/lib/chef/recipe.rb b/lib/chef/recipe.rb
index be188817d6..4009677936 100644
--- a/lib/chef/recipe.rb
+++ b/lib/chef/recipe.rb
@@ -17,7 +17,7 @@
# limitations under the License.
#
-require "yaml" unless defined?(YAML)
+autoload :YAML, "yaml"
require_relative "dsl/recipe"
require_relative "mixin/from_file"
require_relative "mixin/deprecation"
diff --git a/lib/chef/resource.rb b/lib/chef/resource.rb
index 735ef47b63..2e5b17f277 100644
--- a/lib/chef/resource.rb
+++ b/lib/chef/resource.rb
@@ -36,7 +36,7 @@ require_relative "resource/resource_notification"
require_relative "provider_resolver"
require_relative "resource_resolver"
require_relative "provider"
-require "set" unless defined?(Set)
+autoload :Set, "set"
require_relative "mixin/deprecation"
require_relative "mixin/properties"
diff --git a/lib/chef/resource/apt_repository.rb b/lib/chef/resource/apt_repository.rb
index bc0c904745..e4569561fc 100644
--- a/lib/chef/resource/apt_repository.rb
+++ b/lib/chef/resource/apt_repository.rb
@@ -19,7 +19,7 @@
require_relative "../resource"
require_relative "../http/simple"
require "tmpdir" unless defined?(Dir.mktmpdir)
-require "addressable" unless defined?(Addressable)
+autoload :Addressable, "addressable"
class Chef
class Resource
diff --git a/lib/chef/resource/build_essential.rb b/lib/chef/resource/build_essential.rb
index ad37d3924f..17b97ebd97 100644
--- a/lib/chef/resource/build_essential.rb
+++ b/lib/chef/resource/build_essential.rb
@@ -15,7 +15,7 @@
#
require_relative "../resource"
-require "plist"
+autoload :Plist, "plist"
class Chef
class Resource
diff --git a/lib/chef/resource/chef_vault_secret.rb b/lib/chef/resource/chef_vault_secret.rb
index d8a2e89ffe..1c8fa985f9 100644
--- a/lib/chef/resource/chef_vault_secret.rb
+++ b/lib/chef/resource/chef_vault_secret.rb
@@ -16,7 +16,7 @@
#
require_relative "../resource"
-require "chef-vault"
+autoload :ChefVault, "chef-vault"
class Chef
class Resource
diff --git a/lib/chef/resource/macos_userdefaults.rb b/lib/chef/resource/macos_userdefaults.rb
index d163fd8402..ab789635e7 100644
--- a/lib/chef/resource/macos_userdefaults.rb
+++ b/lib/chef/resource/macos_userdefaults.rb
@@ -17,7 +17,7 @@
require_relative "../resource"
require_relative "../dist"
-require "plist"
+autoload :Plist, "plist"
class Chef
class Resource
diff --git a/lib/chef/resource/openssl_ec_private_key.rb b/lib/chef/resource/openssl_ec_private_key.rb
index 36ad8f43ae..26f28b1ad8 100644
--- a/lib/chef/resource/openssl_ec_private_key.rb
+++ b/lib/chef/resource/openssl_ec_private_key.rb
@@ -66,10 +66,12 @@ class Chef
description: "The desired passphrase for the key."
property :key_cipher, String,
- equal_to: OpenSSL::Cipher.ciphers,
- validation_message: "key_cipher must be a cipher known to openssl. Run `openssl list-cipher-algorithms` to see available options.",
description: "The designed cipher to use when generating your key. Run `openssl list-cipher-algorithms` to see available options.",
- default: "des3"
+ default: lazy { "des3" },
+ callbacks: {
+ "key_cipher must be a cipher known to openssl. Run `openssl list-cipher-algorithms` to see available options." =>
+ proc { |v| OpenSSL::Cipher.ciphers.include?(v) },
+ }
property :owner, [String, Integer],
description: "The owner applied to all files created by the resource."
diff --git a/lib/chef/resource/openssl_rsa_private_key.rb b/lib/chef/resource/openssl_rsa_private_key.rb
index c8129a728e..381e2af696 100644
--- a/lib/chef/resource/openssl_rsa_private_key.rb
+++ b/lib/chef/resource/openssl_rsa_private_key.rb
@@ -65,10 +65,12 @@ class Chef
description: "The desired passphrase for the key."
property :key_cipher, String,
- equal_to: OpenSSL::Cipher.ciphers,
- validation_message: "key_cipher must be a cipher known to openssl. Run `openssl list-cipher-algorithms` to see available options.",
description: "The designed cipher to use when generating your key. Run `openssl list-cipher-algorithms` to see available options.",
- default: "des3"
+ default: lazy { "des3" },
+ callbacks: {
+ "key_cipher must be a cipher known to openssl. Run `openssl list-cipher-algorithms` to see available options." =>
+ proc { |v| OpenSSL::Cipher.ciphers.include?(v) },
+ }
property :owner, [String, Integer],
description: "The owner applied to all files created by the resource."
diff --git a/lib/chef/resource/osx_profile.rb b/lib/chef/resource/osx_profile.rb
index c3ff099436..d1a2791d3c 100644
--- a/lib/chef/resource/osx_profile.rb
+++ b/lib/chef/resource/osx_profile.rb
@@ -19,8 +19,8 @@
require_relative "../resource"
require_relative "../log"
require_relative "../resource/file"
-require "uuidtools"
-require "plist"
+autoload :UUIDTools, "uuidtools"
+autoload :Plist, "plist"
class Chef
class Resource
diff --git a/lib/chef/resource/plist.rb b/lib/chef/resource/plist.rb
index 06811ea8b6..f4058520a9 100644
--- a/lib/chef/resource/plist.rb
+++ b/lib/chef/resource/plist.rb
@@ -16,7 +16,7 @@
# limitations under the License.
#
require_relative "../resource"
-require "plist"
+autoload :Plist, "plist"
class Chef
class Resource
diff --git a/lib/chef/resource/windows_certificate.rb b/lib/chef/resource/windows_certificate.rb
index ce1bcede40..215f87d9c3 100644
--- a/lib/chef/resource/windows_certificate.rb
+++ b/lib/chef/resource/windows_certificate.rb
@@ -19,8 +19,10 @@
require_relative "../util/path_helper"
require_relative "../resource"
-require "win32-certstore" if Chef::Platform.windows?
-require "openssl" unless defined?(OpenSSL)
+module Win32
+ autoload :Certstore, "win32-certstore" if Chef::Platform.windows?
+end
+autoload :OpenSSL, "openssl"
require_relative "../dist"
class Chef
diff --git a/lib/chef/resource/windows_printer.rb b/lib/chef/resource/windows_printer.rb
index 947477baeb..dea15ba112 100644
--- a/lib/chef/resource/windows_printer.rb
+++ b/lib/chef/resource/windows_printer.rb
@@ -24,7 +24,7 @@ class Chef
class WindowsPrinter < Chef::Resource
unified_mode true
- require "resolv"
+ autoload :Resolv, "resolv"
provides(:windows_printer) { true }
@@ -78,8 +78,10 @@ class Chef
property :ipv4_address, String,
description: "The IPv4 address of the printer, such as `10.4.64.23`",
- validation_message: "The ipv4_address property must be in the IPv4 format of `WWW.XXX.YYY.ZZZ`",
- regex: Resolv::IPv4::Regex
+ callbacks: {
+ "The ipv4_address property must be in the IPv4 format of `WWW.XXX.YYY.ZZZ`" =>
+ proc { |v| v.match(Resolv::IPv4::Regex) },
+ }
PRINTERS_REG_KEY = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\\'.freeze unless defined?(PRINTERS_REG_KEY)
diff --git a/lib/chef/resource/windows_printer_port.rb b/lib/chef/resource/windows_printer_port.rb
index 1b3f8753ba..2a4eaa09b3 100644
--- a/lib/chef/resource/windows_printer_port.rb
+++ b/lib/chef/resource/windows_printer_port.rb
@@ -24,7 +24,7 @@ class Chef
class WindowsPrinterPort < Chef::Resource
unified_mode true
- require "resolv"
+ autoload :Resolv, "resolv"
provides(:windows_printer_port) { true }
@@ -61,9 +61,11 @@ class Chef
property :ipv4_address, String,
name_property: true,
- regex: Resolv::IPv4::Regex,
- validation_message: "The ipv4_address property must be in the format of WWW.XXX.YYY.ZZZ!",
- description: "An optional property for the IPv4 address of the printer if it differs from the resource block's name."
+ description: "An optional property for the IPv4 address of the printer if it differs from the resource block's name.",
+ callbacks: {
+ "The ipv4_address property must be in the format of WWW.XXX.YYY.ZZZ!" =>
+ proc { |v| v.match(Resolv::IPv4::Regex) },
+ }
property :port_name, String,
description: "The port name."
diff --git a/lib/chef/run_context.rb b/lib/chef/run_context.rb
index 7ba7d9f33e..bfefc6e101 100644
--- a/lib/chef/run_context.rb
+++ b/lib/chef/run_context.rb
@@ -28,7 +28,7 @@ require_relative "event_dispatch/events_output_stream"
require_relative "train_transport"
require_relative "exceptions"
require "forwardable" unless defined?(Forwardable)
-require "set" unless defined?(Set)
+autoload :Set, "set"
class Chef
diff --git a/lib/chef/run_context/cookbook_compiler.rb b/lib/chef/run_context/cookbook_compiler.rb
index 51b841d798..27461fea9a 100644
--- a/lib/chef/run_context/cookbook_compiler.rb
+++ b/lib/chef/run_context/cookbook_compiler.rb
@@ -16,7 +16,7 @@
# limitations under the License.
#
-require "set" unless defined?(Set)
+autoload :Set, "set"
require_relative "../log"
require_relative "../recipe"
require_relative "../resource/lwrp_base"
diff --git a/lib/chef/search/query.rb b/lib/chef/search/query.rb
index cd4275e8db..70b31cd5e4 100644
--- a/lib/chef/search/query.rb
+++ b/lib/chef/search/query.rb
@@ -20,8 +20,8 @@ require_relative "../config"
require_relative "../exceptions"
require_relative "../server_api"
-require "uri" unless defined?(URI)
-require "addressable/uri" unless defined?(Addressable::URI)
+autoload :URI, "uri"
+autoload :Addressable, "addressable/uri"
class Chef
class Search
@@ -132,10 +132,9 @@ class Chef
args_h
end
- QUERY_PARAM_VALUE = Addressable::URI::CharacterClasses::QUERY + "\\&\\;"
-
def escape_value(s)
- s && Addressable::URI.encode_component(s.to_s, QUERY_PARAM_VALUE)
+ query_param_value = Addressable::URI::CharacterClasses::QUERY + "\\&\\;"
+ s && Addressable::URI.encode_component(s.to_s, query_param_value)
end
def create_query_string(type, query, rows, start)
diff --git a/lib/chef/shell.rb b/lib/chef/shell.rb
index 8429110eec..1a012144ed 100644
--- a/lib/chef/shell.rb
+++ b/lib/chef/shell.rb
@@ -15,6 +15,11 @@
# limitations under the License.
#
+module Mixlib
+ module Authentication
+ autoload :Log, "mixlib/authentication"
+ end
+end
require "singleton" unless defined?(Singleton)
require "pp" unless defined?(PP)
require "etc" unless defined?(Etc)
diff --git a/lib/chef/train_transport.rb b/lib/chef/train_transport.rb
index 81d1ae09f2..a4f311fc51 100644
--- a/lib/chef/train_transport.rb
+++ b/lib/chef/train_transport.rb
@@ -16,7 +16,7 @@
#
require "chef-config/mixin/credentials"
-require "train"
+autoload :Train, "train"
require_relative "dist"
class Chef
diff --git a/lib/chef/util/diff.rb b/lib/chef/util/diff.rb
index 3f8a925c4d..0774dea813 100644
--- a/lib/chef/util/diff.rb
+++ b/lib/chef/util/diff.rb
@@ -40,9 +40,6 @@
# CONNECTION WITH THE SOFTWARE OR THE USE OF OTHER DEALINGS IN THE
# SOFTWARE.
-require "diff/lcs"
-require "diff/lcs/hunk"
-
class Chef
class Util
class Diff
@@ -86,6 +83,9 @@ class Chef
# produces a unified-output-format diff with 3 lines of context
# ChefFS uses udiff() directly
def udiff(old_file, new_file)
+ require "diff/lcs"
+ require "diff/lcs/hunk"
+
diff_str = ""
file_length_difference = 0
diff --git a/lib/chef/util/powershell/cmdlet.rb b/lib/chef/util/powershell/cmdlet.rb
index 344e20f466..ea84798814 100644
--- a/lib/chef/util/powershell/cmdlet.rb
+++ b/lib/chef/util/powershell/cmdlet.rb
@@ -16,7 +16,9 @@
# limitations under the License.
#
-require "mixlib/shellout" unless defined?(Mixlib::ShellOut::DEFAULT_READ_TIMEOUT)
+module Mixlib
+ autoload :ShellOut, "mixlib/shellout"
+end
require_relative "../../mixin/windows_architecture_helper"
require_relative "cmdlet_result"
diff --git a/lib/chef/util/powershell/ps_credential.rb b/lib/chef/util/powershell/ps_credential.rb
index cc11cc6c36..0404f5a1ac 100644
--- a/lib/chef/util/powershell/ps_credential.rb
+++ b/lib/chef/util/powershell/ps_credential.rb
@@ -18,24 +18,28 @@
require_relative "../../win32/crypto" if ChefUtils.windows?
-class Chef::Util::Powershell
- class PSCredential
- def initialize(username, password)
- @username = username
- @password = password
- end
+class Chef
+ class Util
+ class Powershell
+ class PSCredential
+ def initialize(username, password)
+ @username = username
+ @password = password
+ end
- def to_psobject
- "New-Object System.Management.Automation.PSCredential('#{@username}',('#{encrypt(@password)}' | ConvertTo-SecureString))"
- end
+ def to_psobject
+ "New-Object System.Management.Automation.PSCredential('#{@username}',('#{encrypt(@password)}' | ConvertTo-SecureString))"
+ end
- alias to_s to_psobject
- alias to_text to_psobject
+ alias to_s to_psobject
+ alias to_text to_psobject
- private
+ private
- def encrypt(str)
- Chef::ReservedNames::Win32::Crypto.encrypt(str)
+ def encrypt(str)
+ Chef::ReservedNames::Win32::Crypto.encrypt(str)
+ end
+ end
end
end
end
diff --git a/lib/chef/win32/registry.rb b/lib/chef/win32/registry.rb
index 6a9f229b27..4b5f8ede41 100644
--- a/lib/chef/win32/registry.rb
+++ b/lib/chef/win32/registry.rb
@@ -21,9 +21,8 @@ require_relative "api"
require_relative "../mixin/wide_string"
if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
- require_relative "../monkey_patches/win32/registry"
+ Win32.autoload :Registry, File.expand_path("../monkey_patches/win32/registry", __dir__)
require_relative "api/registry"
- require "win32/registry" unless defined?(Win32::Registry)
require "win32/api"
end