Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / spec / spec_helper_acceptance.rb
1 # frozen_string_literal: true
2
3 require 'serverspec'
4 require 'puppet_litmus'
5 require 'spec_helper_acceptance_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_acceptance_local.rb'))
6 include PuppetLitmus
7
8 if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost'
9   puts 'Running tests against this machine !'
10   if Gem.win_platform?
11     set :backend, :cmd
12   else
13     set :backend, :exec
14   end
15 else
16   # load inventory
17   inventory_hash = inventory_hash_from_inventory_file
18   node_config = config_from_node(inventory_hash, ENV['TARGET_HOST'])
19
20   if target_in_group(inventory_hash, ENV['TARGET_HOST'], 'docker_nodes')
21     host = ENV['TARGET_HOST']
22     set :backend, :docker
23     set :docker_container, host
24   elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'ssh_nodes')
25     set :backend, :ssh
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
37                                   else
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
42                                   end
43                                 elsif node_config.dig('ssh', 'host-key-check')
44                                   if defined?(Net::SSH::Verifiers::Always)
45                                     Net::SSH::Verifiers::Always.new
46                                   else
47                                     Net::SSH::Verifiers::Secure.new
48                                   end
49                                 elsif defined?(Net::SSH::Verifiers::Never)
50                                   Net::SSH::Verifiers::Never.new
51                                 else
52                                   Net::SSH::Verifiers::Null.new
53                                 end
54     # rubocop:enable Metrics/BlockNesting
55     host = if ENV['TARGET_HOST'].include?(':')
56              ENV['TARGET_HOST'].split(':').first
57            else
58              ENV['TARGET_HOST']
59            end
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')
64     require 'winrm'
65     # rubocop:disable Style/HashSyntax
66     set :backend, :winrm
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"
71
72     opts = {
73       user: user,
74       password: pass,
75       endpoint: endpoint,
76       operation_timeout: 300,
77     }
78     # rubocop:enable Style/HashSyntax
79     winrm = WinRM::Connection.new opts
80     Specinfra.configuration.winrm = winrm
81   end
82 end