diff options
author | Davin Taddeo <davin@chef.io> | 2020-06-15 11:11:10 -0400 |
---|---|---|
committer | Davin Taddeo <davin@chef.io> | 2020-06-15 11:11:10 -0400 |
commit | d80343c06aa63f249902d6941e16dc3f34c8538e (patch) | |
tree | 1656f883817474a87be3317ec1e8eb8e988ecd52 | |
parent | c3d69d6db349770dfcbc6a97c4834d1646694b9f (diff) | |
parent | 3ce10c6d89728fc566709383d74b41df8dd01fd2 (diff) | |
download | chef-d80343c06aa63f249902d6941e16dc3f34c8538e.tar.gz |
Merge branch 'master' of github.com:chef/chef into windows_audit_policy
91 files changed, 255 insertions, 166 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 689ca85514..28da4fb39d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,18 @@ <!-- usage documentation: http://expeditor-docs.es.chef.io/configuration/changelog/ --> -<!-- latest_release 16.2.29 --> -## [v16.2.29](https://github.com/chef/chef/tree/v16.2.29) (2020-06-11) +<!-- latest_release 16.2.32 --> +## [v16.2.32](https://github.com/chef/chef/tree/v16.2.32) (2020-06-15) #### Merged Pull Requests -- Small code cleanups in script/windows_script [#9979](https://github.com/chef/chef/pull/9979) ([phiggins](https://github.com/phiggins)) -- Update with 2020 MVPs [#9985](https://github.com/chef/chef/pull/9985) ([Xorima](https://github.com/Xorima)) +- Disable snap dokken tests for now [#9993](https://github.com/chef/chef/pull/9993) ([tas50](https://github.com/tas50)) <!-- latest_release --> <!-- release_rollup since=16.1.16 --> ### Changes not yet released to stable #### Merged Pull Requests +- Disable snap dokken tests for now [#9993](https://github.com/chef/chef/pull/9993) ([tas50](https://github.com/tas50)) <!-- 16.2.32 --> +- Use .match? not =~ when match values aren't necessary [#9989](https://github.com/chef/chef/pull/9989) ([tas50](https://github.com/tas50)) <!-- 16.2.31 --> +- Fix snap_package bugs [#9944](https://github.com/chef/chef/pull/9944) ([jaymzh](https://github.com/jaymzh)) <!-- 16.2.30 --> - Small code cleanups in script/windows_script [#9979](https://github.com/chef/chef/pull/9979) ([phiggins](https://github.com/phiggins)) <!-- 16.2.29 --> - Update with 2020 MVPs [#9985](https://github.com/chef/chef/pull/9985) ([Xorima](https://github.com/Xorima)) <!-- 16.2.28 --> - Use /etc/chef for bootstrapping instead of ChefConfig [#9984](https://github.com/chef/chef/pull/9984) ([dheerajd-msys](https://github.com/dheerajd-msys)) <!-- 16.2.28 --> @@ -84,7 +84,7 @@ eval_gemfile("./Gemfile.local") if File.exist?("./Gemfile.local") # # We copy (and overwrite) these files every time "bundle <exec|install>" is # executed, just in case they have changed. -if RUBY_PLATFORM =~ /mswin|mingw|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw|windows/) instance_eval do ruby_exe_dir = RbConfig::CONFIG["bindir"] assemblies = Dir.glob(File.expand_path("distro/ruby_bin_folder", Dir.pwd) + "/*.dll") diff --git a/Gemfile.lock b/Gemfile.lock index 8540b3e407..201a6c19cd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -28,12 +28,12 @@ GIT PATH remote: . specs: - chef (16.2.29) + chef (16.2.32) addressable bcrypt_pbkdf (= 1.1.0.rc1) bundler (>= 1.10) - chef-config (= 16.2.29) - chef-utils (= 16.2.29) + chef-config (= 16.2.32) + chef-utils (= 16.2.32) chef-vault chef-zero (>= 14.0.11) diff-lcs (~> 1.2, >= 1.2.4) @@ -62,12 +62,12 @@ PATH train-winrm (>= 0.2.5) tty-screen (~> 0.6) uuidtools (~> 2.1.5) - chef (16.2.29-universal-mingw32) + chef (16.2.32-universal-mingw32) addressable bcrypt_pbkdf (= 1.1.0.rc1) bundler (>= 1.10) - chef-config (= 16.2.29) - chef-utils (= 16.2.29) + chef-config (= 16.2.32) + chef-utils (= 16.2.32) chef-vault chef-zero (>= 14.0.11) diff-lcs (~> 1.2, >= 1.2.4) @@ -112,15 +112,15 @@ PATH PATH remote: chef-bin specs: - chef-bin (16.2.29) - chef (= 16.2.29) + chef-bin (16.2.32) + chef (= 16.2.32) PATH remote: chef-config specs: - chef-config (16.2.29) + chef-config (16.2.32) addressable - chef-utils (= 16.2.29) + chef-utils (= 16.2.32) fuzzyurl mixlib-config (>= 2.2.12, < 4.0) mixlib-shellout (>= 2.0, < 4.0) @@ -129,7 +129,7 @@ PATH PATH remote: chef-utils specs: - chef-utils (16.2.29) + chef-utils (16.2.32) GEM remote: https://rubygems.org/ @@ -1 +1 @@ -16.2.29
\ No newline at end of file +16.2.32
\ No newline at end of file diff --git a/chef-bin/lib/chef-bin/version.rb b/chef-bin/lib/chef-bin/version.rb index 721e107671..20da1e6d2f 100644 --- a/chef-bin/lib/chef-bin/version.rb +++ b/chef-bin/lib/chef-bin/version.rb @@ -21,7 +21,7 @@ module ChefBin CHEFBIN_ROOT = File.expand_path("../..", __FILE__) - VERSION = "16.2.29".freeze + VERSION = "16.2.32".freeze end # diff --git a/chef-config/lib/chef-config/config.rb b/chef-config/lib/chef-config/config.rb index 7fc2e2c91e..bbf686af18 100644 --- a/chef-config/lib/chef-config/config.rb +++ b/chef-config/lib/chef-config/config.rb @@ -450,7 +450,7 @@ module ChefConfig default :repo_mode do if local_mode && !chef_zero.osc_compat "hosted_everything" - elsif chef_server_url =~ %r{/+organizations/.+} + elsif %r{/+organizations/.+}.match?(chef_server_url) "hosted_everything" else "everything" @@ -506,7 +506,7 @@ module ChefConfig default(:chef_server_root) do # if the chef_server_url is a path to an organization, aka # 'some_url.../organizations/*' then remove the '/organization/*' by default - if configuration[:chef_server_url] =~ %r{/organizations/\S*$} + if %r{/organizations/\S*$}.match?(configuration[:chef_server_url]) configuration[:chef_server_url].split("/")[0..-3].join("/") elsif configuration[:chef_server_url] # default to whatever chef_server_url is configuration[:chef_server_url] @@ -1118,7 +1118,7 @@ module ChefConfig # proxy before parsing. The regex /^.*:\/\// matches, for example, http://. Reusing proxy # here since we are really just trying to get the string built correctly. proxy = unless proxy_env_var.empty? - if proxy_env_var =~ %r{^.*://} + if %r{^.*://}.match?(proxy_env_var) URI.parse(proxy_env_var) else URI.parse("#{scheme}://#{proxy_env_var}") diff --git a/chef-config/lib/chef-config/path_helper.rb b/chef-config/lib/chef-config/path_helper.rb index 8429a08c1f..570e666e10 100644 --- a/chef-config/lib/chef-config/path_helper.rb +++ b/chef-config/lib/chef-config/path_helper.rb @@ -91,7 +91,7 @@ module ChefConfig def self.windows_max_length_exceeded?(path) # Check to see if paths without the \\?\ prefix are over the maximum allowed length for the Windows API # http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx - unless path =~ /^\\\\?\\/ + unless /^\\\\?\\/.match?(path) if path.length > WIN_MAX_PATH return true end @@ -103,7 +103,7 @@ module ChefConfig def self.printable?(string) # returns true if string is free of non-printable characters (escape sequences) # this returns false for whitespace escape sequences as well, e.g. \n\t - if string =~ /[^[:print:]]/ + if /[^[:print:]]/.match?(string) false else true diff --git a/chef-config/lib/chef-config/version.rb b/chef-config/lib/chef-config/version.rb index 4ba2ccb99e..6efae1e2ba 100644 --- a/chef-config/lib/chef-config/version.rb +++ b/chef-config/lib/chef-config/version.rb @@ -15,5 +15,5 @@ module ChefConfig CHEFCONFIG_ROOT = File.expand_path("../..", __FILE__) - VERSION = "16.2.29".freeze + VERSION = "16.2.32".freeze end diff --git a/chef-utils/lib/chef-utils/version.rb b/chef-utils/lib/chef-utils/version.rb index a9c31f3011..c3f58e501f 100644 --- a/chef-utils/lib/chef-utils/version.rb +++ b/chef-utils/lib/chef-utils/version.rb @@ -15,5 +15,5 @@ module ChefUtils CHEFUTILS_ROOT = File.expand_path("../..", __FILE__) - VERSION = "16.2.29".freeze + VERSION = "16.2.32".freeze end diff --git a/chef-utils/spec/unit/dsl/platform_family_spec.rb b/chef-utils/spec/unit/dsl/platform_family_spec.rb index 2783411d3d..bcd0f3412c 100644 --- a/chef-utils/spec/unit/dsl/platform_family_spec.rb +++ b/chef-utils/spec/unit/dsl/platform_family_spec.rb @@ -209,7 +209,7 @@ RSpec.describe ChefUtils::DSL::PlatformFamily do end context "node-independent windows APIs" do - if RUBY_PLATFORM =~ /mswin|mingw32|windows/ + if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) it "reports true for :windows_ruby?" do expect(described_class.windows_ruby?).to be true end diff --git a/kitchen-tests/cookbooks/end_to_end/recipes/_snap.rb b/kitchen-tests/cookbooks/end_to_end/recipes/_snap.rb new file mode 100644 index 0000000000..0a4ba48a58 --- /dev/null +++ b/kitchen-tests/cookbooks/end_to_end/recipes/_snap.rb @@ -0,0 +1,14 @@ +package "snapd" do + action :upgrade +end + +service "snapd" do + action :start +end + +execute "sleep 5" + +snap_package "black" do + action :upgrade + channel "beta" +end diff --git a/kitchen-tests/cookbooks/end_to_end/recipes/linux.rb b/kitchen-tests/cookbooks/end_to_end/recipes/linux.rb index f2ea241a14..da5265359d 100644 --- a/kitchen-tests/cookbooks/end_to_end/recipes/linux.rb +++ b/kitchen-tests/cookbooks/end_to_end/recipes/linux.rb @@ -117,3 +117,7 @@ include_recipe "::_cron" include_recipe "::_ohai_hint" include_recipe "::_openssl" include_recipe "::_tests" + +# at the moment these do not run properly in docker +# we need to investage if this is a snap on docker issue or a chef issue +# include_recipe "::_snap" if platform?("ubuntu") diff --git a/lib/chef/application/base.rb b/lib/chef/application/base.rb index 382fd3d66b..1749284ea2 100644 --- a/lib/chef/application/base.rb +++ b/lib/chef/application/base.rb @@ -363,7 +363,7 @@ class Chef::Application::Base < Chef::Application Chef::Log.trace("Download recipes tarball from #{url} to #{path}") if File.exist?(url) FileUtils.cp(url, path) - elsif url =~ URI.regexp + elsif URI.regexp.match?(url) File.open(path, "wb") do |f| open(url) do |r| f.write(r.read) diff --git a/lib/chef/application/client.rb b/lib/chef/application/client.rb index ba7f8214ab..af942c0254 100644 --- a/lib/chef/application/client.rb +++ b/lib/chef/application/client.rb @@ -39,7 +39,7 @@ class Chef::Application::Client < Chef::Application::Base long: "--daemonize [WAIT]", description: "Daemonize the process. Accepts an optional integer which is the " \ "number of seconds to wait before the first daemonized run.", - proc: lambda { |wait| wait =~ /^\d+$/ ? wait.to_i : true } + proc: lambda { |wait| /^\d+$/.match?(wait) ? wait.to_i : true } end option :pid_file, diff --git a/lib/chef/application/windows_service_manager.rb b/lib/chef/application/windows_service_manager.rb index 6afb9eec50..25ac72e014 100644 --- a/lib/chef/application/windows_service_manager.rb +++ b/lib/chef/application/windows_service_manager.rb @@ -16,7 +16,7 @@ # limitations under the License. # -if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) require "win32/service" end require_relative "../config" diff --git a/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb b/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb index bb42b89cfd..4f9a7ae151 100644 --- a/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +++ b/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb @@ -55,7 +55,7 @@ class Chef base_name = remove_dot_json(entry.name) if object["raw_data"]["id"] != base_name yield("ID in #{entry.path_for_printing} must be '#{base_name}' (is '#{object["raw_data"]["id"]}')") - elsif entry.parent.name =~ RESERVED_NAMES + elsif RESERVED_NAMES.match?(entry.parent.name) yield("Data bag name ('#{entry.parent.name}') must not match #{RESERVED_NAMES.inspect}") end end diff --git a/lib/chef/chef_fs/path_utils.rb b/lib/chef/chef_fs/path_utils.rb index 31f1f6f12a..1682120c86 100644 --- a/lib/chef/chef_fs/path_utils.rb +++ b/lib/chef/chef_fs/path_utils.rb @@ -118,7 +118,7 @@ class Chef if ancestor.length == path.length "" - elsif path[ancestor.length, 1] =~ /#{PathUtils.regexp_path_separator}/ + elsif /#{PathUtils.regexp_path_separator}/.match?(path[ancestor.length, 1]) path[ancestor.length + 1..-1] else nil diff --git a/lib/chef/cookbook/chefignore.rb b/lib/chef/cookbook/chefignore.rb index 8f5b4516c4..41a0e44c54 100644 --- a/lib/chef/cookbook/chefignore.rb +++ b/lib/chef/cookbook/chefignore.rb @@ -50,7 +50,7 @@ class Chef ignore_globs = [] if @ignore_file && readable_file_or_symlink?(@ignore_file) File.foreach(@ignore_file) do |line| - ignore_globs << line.strip unless line =~ COMMENTS_AND_WHITESPACE + ignore_globs << line.strip unless COMMENTS_AND_WHITESPACE.match?(line) end else Chef::Log.debug("No chefignore file found. No files will be ignored!") diff --git a/lib/chef/cookbook/metadata.rb b/lib/chef/cookbook/metadata.rb index c1393abcab..7f6d972771 100644 --- a/lib/chef/cookbook/metadata.rb +++ b/lib/chef/cookbook/metadata.rb @@ -391,7 +391,7 @@ class Chef def recipes_from_cookbook_version(cookbook) cookbook.fully_qualified_recipe_names.map do |recipe_name| unqualified_name = - if recipe_name =~ /::default$/ + if /::default$/.match?(recipe_name) name.to_s else recipe_name diff --git a/lib/chef/cookbook_version.rb b/lib/chef/cookbook_version.rb index 2e9bb77151..62407aa314 100644 --- a/lib/chef/cookbook_version.rb +++ b/lib/chef/cookbook_version.rb @@ -392,7 +392,7 @@ class Chef platform, version = Chef::Platform.find_platform_and_version(node) rescue ArgumentError => e # Skip platform/version if they were not found by find_platform_and_version - if e.message =~ /Cannot find a (?:platform|version)/ + if /Cannot find a (?:platform|version)/.match?(e.message) platform = "/unknown_platform/" version = "/unknown_platform_version/" else @@ -527,7 +527,7 @@ class Chef cb["version"] end rescue Net::HTTPClientException => e - if e.to_s =~ /^404/ + if /^404/.match?(e.to_s) Chef::Log.error("Cannot find a cookbook named #{cookbook_name}") nil else diff --git a/lib/chef/data_bag.rb b/lib/chef/data_bag.rb index 5715f1970d..6be18dad58 100644 --- a/lib/chef/data_bag.rb +++ b/lib/chef/data_bag.rb @@ -36,10 +36,10 @@ class Chef RESERVED_NAMES = /^(node|role|environment|client)$/.freeze def self.validate_name!(name) - unless name =~ VALID_NAME + unless VALID_NAME.match?(name) raise Exceptions::InvalidDataBagName, "DataBags must have a name matching #{VALID_NAME.inspect}, you gave #{name.inspect}" end - if name =~ RESERVED_NAMES + if RESERVED_NAMES.match?(name) raise Exceptions::InvalidDataBagName, "DataBags may not have a name matching #{RESERVED_NAMES.inspect}, you gave #{name.inspect}" end end diff --git a/lib/chef/file_access_control.rb b/lib/chef/file_access_control.rb index 72e700566a..c192a24d4d 100644 --- a/lib/chef/file_access_control.rb +++ b/lib/chef/file_access_control.rb @@ -26,7 +26,7 @@ class Chef # the values specified by a value object, usually a Chef::Resource. class FileAccessControl - if RUBY_PLATFORM =~ /mswin|mingw|windows/ + if RUBY_PLATFORM.match?(/mswin|mingw|windows/) require_relative "file_access_control/windows" include FileAccessControl::Windows else diff --git a/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb b/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb index dd072909fb..439bcbb8a3 100644 --- a/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +++ b/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb @@ -79,8 +79,8 @@ class Chef loop do # low rent parser. try to gracefully handle nested blocks in resources - nesting += 1 if lines[current_line] =~ /[\s]+do[\s]*/ - nesting -= 1 if lines[current_line] =~ /end[\s]*$/ + nesting += 1 if /[\s]+do[\s]*/.match?(lines[current_line]) + nesting -= 1 if /end[\s]*$/.match?(lines[current_line]) relevant_lines << format_line(current_line, lines[current_line]) diff --git a/lib/chef/http.rb b/lib/chef/http.rb index 207c616086..2a21aef191 100644 --- a/lib/chef/http.rb +++ b/lib/chef/http.rb @@ -327,7 +327,7 @@ class Chef def create_url(path) return path if path.is_a?(URI) - if path =~ %r{^(http|https|chefzero)://}i + if %r{^(http|https|chefzero)://}i.match?(path) URI.parse(path) elsif path.nil? || path.empty? URI.parse(@url) diff --git a/lib/chef/http/http_request.rb b/lib/chef/http/http_request.rb index 99a9a84d4e..9569c4133a 100644 --- a/lib/chef/http/http_request.rb +++ b/lib/chef/http/http_request.rb @@ -128,7 +128,7 @@ class Chef rescue NoMethodError => e # http://redmine.ruby-lang.org/issues/show/2708 # http://redmine.ruby-lang.org/issues/show/2758 - if e.to_s =~ /#{Regexp.escape(%q{undefined method `closed?' for nil:NilClass})}/ + if /#{Regexp.escape(%q{undefined method `closed?' for nil:NilClass})}/.match?(e.to_s) Chef::Log.trace("Rescued error in http connect, re-raising as Errno::ECONNREFUSED to hide bug in net/http") Chef::Log.trace("#{e.class.name}: #{e}") Chef::Log.trace(e.backtrace.join("\n")) diff --git a/lib/chef/http/json_output.rb b/lib/chef/http/json_output.rb index f2614237c5..bad009bd14 100644 --- a/lib/chef/http/json_output.rb +++ b/lib/chef/http/json_output.rb @@ -47,7 +47,7 @@ class Chef # needed to keep conditional get stuff working correctly. return [http_response, rest_request, return_value] if return_value == false - if http_response["content-type"] =~ /json/ + if /json/.match?(http_response["content-type"]) if http_response.body.nil? return_value = nil elsif raw_output diff --git a/lib/chef/knife.rb b/lib/chef/knife.rb index 2531059d37..88e79b3c2e 100644 --- a/lib/chef/knife.rb +++ b/lib/chef/knife.rb @@ -248,7 +248,7 @@ class Chef category_desc = preferred_category ? preferred_category + " " : "" msg "Available #{category_desc}subcommands: (for details, knife SUB-COMMAND --help)\n\n" subcommand_loader.list_commands(preferred_category).sort.each do |category, commands| - next if category =~ /deprecated/i + next if /deprecated/i.match?(category) msg "** #{category.upcase} COMMANDS **" commands.sort.each do |command| diff --git a/lib/chef/knife/client_bulk_delete.rb b/lib/chef/knife/client_bulk_delete.rb index 1c71b74ca9..38d25583b3 100644 --- a/lib/chef/knife/client_bulk_delete.rb +++ b/lib/chef/knife/client_bulk_delete.rb @@ -44,7 +44,7 @@ class Chef clients_to_delete = {} validators_to_delete = {} all_clients.each do |name, client| - next unless name =~ matcher + next unless name&.match?(matcher) if client.validator validators_to_delete[client.name] = client diff --git a/lib/chef/knife/config_get.rb b/lib/chef/knife/config_get.rb index c194188d2a..47a0040a83 100644 --- a/lib/chef/knife/config_get.rb +++ b/lib/chef/knife/config_get.rb @@ -75,7 +75,7 @@ class Chef # It's a regex. filter_re = Regexp.new($1, $2 ? Regexp::IGNORECASE : 0) config_data.each do |key, value| - output_data[key] = value if key.to_s =~ filter_re + output_data[key] = value if key.to_s&.match?(filter_re) end else # It's a dotted path string. diff --git a/lib/chef/knife/cookbook_delete.rb b/lib/chef/knife/cookbook_delete.rb index 1b184c3ae9..04ecb95cf4 100644 --- a/lib/chef/knife/cookbook_delete.rb +++ b/lib/chef/knife/cookbook_delete.rb @@ -89,7 +89,7 @@ class Chef url_and_version["versions"].map { |url_by_version| url_by_version["version"] } end.flatten rescue Net::HTTPClientException => e - if e.to_s =~ /^404/ + if /^404/.match?(e.to_s) ui.error("Cannot find a cookbook named #{@cookbook_name} to delete.") nil else diff --git a/lib/chef/knife/core/cookbook_scm_repo.rb b/lib/chef/knife/core/cookbook_scm_repo.rb index e5618706f6..31654d2954 100644 --- a/lib/chef/knife/core/cookbook_scm_repo.rb +++ b/lib/chef/knife/core/cookbook_scm_repo.rb @@ -58,7 +58,7 @@ class Chef exit 1 end cmd = git("status --porcelain") - if cmd.stdout =~ DIRTY_REPO + if DIRTY_REPO.match?(cmd.stdout) ui.error "You have uncommitted changes to your cookbook repo (#{repo_path}):" ui.msg cmd.stdout ui.info "Commit or stash your changes before importing cookbooks" diff --git a/lib/chef/knife/data_bag_create.rb b/lib/chef/knife/data_bag_create.rb index 51fb907c34..11448c69b7 100644 --- a/lib/chef/knife/data_bag_create.rb +++ b/lib/chef/knife/data_bag_create.rb @@ -54,7 +54,7 @@ class Chef rest.get("data/#{@data_bag_name}") ui.info("Data bag #{@data_bag_name} already exists") rescue Net::HTTPClientException => e - raise unless e.to_s =~ /^404/ + raise unless /^404/.match?(e.to_s) # if it doesn't exists, try to create it rest.post("data", { "name" => @data_bag_name }) diff --git a/lib/chef/knife/node_bulk_delete.rb b/lib/chef/knife/node_bulk_delete.rb index 0caf5dd604..874509b730 100644 --- a/lib/chef/knife/node_bulk_delete.rb +++ b/lib/chef/knife/node_bulk_delete.rb @@ -39,7 +39,7 @@ class Chef matcher = /#{name_args[0]}/ all_nodes.each do |name, node| - next unless name =~ matcher + next unless name&.match?(matcher) nodes_to_delete[name] = node end diff --git a/lib/chef/knife/node_run_list_remove.rb b/lib/chef/knife/node_run_list_remove.rb index 8331844171..08f4e5d382 100644 --- a/lib/chef/knife/node_run_list_remove.rb +++ b/lib/chef/knife/node_run_list_remove.rb @@ -49,7 +49,7 @@ class Chef node.run_list.remove(e) else ui.warn "#{e} is not in the run list" - unless e =~ /^(recipe|role)\[/ + unless /^(recipe|role)\[/.match?(e) ui.warn "(did you forget recipe[] or role[] around it?)" end end diff --git a/lib/chef/knife/role_bulk_delete.rb b/lib/chef/knife/role_bulk_delete.rb index 9fc8b20fc2..f57ac79619 100644 --- a/lib/chef/knife/role_bulk_delete.rb +++ b/lib/chef/knife/role_bulk_delete.rb @@ -40,7 +40,7 @@ class Chef matcher = /#{@name_args[0]}/ roles_to_delete = {} all_roles.each do |name, role| - next unless name =~ matcher + next unless name&.match?(matcher) roles_to_delete[role.name] = role end diff --git a/lib/chef/knife/ssh.rb b/lib/chef/knife/ssh.rb index ea40cee191..6611421d85 100644 --- a/lib/chef/knife/ssh.rb +++ b/lib/chef/knife/ssh.rb @@ -364,7 +364,7 @@ class Chef ch.on_data do |ichannel, data| print_data(ichannel.connection[:prefix], data) - if data =~ /^knife sudo password: / + if /^knife sudo password: /.match?(data) print_data(ichannel.connection[:prefix], "\n") ichannel.send_data("#{get_password}\n") end diff --git a/lib/chef/knife/supermarket_share.rb b/lib/chef/knife/supermarket_share.rb index 7d3523dfb8..49b3474566 100644 --- a/lib/chef/knife/supermarket_share.rb +++ b/lib/chef/knife/supermarket_share.rb @@ -132,7 +132,7 @@ class Chef res = Chef::JSONCompat.from_json(http_resp.body) if http_resp.code.to_i != 201 if res["error_messages"] - if res["error_messages"][0] =~ /Version already exists/ + if /Version already exists/.match?(res["error_messages"][0]) ui.error "The same version of this cookbook already exists on Supermarket." exit(1) else diff --git a/lib/chef/knife/supermarket_unshare.rb b/lib/chef/knife/supermarket_unshare.rb index 0904a70f57..686d95f47a 100644 --- a/lib/chef/knife/supermarket_unshare.rb +++ b/lib/chef/knife/supermarket_unshare.rb @@ -48,7 +48,7 @@ class Chef begin rest.delete "#{config[:supermarket_site]}/api/v1/cookbooks/#{@name_args[0]}" rescue Net::HTTPClientException => e - raise e unless e.message =~ /Forbidden/ + raise e unless /Forbidden/.match?(e.message) ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it." exit 1 diff --git a/lib/chef/log.rb b/lib/chef/log.rb index 88d9bff939..e835c605ba 100644 --- a/lib/chef/log.rb +++ b/lib/chef/log.rb @@ -21,7 +21,7 @@ require "logger" require_relative "monologger" require_relative "exceptions" require "mixlib/log" -require_relative "log/syslog" unless RUBY_PLATFORM =~ /mswin|mingw|windows/ +require_relative "log/syslog" unless RUBY_PLATFORM.match?(/mswin|mingw|windows/) require_relative "log/winevt" class Chef diff --git a/lib/chef/mixin/securable.rb b/lib/chef/mixin/securable.rb index c63e644604..08e92b27b7 100644 --- a/lib/chef/mixin/securable.rb +++ b/lib/chef/mixin/securable.rb @@ -172,14 +172,14 @@ class Chef end end - if RUBY_PLATFORM =~ /mswin|mingw|windows/ + if RUBY_PLATFORM.match?(/mswin|mingw|windows/) include WindowsSecurableAttributes end # Callback that fires when included; will extend the including class # with WindowsMacros and define #rights and #deny_rights on it. def self.included(including_class) - if RUBY_PLATFORM =~ /mswin|mingw|windows/ + if RUBY_PLATFORM.match?(/mswin|mingw|windows/) including_class.extend(WindowsMacros) # create a default 'rights' attribute including_class.rights_attribute(:rights) diff --git a/lib/chef/powershell.rb b/lib/chef/powershell.rb index 9790a3c10f..10765384ff 100644 --- a/lib/chef/powershell.rb +++ b/lib/chef/powershell.rb @@ -34,7 +34,7 @@ class Chef # @param script [String] script to run # @return [Object] output def initialize(script) - raise "Chef::PowerShell can only be used on the Windows platform." unless RUBY_PLATFORM =~ /mswin|mingw32|windows/ + raise "Chef::PowerShell can only be used on the Windows platform." unless RUBY_PLATFORM.match?(/mswin|mingw32|windows/) exec(script) end diff --git a/lib/chef/provider/cron.rb b/lib/chef/provider/cron.rb index a5669b0a4a..8a978b7eca 100644 --- a/lib/chef/provider/cron.rb +++ b/lib/chef/provider/cron.rb @@ -259,8 +259,8 @@ class Chef return "" if new_resource.time_out.empty? str = " timeout" - str << " --preserve-status" if new_resource.time_out["preserve-status"].to_s.downcase == "true" - str << " --foreground" if new_resource.time_out["foreground"].to_s.downcase == "true" + str << " --preserve-status" if new_resource.time_out["preserve-status"].to_s.casecmp("true") == 0 + str << " --foreground" if new_resource.time_out["foreground"].to_s.casecmp("true") == 0 str << " --kill-after #{new_resource.time_out["kill-after"]}" if new_resource.time_out["kill-after"] str << " --signal #{new_resource.time_out["signal"]}" if new_resource.time_out["signal"] str << " #{new_resource.time_out["duration"]};" diff --git a/lib/chef/provider/group/dscl.rb b/lib/chef/provider/group/dscl.rb index b506197dca..824ebe0477 100644 --- a/lib/chef/provider/group/dscl.rb +++ b/lib/chef/provider/group/dscl.rb @@ -39,7 +39,7 @@ class Chef result = dscl(*args) return "" if ( args.first =~ /^delete/ ) && ( result[1].exitstatus != 0 ) raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") unless result[1].exitstatus == 0 - raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") if result[2] =~ /No such key: / + raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") if /No such key: /.match?(result[2]) result[2] end @@ -77,7 +77,7 @@ class Chef gid = nil; next_gid_guess = 200 groups_gids = safe_dscl("list", "/Groups", "gid") while next_gid_guess < search_limit + 200 - if groups_gids =~ Regexp.new("#{Regexp.escape(next_gid_guess.to_s)}\n") + if groups_gids&.match?(Regexp.new("#{Regexp.escape(next_gid_guess.to_s)}\n")) next_gid_guess += 1 else gid = next_gid_guess diff --git a/lib/chef/provider/group/windows.rb b/lib/chef/provider/group/windows.rb index 6dda6a7cc2..45914b16e3 100644 --- a/lib/chef/provider/group/windows.rb +++ b/lib/chef/provider/group/windows.rb @@ -17,7 +17,7 @@ # require_relative "../user" -if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) require_relative "../../util/windows/net_group" end diff --git a/lib/chef/provider/ifconfig.rb b/lib/chef/provider/ifconfig.rb index 79f5bb78fe..cfabe292f9 100644 --- a/lib/chef/provider/ifconfig.rb +++ b/lib/chef/provider/ifconfig.rb @@ -59,12 +59,12 @@ class Chef @net_tools_version = shell_out("ifconfig", "--version") @net_tools_version.stdout.each_line do |line| - if line =~ /^net-tools (\d+\.\d+)/ + if /^net-tools (\d+\.\d+)/.match?(line) @ifconfig_version = line.match(/^net-tools (\d+\.\d+)/)[1] end end @net_tools_version.stderr.each_line do |line| - if line =~ /^net-tools (\d+\.\d+)/ + if /^net-tools (\d+\.\d+)/.match?(line) @ifconfig_version = line.match(/^net-tools (\d+\.\d+)/)[1] end end @@ -88,11 +88,11 @@ class Chef @int_name = line[0..9].strip @interfaces[@int_name] = { "hwaddr" => (line =~ /(HWaddr)/ ? ($') : "nil").strip.chomp } else - @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /inet addr:/ - @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Bcast:/ - @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Mask:/ - @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /MTU:/ - @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? Regexp.last_match(1) : "nil") if line =~ /Metric:/ + @interfaces[@int_name]["inet_addr"] = (line =~ /inet addr:(\S+)/ ? Regexp.last_match(1) : "nil") if /inet addr:/.match?(line) + @interfaces[@int_name]["bcast"] = (line =~ /Bcast:(\S+)/ ? Regexp.last_match(1) : "nil") if /Bcast:/.match?(line) + @interfaces[@int_name]["mask"] = (line =~ /Mask:(\S+)/ ? Regexp.last_match(1) : "nil") if /Mask:/.match?(line) + @interfaces[@int_name]["mtu"] = (line =~ /MTU:(\S+)/ ? Regexp.last_match(1) : "nil") if /MTU:/.match?(line) + @interfaces[@int_name]["metric"] = (line =~ /Metric:(\S+)/ ? Regexp.last_match(1) : "nil") if /Metric:/.match?(line) end next unless @interfaces.key?(new_resource.device) diff --git a/lib/chef/provider/mount/aix.rb b/lib/chef/provider/mount/aix.rb index 7a80c6511d..2cb29f5858 100644 --- a/lib/chef/provider/mount/aix.rb +++ b/lib/chef/provider/mount/aix.rb @@ -197,7 +197,7 @@ class Chef ::File.open("/etc/filesystems", "r").each_line do |line| case line when %r{^/.+:\s*$} - if line =~ /#{Regexp.escape(@new_resource.mount_point)}+:/ + if /#{Regexp.escape(@new_resource.mount_point)}+:/.match?(line) found_device = true else found_device = false diff --git a/lib/chef/provider/mount/windows.rb b/lib/chef/provider/mount/windows.rb index aea924b07f..81e9ad6b1d 100644 --- a/lib/chef/provider/mount/windows.rb +++ b/lib/chef/provider/mount/windows.rb @@ -17,7 +17,7 @@ # require_relative "../mount" -if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) require_relative "../../util/windows/net_use" require_relative "../../util/windows/volume" end @@ -30,7 +30,7 @@ class Chef provides :mount, os: "windows" def is_volume(name) - name =~ /^\\\\\?\\Volume\{[\w-]+\}\\$/ ? true : false + /^\\\\\?\\Volume\{[\w-]+\}\\$/.match?(name) ? true : false end def initialize(new_resource, run_context) diff --git a/lib/chef/provider/noop.rb b/lib/chef/provider/noop.rb index fec948af54..74e24f6a44 100644 --- a/lib/chef/provider/noop.rb +++ b/lib/chef/provider/noop.rb @@ -26,7 +26,7 @@ class Chef end def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^action_/ + if /^action_/.match?(method_sym.to_s) logger.trace("NoOp-ing for #{method_sym}") else super diff --git a/lib/chef/provider/package/openbsd.rb b/lib/chef/provider/package/openbsd.rb index 38ff84f105..6e32a424e2 100644 --- a/lib/chef/provider/package/openbsd.rb +++ b/lib/chef/provider/package/openbsd.rb @@ -57,7 +57,7 @@ class Chef end requirements.assert(:all_actions) do |a| a.assertion do - if new_resource.package_name =~ /^(.+?)--(.+)/ + if /^(.+?)--(.+)/.match?(new_resource.package_name) !new_resource.version else true diff --git a/lib/chef/provider/package/portage.rb b/lib/chef/provider/package/portage.rb index 002c1f96d4..3182686c0e 100644 --- a/lib/chef/provider/package/portage.rb +++ b/lib/chef/provider/package/portage.rb @@ -71,7 +71,7 @@ class Chef if pkginfo.exitstatus != 0 pkginfo.stderr.each_line do |line| # cspell:disable-next-line - if line =~ /[Uu]nqualified atom .*match.* multiple/ + if /[Uu]nqualified atom .*match.* multiple/.match?(line) raise_error_for_query("matched multiple packages (please specify a category):\n#{pkginfo.inspect}") end end @@ -88,7 +88,7 @@ class Chef end pkginfo.stdout.chomp! - if pkginfo.stdout =~ /-r\d+$/ + if /-r\d+$/.match?(pkginfo.stdout) # Latest/Best version of the package is a revision (-rX). @candidate_version = pkginfo.stdout.split(/(?<=-)/).last(2).join else diff --git a/lib/chef/provider/package/powershell.rb b/lib/chef/provider/package/powershell.rb index 51cb387cad..54e31bbd1e 100644 --- a/lib/chef/provider/package/powershell.rb +++ b/lib/chef/provider/package/powershell.rb @@ -59,7 +59,7 @@ class Chef names.each_with_index do |name, index| cmd = powershell_out(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout) next if cmd.nil? - raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if cmd.stderr =~ /SkipPublisherCheck/ + raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if /SkipPublisherCheck/.match?(cmd.stderr) end end diff --git a/lib/chef/provider/package/rubygems.rb b/lib/chef/provider/package/rubygems.rb index fa2b5a66d7..be4f1a149c 100644 --- a/lib/chef/provider/package/rubygems.rb +++ b/lib/chef/provider/package/rubygems.rb @@ -420,7 +420,7 @@ class Chef end def is_omnibus? - if RbConfig::CONFIG["bindir"] =~ %r{/(opscode|chef|chefdk)/embedded/bin} + if %r{/(opscode|chef|chefdk)/embedded/bin}.match?(RbConfig::CONFIG["bindir"]) logger.trace("#{new_resource} detected omnibus installation in #{RbConfig::CONFIG["bindir"]}") # Omnibus installs to a static path because of linking on unix, find it. true @@ -447,7 +447,7 @@ class Chef scheme = URI.parse(new_resource.source).scheme # URI.parse gets confused by MS Windows paths with forward slashes. - scheme = nil if scheme =~ /^[a-z]$/ + scheme = nil if /^[a-z]$/.match?(scheme) %w{http https}.include?(scheme) rescue URI::InvalidURIError logger.trace("#{new_resource} failed to parse source '#{new_resource.source}' as a URI, assuming a local path") diff --git a/lib/chef/provider/package/snap.rb b/lib/chef/provider/package/snap.rb index 1e4d6102b9..7aaaf3f30f 100644 --- a/lib/chef/provider/package/snap.rb +++ b/lib/chef/provider/package/snap.rb @@ -59,15 +59,14 @@ class Chef def get_current_versions package_name_array.each_with_index.map do |pkg, i| installed_version(i) - end + end.compact end def install_package(names, versions) if new_resource.source install_snap_from_source(names, new_resource.source) else - resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? } - install_snaps(resolved_names) + install_snaps(names) end end @@ -75,14 +74,16 @@ class Chef if new_resource.source install_snap_from_source(names, new_resource.source) else - resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? } - update_snaps(resolved_names) + if get_current_versions.empty? + install_snaps(names, versions) + else + update_snaps(names) + end end end def remove_package(names, versions) - resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? } - uninstall_snaps(resolved_names) + uninstall_snaps(names) end alias purge_package remove_package @@ -129,19 +130,73 @@ class Chef "Accept: application/json\r\n" + "Content-Type: application/json\r\n" if method == "POST" - request.concat("Content-Length: #{post_data.bytesize}\r\n\r\n#{post_data}") + pdata = post_data.to_json.to_s + request.concat("Content-Length: #{pdata.bytesize}\r\n\r\n#{pdata}") end request.concat("\r\n") - # While it is expected to allow clients to connect using HTTPS over a TCP socket, - # at this point only a UNIX socket is supported. The socket is /run/snapd.socket - # Note - UNIXSocket is not defined on windows systems + + # while it is expected to allow clients to connect using https over + # a tcp socket, at this point only a unix socket is supported. the + # socket is /run/snapd.socket note - unixsocket is not defined on + # windows systems if defined?(::UNIXSocket) UNIXSocket.open("/run/snapd.socket") do |socket| - # Send request, read the response, split the response and parse the body - socket.print(request) - response = socket.read - headers, body = response.split("\r\n\r\n", 2) - JSON.parse(body) + # send request, read the response, split the response and parse + # the body + socket.write(request) + + # WARNING!!! HERE BE DRAGONs + # + # So snapd doesn't return an EOF at the end of its body, so + # doing a normal read will just hang forever. + # + # Well, sort of. if, after it writes everything, you then send + # yet-another newline, it'll then send its EOF and promptly + # disconnect closing the pipe and preventing reading. so, you + # have to read first, and therein lies the EOF problem. + # + # So you can do non-blocking reads with selects, but it + # makes every read take about 5 seconds. If, instead, we + # read the last line char-by-char, it's about half a second. + # + # Reading a character at a time isn't efficient, and since we + # know that http headers always have a blank line after them, + # we can read lines until we find a blank line and *then* read + # a character at a time. snap returns all the json on a single + # line, so once you pass headers you must read a character a + # time. + # + # - jaymzh + + Chef::Log.trace( + "snap_package[#{new_resource.package_name}]: reading headers" + ) + loop do + response = socket.readline + break if response.strip.empty? # finished headers + end + Chef::Log.trace( + "snap_package[#{new_resource.package_name}]: past headers, " + + "onto the body..." + ) + result = nil + body = "" + socket.each_char do |c| + body << c + # we know we're not done if we don't have a char that + # can end JSON + next unless ["}", "]"].include?(c) + + begin + result = JSON.parse(body) + # if we get here, we were able to parse the json so we + # are done reading + break + rescue JSON::ParserError + next + end + end + result end end end @@ -211,20 +266,22 @@ class Chef response.error! end - def install_snaps(snap_names) - response = post_snaps(snap_names, "install", new_resource.channel, new_resource.options) - id = get_id_from_async_response(response) - wait_for_completion(id) + def install_snaps(snap_names, versions) + snap_names.each do |snap| + response = post_snap(snap, "install", new_resource.channel, new_resource.options) + id = get_id_from_async_response(response) + wait_for_completion(id) + end end def update_snaps(snap_names) - response = post_snaps(snap_names, "refresh", new_resource.channel, new_resource.options) + response = post_snaps(snap_names, "refresh", nil, new_resource.options) id = get_id_from_async_response(response) wait_for_completion(id) end def uninstall_snaps(snap_names) - response = post_snaps(snap_names, "remove", new_resource.channel, new_resource.options) + response = post_snaps(snap_names, "remove", nil, new_resource.options) id = get_id_from_async_response(response) wait_for_completion(id) end @@ -278,18 +335,20 @@ class Chef "action" => action, "snaps" => snap_names, } - if %w{install refresh switch}.include?(action) + if %w{install refresh switch}.include?(action) && channel request["channel"] = channel end # No defensive handling of params # Snap will throw the proper exception if called improperly # And we can provide that exception to the end user - request["classic"] = true if options["classic"] - request["devmode"] = true if options["devmode"] - request["jailmode"] = true if options["jailmode"] + if options + request["classic"] = true if options.include?("classic") + request["devmode"] = true if options.include?("devmode") + request["jailmode"] = true if options.include?("jailmode") + request["ignore_validation"] = true if options.include?("ignore-validation") + end request["revision"] = revision unless revision.nil? - request["ignore_validation"] = true if options["ignore-validation"] request end @@ -305,12 +364,22 @@ class Chef call_snap_api("POST", "/v2/snaps", json) end + def post_snap(snap_name, action, channel, options, revision = nil) + json = generate_snap_json(snap_name, action, channel, options, revision = nil) + json.delete("snaps") + call_snap_api("POST", "/v2/snaps/#{snap_name}", json) + end + def get_latest_package_version(name, channel) json = call_snap_api("GET", "/v2/find?name=#{name}") if json["status-code"] != 200 raise Chef::Exceptions::Package, json["result"], caller end + unless json["result"][0]["channels"]["latest/#{channel}"] + raise Chef::Exceptions::Package, "No version of #{name} in channel #{channel}", caller + end + # Return the version matching the channel json["result"][0]["channels"]["latest/#{channel}"]["version"] end diff --git a/lib/chef/provider/package/windows/msi.rb b/lib/chef/provider/package/windows/msi.rb index 0624224f57..1ce8add80d 100644 --- a/lib/chef/provider/package/windows/msi.rb +++ b/lib/chef/provider/package/windows/msi.rb @@ -18,7 +18,7 @@ # TODO: Allow new_resource.source to be a Product Code as a GUID for uninstall / network install -require_relative "../../../win32/api/installer" if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +require_relative "../../../win32/api/installer" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) require_relative "../../../mixin/shell_out" class Chef @@ -26,7 +26,7 @@ class Chef class Package class Windows class MSI - include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM =~ /mswin|mingw32|windows/ + include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) include Chef::Mixin::ShellOut def initialize(resource, uninstall_entries) @@ -84,7 +84,7 @@ class Chef .map(&:uninstall_string).uniq.each do |uninstall_string| uninstall_string = "msiexec /x #{uninstall_string.match(/{.*}/)}" uninstall_string += expand_options(new_resource.options) - uninstall_string += " /q" unless uninstall_string.downcase =~ %r{ /q} + uninstall_string += " /q" unless %r{ /q}.match?(uninstall_string.downcase) logger.trace("#{new_resource} removing MSI package version using '#{uninstall_string}'") shell_out!(uninstall_string, default_env: false, timeout: new_resource.timeout, returns: new_resource.returns) end diff --git a/lib/chef/provider/package/windows/registry_uninstall_entry.rb b/lib/chef/provider/package/windows/registry_uninstall_entry.rb index 22bc00a9f7..548b911ecb 100644 --- a/lib/chef/provider/package/windows/registry_uninstall_entry.rb +++ b/lib/chef/provider/package/windows/registry_uninstall_entry.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require "win32/registry" if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +require "win32/registry" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) class Chef class Provider diff --git a/lib/chef/provider/remote_file/http.rb b/lib/chef/provider/remote_file/http.rb index 26332c061f..ef2461848d 100644 --- a/lib/chef/provider/remote_file/http.rb +++ b/lib/chef/provider/remote_file/http.rb @@ -130,7 +130,7 @@ class Chef # which tricks Chef::REST into decompressing the response body. In this # case you'd end up with a tar archive (no gzip) named, e.g., foo.tgz, # which is not what you wanted. - if uri.to_s =~ /gz$/ + if /gz$/.match?(uri.to_s) logger.trace("Turning gzip compression off due to filename ending in gz") opts[:disable_gzip] = true end diff --git a/lib/chef/provider/service/arch.rb b/lib/chef/provider/service/arch.rb index 24064f26ac..fe09baf2d5 100644 --- a/lib/chef/provider/service/arch.rb +++ b/lib/chef/provider/service/arch.rb @@ -33,7 +33,7 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init def load_current_resource raise Chef::Exceptions::Service, "Could not find /etc/rc.conf" unless ::File.exists?("/etc/rc.conf") - raise Chef::Exceptions::Service, "No DAEMONS found in /etc/rc.conf" unless ::File.read("/etc/rc.conf") =~ /DAEMONS=\((.*)\)/m + raise Chef::Exceptions::Service, "No DAEMONS found in /etc/rc.conf" unless /DAEMONS=\((.*)\)/m.match?(::File.read("/etc/rc.conf")) super diff --git a/lib/chef/provider/service/debian.rb b/lib/chef/provider/service/debian.rb index 259652a2d9..a89907bb50 100644 --- a/lib/chef/provider/service/debian.rb +++ b/lib/chef/provider/service/debian.rb @@ -76,9 +76,9 @@ class Chef in_info = false ::File.readlines(path).each_with_object([]) do |line, acc| - if line =~ /^### BEGIN INIT INFO/ + if /^### BEGIN INIT INFO/.match?(line) in_info = true - elsif line =~ /^### END INIT INFO/ + elsif /^### END INIT INFO/.match?(line) break acc elsif in_info if line =~ /Default-(Start|Stop):\s+(\d.*)/ diff --git a/lib/chef/provider/service/openbsd.rb b/lib/chef/provider/service/openbsd.rb index c368815418..fe42e2133c 100644 --- a/lib/chef/provider/service/openbsd.rb +++ b/lib/chef/provider/service/openbsd.rb @@ -91,7 +91,7 @@ class Chef old_services_list = rc_conf_local.match(/^pkg_scripts="(.*)"/) old_services_list = old_services_list ? old_services_list[1].split(" ") : [] new_services_list = old_services_list + [new_resource.service_name] - if rc_conf_local =~ /^pkg_scripts="(.*)"/ + if /^pkg_scripts="(.*)"/.match?(rc_conf_local) new_rcl = rc_conf_local.sub(/^pkg_scripts="(.*)"/, "pkg_scripts=\"#{new_services_list.join(" ")}\"") else new_rcl = rc_conf_local + "\n" + "pkg_scripts=\"#{new_services_list.join(" ")}\"\n" @@ -158,7 +158,7 @@ class Chef result = false var_name = builtin_service_enable_variable_name if var_name - if rc_conf =~ /^#{Regexp.escape(var_name)}=(.*)/ + if /^#{Regexp.escape(var_name)}=(.*)/.match?(rc_conf) result = true end end @@ -170,7 +170,7 @@ class Chef var_name = builtin_service_enable_variable_name if var_name if m = rc_conf.match(/^#{Regexp.escape(var_name)}=(.*)/) - unless m[1] =~ /"?[Nn][Oo]"?/ + unless /"?[Nn][Oo]"?/.match?(m[1]) result = true end end @@ -186,7 +186,7 @@ class Chef if var_name if m = rc_conf_local.match(/^#{Regexp.escape(var_name)}=(.*)/) @enabled_state_found = true - unless m[1] =~ /"?[Nn][Oo]"?/ # e.g. looking for httpd_flags=NO + unless /"?[Nn][Oo]"?/.match?(m[1]) # e.g. looking for httpd_flags=NO result = true end end diff --git a/lib/chef/provider/service/redhat.rb b/lib/chef/provider/service/redhat.rb index 6851e7f150..ec78ef2240 100644 --- a/lib/chef/provider/service/redhat.rb +++ b/lib/chef/provider/service/redhat.rb @@ -87,7 +87,7 @@ class Chef chkconfig.stdout.split(/\s+/)[1..-1].each do |level| index = level.split(":").first status = level.split(":").last - if level =~ CHKCONFIG_ON + if CHKCONFIG_ON.match?(level) @current_run_levels << index.to_i all_levels_match = false unless run_levels.include?(index.to_i) else diff --git a/lib/chef/provider/service/windows.rb b/lib/chef/provider/service/windows.rb index 6c1f7c3583..88bb282be9 100644 --- a/lib/chef/provider/service/windows.rb +++ b/lib/chef/provider/service/windows.rb @@ -20,7 +20,7 @@ require_relative "simple" require_relative "../../win32_service_constants" -if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) require_relative "../../win32/error" require "win32/service" end diff --git a/lib/chef/provider/subversion.rb b/lib/chef/provider/subversion.rb index 270f7457fa..18fc9d3a3c 100644 --- a/lib/chef/provider/subversion.rb +++ b/lib/chef/provider/subversion.rb @@ -122,7 +122,7 @@ class Chef # If the specified revision is an integer, trust it. def revision_int @revision_int ||= begin - if new_resource.revision =~ /^\d+$/ + if /^\d+$/.match?(new_resource.revision) new_resource.revision else command = scm(:info, new_resource.repository, new_resource.svn_info_args, authentication, "-r#{new_resource.revision}") @@ -211,7 +211,7 @@ class Chef def scm(*args) binary = svn_binary - binary = "\"#{binary}\"" if binary =~ /\s/ + binary = "\"#{binary}\"" if /\s/.match?(binary) [binary, *args].compact.join(" ") end diff --git a/lib/chef/provider/user/dscl.rb b/lib/chef/provider/user/dscl.rb index 50030c885f..fade7097b5 100644 --- a/lib/chef/provider/user/dscl.rb +++ b/lib/chef/provider/user/dscl.rb @@ -215,7 +215,7 @@ in 'password', with the associated 'salt' and 'iterations'.") next_uid_guess = base_uid users_uids = run_dscl("list", "/Users", "uid") while next_uid_guess < search_limit + base_uid - if users_uids =~ Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n") + if users_uids&.match?(Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n")) next_uid_guess += 1 else uid = next_uid_guess @@ -291,7 +291,7 @@ in 'password', with the associated 'salt' and 'iterations'.") end def validate_home_dir_specification! - unless new_resource.home =~ %r{^/} + unless %r{^/}.match?(new_resource.home) raise(Chef::Exceptions::InvalidHomeDirectory, "invalid path spec for User: '#{new_resource.username}', home directory: '#{new_resource.home}'") end end @@ -587,7 +587,7 @@ in 'password', with the associated 'salt' and 'iterations'.") result = shell_out("dscl", ".", "-#{args[0]}", args[1..-1]) return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 ) raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0 - raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if result.stdout =~ /No such key: / + raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if /No such key: /.match?(result.stdout) result.stdout end diff --git a/lib/chef/provider/user/linux.rb b/lib/chef/provider/user/linux.rb index bab8588151..40b5985cb1 100644 --- a/lib/chef/provider/user/linux.rb +++ b/lib/chef/provider/user/linux.rb @@ -96,7 +96,7 @@ class Chef passwd_s = shell_out("passwd", "-S", new_resource.username, returns: [ 0, 1 ]) # checking "does not exist" has to come before exit code handling since centos and ubuntu differ in exit codes - if passwd_s.stderr =~ /does not exist/ + if /does not exist/.match?(passwd_s.stderr) return false if whyrun_mode? raise Chef::Exceptions::User, "User #{new_resource.username} does not exist when checking lock status for #{new_resource}" @@ -108,8 +108,8 @@ class Chef # now the actual output parsing @locked = nil status_line = passwd_s.stdout.split(" ") - @locked = false if status_line[1] =~ /^[PN]/ - @locked = true if status_line[1] =~ /^L/ + @locked = false if /^[PN]/.match?(status_line[1]) + @locked = true if /^L/.match?(status_line[1]) raise Chef::Exceptions::User, "Cannot determine if user #{new_resource.username} is locked for #{new_resource}" if @locked.nil? diff --git a/lib/chef/provider/user/mac.rb b/lib/chef/provider/user/mac.rb index a2561e2ccd..34307aff1e 100644 --- a/lib/chef/provider/user/mac.rb +++ b/lib/chef/provider/user/mac.rb @@ -163,7 +163,7 @@ class Chef # a problem. We'll check stderr and make sure we see that it finished # correctly. res = run_sysadminctl(cmd) - unless res.downcase =~ /creating user/ + unless /creating user/.match?(res.downcase) raise Chef::Exceptions::User, "error when creating user: #{res}" end @@ -309,7 +309,7 @@ class Chef # sysadminctl doesn't exit with a non-zero exit code if it encounters # a problem. We'll check stderr and make sure we see that it finished res = run_sysadminctl(cmd) - unless res.downcase =~ /deleting record|not found/ + unless /deleting record|not found/.match?(res.downcase) raise Chef::Exceptions::User, "error deleting user: #{res}" end @@ -372,7 +372,7 @@ class Chef next_uid_guess = base_uid users_uids = run_dscl("list", "/Users", "uid") while next_uid_guess < search_limit + base_uid - if users_uids =~ Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n") + if users_uids&.match?(Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n")) next_uid_guess += 1 else uid = next_uid_guess @@ -430,7 +430,7 @@ class Chef # sysadminctl doesn't exit with a non-zero exit code if it encounters # a problem. We'll check stderr and make sure we see that it finished res = run_sysadminctl(cmd) - unless res.downcase =~ /done/ + unless /done/.match?(res.downcase) raise Chef::Exceptions::User, "error when modifying SecureToken: #{res}" end @@ -611,7 +611,7 @@ class Chef result = shell_out("dscl", "-plist", ".", "-#{args[0]}", args[1..-1]) return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 ) raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0 - raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if result.stdout =~ /No such key: / + raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if /No such key: /.match?(result.stdout) result.stdout end diff --git a/lib/chef/resource/freebsd_package.rb b/lib/chef/resource/freebsd_package.rb index 4e0c161094..081adaf702 100644 --- a/lib/chef/resource/freebsd_package.rb +++ b/lib/chef/resource/freebsd_package.rb @@ -42,7 +42,7 @@ class Chef private def assign_provider - @provider = if source.to_s =~ /^ports$/i + @provider = if /^ports$/i.match?(source.to_s) Chef::Provider::Package::Freebsd::Port else Chef::Provider::Package::Freebsd::Pkgng diff --git a/lib/chef/resource/helpers/cron_validations.rb b/lib/chef/resource/helpers/cron_validations.rb index 8e62fa8095..8b5e9a22c4 100644 --- a/lib/chef/resource/helpers/cron_validations.rb +++ b/lib/chef/resource/helpers/cron_validations.rb @@ -35,7 +35,7 @@ class Chef # Lists of individual values, ranges, and step values all share the validity range for type spec.split(%r{\/|-|,}).each do |x| next if x == "*" - return false unless x =~ /^\d+$/ + return false unless /^\d+$/.match?(x) x = x.to_i return false unless x >= min && x <= max diff --git a/lib/chef/resource/mount.rb b/lib/chef/resource/mount.rb index 5154cac3d9..f6dd4f70f0 100644 --- a/lib/chef/resource/mount.rb +++ b/lib/chef/resource/mount.rb @@ -50,7 +50,7 @@ class Chef description: "The type of device: :device, :label, or :uuid", coerce: proc { |arg| arg.is_a?(String) ? arg.to_sym : arg }, default: :device, - equal_to: RUBY_PLATFORM =~ /solaris/i ? %i{ device } : %i{ device label uuid } + equal_to: RUBY_PLATFORM.match?(/solaris/i) ? %i{ device } : %i{ device label uuid } # @todo this should get refactored away: https://github.com/chef/chef/issues/7621 property :mounted, [TrueClass, FalseClass], default: false, skip_docs: true diff --git a/lib/chef/resource/windows_ad_join.rb b/lib/chef/resource/windows_ad_join.rb index b1584d93d8..5eb93579c3 100644 --- a/lib/chef/resource/windows_ad_join.rb +++ b/lib/chef/resource/windows_ad_join.rb @@ -204,7 +204,7 @@ class Chef # links: https://docs.microsoft.com/en-us/windows/win32/ad/naming-properties#userprincipalname https://tools.ietf.org/html/rfc822 # regex: https://rubular.com/r/isAWojpTMKzlnp def sanitize_usename - if new_resource.domain_user =~ /@/ + if /@/.match?(new_resource.domain_user) new_resource.domain_user else "#{new_resource.domain_user}@#{new_resource.domain_name}" diff --git a/lib/chef/resource/windows_font.rb b/lib/chef/resource/windows_font.rb index 007fe5db58..54e1c9669a 100644 --- a/lib/chef/resource/windows_font.rb +++ b/lib/chef/resource/windows_font.rb @@ -42,7 +42,7 @@ class Chef property :source, String, description: "A local filesystem path or URI that is used to source the font file.", - coerce: proc { |x| x =~ /^.:.*/ ? x.tr('\\', "/").gsub("//", "/") : x } + coerce: proc { |x| /^.:.*/.match?(x) ? x.tr('\\', "/").gsub("//", "/") : x } action :install do description "Install a font to the system fonts directory." @@ -84,7 +84,7 @@ class Chef # install the font into the appropriate fonts directory def install_font - require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/ + require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) fonts_dir = Chef::Util::PathHelper.join(ENV["windir"], "fonts") folder = WIN32OLE.new("Shell.Application").Namespace(fonts_dir) converge_by("install font #{new_resource.font_name} to #{fonts_dir}") do @@ -96,7 +96,7 @@ class Chef # # @return [Boolean] Is the font is installed? def font_exists? - require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/ + require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) fonts_dir = WIN32OLE.new("WScript.Shell").SpecialFolders("Fonts") logger.trace("Seeing if the font at #{Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name)} exists") ::File.exist?(Chef::Util::PathHelper.join(fonts_dir, new_resource.font_name)) diff --git a/lib/chef/resource/windows_package.rb b/lib/chef/resource/windows_package.rb index c0e88ddee8..ba5ecd31aa 100644 --- a/lib/chef/resource/windows_package.rb +++ b/lib/chef/resource/windows_package.rb @@ -19,7 +19,7 @@ require_relative "../mixin/uris" require_relative "package" require_relative "../provider/package/windows" -require_relative "../win32/error" if RUBY_PLATFORM =~ /mswin|mingw|windows/ +require_relative "../win32/error" if RUBY_PLATFORM.match?(/mswin|mingw|windows/) require_relative "../dist" class Chef diff --git a/lib/chef/resource/windows_pagefile.rb b/lib/chef/resource/windows_pagefile.rb index 928a8d03e0..90e57993de 100644 --- a/lib/chef/resource/windows_pagefile.rb +++ b/lib/chef/resource/windows_pagefile.rb @@ -113,7 +113,7 @@ class Chef # we do this here and not in the property itself because if automatic_managed # is set then this validation is not necessary / doesn't make sense at all def validate_name - return if /^.:.*.sys/ =~ new_resource.path + return if /^.:.*.sys/.match?(new_resource.path) raise "#{new_resource.path} does not match the format DRIVE:\\path\\file.sys for pagefiles. Example: C:\\pagefile.sys" end diff --git a/lib/chef/resource/windows_shortcut.rb b/lib/chef/resource/windows_shortcut.rb index b5b532cb86..d7f72a9def 100644 --- a/lib/chef/resource/windows_shortcut.rb +++ b/lib/chef/resource/windows_shortcut.rb @@ -56,7 +56,7 @@ class Chef description: "Icon to use for the shortcut. Accepts the format of `path, index`, where index is the icon file to use. See Microsoft's [documentation](https://msdn.microsoft.com/en-us/library/3s9bx7at.aspx) for details" load_current_value do |desired| - require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/ + require "win32ole" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) link = WIN32OLE.new("WScript.Shell").CreateShortcut(desired.shortcut_name) name desired.shortcut_name diff --git a/lib/chef/resource/windows_task.rb b/lib/chef/resource/windows_task.rb index 2dfa22b8ca..4b6b9ba9cf 100644 --- a/lib/chef/resource/windows_task.rb +++ b/lib/chef/resource/windows_task.rb @@ -330,7 +330,7 @@ class Chef # make sure the start_day is in MM/DD/YYYY format: http://rubular.com/r/cgjHemtWl5 if start_day - raise ArgumentError, "`start_day` property must be in the MM/DD/YYYY format." unless %r{^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$} =~ start_day + raise ArgumentError, "`start_day` property must be in the MM/DD/YYYY format." unless %r{^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$}.match?(start_day) end end @@ -338,7 +338,7 @@ class Chef def validate_start_time(start_time, frequency) if start_time raise ArgumentError, "`start_time` property is not supported with `frequency :none`" if frequency == :none - raise ArgumentError, "`start_time` property must be in the HH:mm format (e.g. 6:20pm -> 18:20)." unless /^[0-2][0-9]:[0-5][0-9]$/ =~ start_time + raise ArgumentError, "`start_time` property must be in the HH:mm format (e.g. 6:20pm -> 18:20)." unless /^[0-2][0-9]:[0-5][0-9]$/.match?(start_time) else raise ArgumentError, "`start_time` needs to be provided with `frequency :once`" if frequency == :once end diff --git a/lib/chef/search/query.rb b/lib/chef/search/query.rb index 35f846224d..cd4275e8db 100644 --- a/lib/chef/search/query.rb +++ b/lib/chef/search/query.rb @@ -105,7 +105,7 @@ class Chef private def fuzzify_node_query(query) - if query !~ /:/ + if !/:/.match?(query) "tags:*#{query}* OR roles:*#{query}* OR fqdn:*#{query}* OR addresses:*#{query}* OR policy_name:*#{query}* OR policy_group:*#{query}*" else query diff --git a/lib/chef/util/diff.rb b/lib/chef/util/diff.rb index 30ea838e96..6f10cbde35 100644 --- a/lib/chef/util/diff.rb +++ b/lib/chef/util/diff.rb @@ -171,7 +171,7 @@ class Chef begin return buff !~ /\A[\s[:print:]]*\z/m rescue ArgumentError => e - return true if e.message =~ /invalid byte sequence/ + return true if /invalid byte sequence/.match?(e.message) raise end diff --git a/lib/chef/util/windows/net_user.rb b/lib/chef/util/windows/net_user.rb index 5545ff4ca5..b6767c41c5 100644 --- a/lib/chef/util/windows/net_user.rb +++ b/lib/chef/util/windows/net_user.rb @@ -100,7 +100,7 @@ class Chef::Util::Windows::NetUser < Chef::Util::Windows rescue Chef::Exceptions::Win32APIError => e Chef::Log.trace(e) # we're only interested in the incorrect password failures - if e.to_s =~ /System Error Code: 1326/ + if /System Error Code: 1326/.match?(e.to_s) return false end diff --git a/lib/chef/util/windows/volume.rb b/lib/chef/util/windows/volume.rb index 1b75fe8cb9..e197604c34 100644 --- a/lib/chef/util/windows/volume.rb +++ b/lib/chef/util/windows/volume.rb @@ -25,7 +25,7 @@ class Chef::Util::Windows::Volume < Chef::Util::Windows attr_reader :mount_point def initialize(name) - name += "\\" unless name =~ /\\$/ # trailing slash required + name += "\\" unless /\\$/.match?(name) # trailing slash required @mount_point = name end diff --git a/lib/chef/version.rb b/lib/chef/version.rb index 61c2d00166..7ccdc46b37 100644 --- a/lib/chef/version.rb +++ b/lib/chef/version.rb @@ -23,7 +23,7 @@ require_relative "version_string" class Chef CHEF_ROOT = File.expand_path("../..", __FILE__) - VERSION = Chef::VersionString.new("16.2.29") + VERSION = Chef::VersionString.new("16.2.32") end # diff --git a/lib/chef/win32/file.rb b/lib/chef/win32/file.rb index d6f6a61d9a..e051a53e4d 100644 --- a/lib/chef/win32/file.rb +++ b/lib/chef/win32/file.rb @@ -123,7 +123,7 @@ class Chef # Return the link destination (strip off \??\ at the beginning, which is a local filesystem thing) link_dest = reparse_buffer.reparse_buffer.substitute_name - if link_dest =~ /^\\\?\?\\/ + if /^\\\?\?\\/.match?(link_dest) link_dest = link_dest[4..-1] end link_dest diff --git a/lib/chef/win32/registry.rb b/lib/chef/win32/registry.rb index a5c63b571b..c31ae50e0b 100644 --- a/lib/chef/win32/registry.rb +++ b/lib/chef/win32/registry.rb @@ -20,7 +20,7 @@ require_relative "../reserved_names" require_relative "api" require_relative "../mixin/wide_string" -if RUBY_PLATFORM =~ /mswin|mingw32|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) require_relative "../monkey_patches/win32/registry" require_relative "api/registry" require "win32/registry" unless defined?(Win32::Registry) @@ -31,7 +31,7 @@ class Chef class Win32 class Registry - if RUBY_PLATFORM =~ /mswin|mingw32|windows/ + if RUBY_PLATFORM.match?(/mswin|mingw32|windows/) include Chef::ReservedNames::Win32::API::Registry extend Chef::ReservedNames::Win32::API::Registry end diff --git a/lib/chef/win32/security.rb b/lib/chef/win32/security.rb index cebf07208b..3894c65b21 100644 --- a/lib/chef/win32/security.rb +++ b/lib/chef/win32/security.rb @@ -694,7 +694,7 @@ class Chef begin process_token = open_current_process_token(TOKEN_READ) rescue Exception => run_error - return false if run_error.message =~ /Access is denied/ + return false if /Access is denied/.match?(run_error.message) Chef::ReservedNames::Win32::Error.raise! end diff --git a/spec/data/lwrp/providers/buck_passer.rb b/spec/data/lwrp/providers/buck_passer.rb index 0bbd413867..9d764277ce 100644 --- a/spec/data/lwrp/providers/buck_passer.rb +++ b/spec/data/lwrp/providers/buck_passer.rb @@ -4,7 +4,7 @@ def without_deprecation_warnings(&block) old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors] Chef::Config[:treat_deprecation_warnings_as_errors] = false begin - block.call + yield ensure Chef::Config[:treat_deprecation_warnings_as_errors] = old_treat_deprecation_warnings_as_errors end diff --git a/spec/data/lwrp/providers/buck_passer_2.rb b/spec/data/lwrp/providers/buck_passer_2.rb index 980506c671..0b8f49f7bd 100644 --- a/spec/data/lwrp/providers/buck_passer_2.rb +++ b/spec/data/lwrp/providers/buck_passer_2.rb @@ -2,7 +2,7 @@ def without_deprecation_warnings(&block) old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors] Chef::Config[:treat_deprecation_warnings_as_errors] = false begin - block.call + yield ensure Chef::Config[:treat_deprecation_warnings_as_errors] = old_treat_deprecation_warnings_as_errors end diff --git a/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb b/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb index d6996da55e..b86dc860d0 100644 --- a/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +++ b/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb @@ -7,7 +7,7 @@ def without_deprecation_warnings(&block) old_treat_deprecation_warnings_as_errors = Chef::Config[:treat_deprecation_warnings_as_errors] Chef::Config[:treat_deprecation_warnings_as_errors] = false begin - block.call + yield ensure Chef::Config[:treat_deprecation_warnings_as_errors] = old_treat_deprecation_warnings_as_errors end diff --git a/spec/functional/resource/remote_file_spec.rb b/spec/functional/resource/remote_file_spec.rb index 3e38842280..a5ae59d876 100644 --- a/spec/functional/resource/remote_file_spec.rb +++ b/spec/functional/resource/remote_file_spec.rb @@ -134,7 +134,7 @@ describe Chef::Resource::RemoteFile do let(:smb_file_local_file_name) { "smb_file.txt" } let(:smb_file_local_path) { File.join( smb_share_root_directory, smb_file_local_file_name ) } let(:smb_share_name) { "chef_smb_test" } - let(:smb_remote_path) { File.join("//#{ENV["COMPUTERNAME"]}", smb_share_name, smb_file_local_file_name).gsub(%r{/}, "\\") } + let(:smb_remote_path) { File.join("//#{ENV["COMPUTERNAME"]}", smb_share_name, smb_file_local_file_name).tr("/", "\\") } let(:smb_file_content) { "hellofun" } let(:local_destination_path) { File.join(Dir.tmpdir, make_tmpname("chef_remote_file")) } let(:windows_current_user) { ENV["USERNAME"] } @@ -155,7 +155,7 @@ describe Chef::Resource::RemoteFile do before do shell_out("net.exe share #{smb_share_name} /delete") File.write(smb_file_local_path, smb_file_content ) - shell_out!("net.exe share #{smb_share_name}=\"#{smb_share_root_directory.gsub(%r{/}, '\\')}\" /grant:\"authenticated users\",read") + shell_out!("net.exe share #{smb_share_name}=\"#{smb_share_root_directory.tr("/", '\\')}\" /grant:\"authenticated users\",read") end after do diff --git a/spec/support/platform_helpers.rb b/spec/support/platform_helpers.rb index 1d0f8fa2b6..709e137f24 100644 --- a/spec/support/platform_helpers.rb +++ b/spec/support/platform_helpers.rb @@ -108,7 +108,7 @@ def mac_osx? if File.exists? "/usr/bin/sw_vers" result = ShellHelpers.shell_out("/usr/bin/sw_vers") result.stdout.each_line do |line| - if line =~ /^ProductName:\sMac OS X.*$/ + if /^ProductName:\sMac OS X.*$/.match?(line) return true end end diff --git a/spec/support/platforms/win32/spec_service.rb b/spec/support/platforms/win32/spec_service.rb index 95daa97e23..34bb1fe3db 100644 --- a/spec/support/platforms/win32/spec_service.rb +++ b/spec/support/platforms/win32/spec_service.rb @@ -16,7 +16,7 @@ # limitations under the License. # -if RUBY_PLATFORM =~ /mswin|mingw|windows/ +if RUBY_PLATFORM.match?(/mswin|mingw|windows/) require "win32/daemon" class SpecService < ::Win32::Daemon diff --git a/spec/support/shared/functional/execute_resource.rb b/spec/support/shared/functional/execute_resource.rb index e3c5d90cc0..5e0c9e4e28 100644 --- a/spec/support/shared/functional/execute_resource.rb +++ b/spec/support/shared/functional/execute_resource.rb @@ -58,7 +58,7 @@ shared_context "a command that can be executed as an alternate user" do include Chef::Mixin::ShellOut before do - shell_out!("icacls \"#{script_output_dir.gsub(%r{/}, '\\')}\" /grant \"authenticated users:(F)\"") + shell_out!("icacls \"#{script_output_dir.tr("/", '\\')}\" /grant \"authenticated users:(F)\"") end after do diff --git a/spec/unit/provider/package/snap_spec.rb b/spec/unit/provider/package/snap_spec.rb index ac928c73f0..7968f0c699 100644 --- a/spec/unit/provider/package/snap_spec.rb +++ b/spec/unit/provider/package/snap_spec.rb @@ -169,7 +169,7 @@ describe Chef::Provider::Package::Snap do it "does not throw an error if installed version not found" do provider.load_current_resource - expect(provider.get_current_versions).to eq([nil]) + expect(provider.get_current_versions).to eq([]) end end end diff --git a/spec/unit/util/dsc/configuration_generator_spec.rb b/spec/unit/util/dsc/configuration_generator_spec.rb index dcf460ab4e..eee6adbd07 100644 --- a/spec/unit/util/dsc/configuration_generator_spec.rb +++ b/spec/unit/util/dsc/configuration_generator_spec.rb @@ -161,7 +161,7 @@ describe Chef::Util::DSC::ConfigurationGenerator do dsc = conf_man.send(:configuration_code, "archive{}", "hello", {}) found_configuration = false dsc.split(";").each do |command| - if command.downcase =~ /\s*configuration\s+'hello'\s*\{\s*node\s+'localhost'\s*\{\s*archive\s*\{\s*\}\s*\}\s*\}\s*/ + if /\s*configuration\s+'hello'\s*\{\s*node\s+'localhost'\s*\{\s*archive\s*\{\s*\}\s*\}\s*\}\s*/.match?(command.downcase) found_configuration = true end end |