-def expect_multiple_regexes(result:, regexes:)
- regexes.each do |regex|
- expect(result).to match(regex)
- end
-end
-
-# This method allows a block to be passed in and if an exception is raised
-# that matches the 'error_matcher' matcher, the block will wait a set number
-# of seconds before retrying.
-# Params:
-# - max_retry_count - Max number of retries
-# - retry_wait_interval_secs - Number of seconds to wait before retry
-# - error_matcher - Matcher which the exception raised must match to allow retry
-# Example Usage:
-# retry_on_error_matching(3, 5, /OpenGPG Error/) do
-# apply_manifest(pp, :catch_failures => true)
-# end
-def retry_on_error_matching(max_retry_count = 3, retry_wait_interval_secs = 5, error_matcher = nil)
- try = 0
- begin
- try += 1
- yield
- rescue StandardError => e
- raise unless try < max_retry_count && (error_matcher.nil? || e.message =~ error_matcher)
- sleep retry_wait_interval_secs
- retry
- end
-end
+ if target_in_group(inventory_hash, ENV['TARGET_HOST'], 'docker_nodes')
+ host = ENV['TARGET_HOST']
+ set :backend, :docker
+ set :docker_container, host
+ elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'ssh_nodes')
+ set :backend, :ssh
+ options = Net::SSH::Config.for(host)
+ options[:user] = node_config.dig('ssh', 'user') unless node_config.dig('ssh', 'user').nil?
+ options[:port] = node_config.dig('ssh', 'port') unless node_config.dig('ssh', 'port').nil?
+ options[:keys] = node_config.dig('ssh', 'private-key') unless node_config.dig('ssh', 'private-key').nil?
+ options[:password] = node_config.dig('ssh', 'password') unless node_config.dig('ssh', 'password').nil?
+ # Support both net-ssh 4 and 5.
+ # rubocop:disable Metrics/BlockNesting
+ options[:verify_host_key] = if node_config.dig('ssh', 'host-key-check').nil?
+ # Fall back to SSH behavior. This variable will only be set in net-ssh 5.3+.
+ if @strict_host_key_checking.nil? || @strict_host_key_checking
+ Net::SSH::Verifiers::Always.new
+ else
+ # SSH's behavior with StrictHostKeyChecking=no: adds new keys to known_hosts.
+ # If known_hosts points to /dev/null, then equivalent to :never where it
+ # accepts any key beacuse they're all new.
+ Net::SSH::Verifiers::AcceptNewOrLocalTunnel.new
+ end
+ elsif node_config.dig('ssh', 'host-key-check')
+ if defined?(Net::SSH::Verifiers::Always)
+ Net::SSH::Verifiers::Always.new
+ else
+ Net::SSH::Verifiers::Secure.new
+ end
+ elsif defined?(Net::SSH::Verifiers::Never)
+ Net::SSH::Verifiers::Never.new
+ else
+ Net::SSH::Verifiers::Null.new
+ end
+ # rubocop:enable Metrics/BlockNesting
+ host = if ENV['TARGET_HOST'].include?(':')
+ ENV['TARGET_HOST'].split(':').first
+ else
+ ENV['TARGET_HOST']
+ end
+ set :host, options[:host_name] || host
+ set :ssh_options, options
+ elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'winrm_nodes')
+ require 'winrm'