1 # frozen_string_literal: true
4 require 'puppet_litmus'
5 require 'spec_helper_acceptance_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_acceptance_local.rb'))
8 if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost'
9 puts 'Running tests against this machine !'
17 inventory_hash = inventory_hash_from_inventory_file
18 node_config = config_from_node(inventory_hash, ENV['TARGET_HOST'])
20 if target_in_group(inventory_hash, ENV['TARGET_HOST'], 'docker_nodes')
21 host = ENV['TARGET_HOST']
23 set :docker_container, host
24 elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'ssh_nodes')
26 options = Net::SSH::Config.for(host)
27 options[:user] = node_config.dig('ssh', 'user') unless node_config.dig('ssh', 'user').nil?
28 options[:port] = node_config.dig('ssh', 'port') unless node_config.dig('ssh', 'port').nil?
29 options[:keys] = node_config.dig('ssh', 'private-key') unless node_config.dig('ssh', 'private-key').nil?
30 options[:password] = node_config.dig('ssh', 'password') unless node_config.dig('ssh', 'password').nil?
31 # Support both net-ssh 4 and 5.
32 # rubocop:disable Metrics/BlockNesting
33 options[:verify_host_key] = if node_config.dig('ssh', 'host-key-check').nil?
34 # Fall back to SSH behavior. This variable will only be set in net-ssh 5.3+.
35 if @strict_host_key_checking.nil? || @strict_host_key_checking
36 Net::SSH::Verifiers::Always.new
38 # SSH's behavior with StrictHostKeyChecking=no: adds new keys to known_hosts.
39 # If known_hosts points to /dev/null, then equivalent to :never where it
40 # accepts any key beacuse they're all new.
41 Net::SSH::Verifiers::AcceptNewOrLocalTunnel.new
43 elsif node_config.dig('ssh', 'host-key-check')
44 if defined?(Net::SSH::Verifiers::Always)
45 Net::SSH::Verifiers::Always.new
47 Net::SSH::Verifiers::Secure.new
49 elsif defined?(Net::SSH::Verifiers::Never)
50 Net::SSH::Verifiers::Never.new
52 Net::SSH::Verifiers::Null.new
54 # rubocop:enable Metrics/BlockNesting
55 host = if ENV['TARGET_HOST'].include?(':')
56 ENV['TARGET_HOST'].split(':').first
60 set :host, options[:host_name] || host
61 set :ssh_options, options
62 set :request_pty, true
63 elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'winrm_nodes')
65 # rubocop:disable Style/HashSyntax
67 set :os, family: 'windows'
68 user = node_config.dig('winrm', 'user') unless node_config.dig('winrm', 'user').nil?
69 pass = node_config.dig('winrm', 'password') unless node_config.dig('winrm', 'password').nil?
70 endpoint = "http://#{ENV['TARGET_HOST']}:5985/wsman"
76 operation_timeout: 300,
78 # rubocop:enable Style/HashSyntax
79 winrm = WinRM::Connection.new opts
80 Specinfra.configuration.winrm = winrm