module PuppetLitmus
Helper methods for testing puppet content
Helper methods for testing puppet content
Helper methods for testing puppet content
version of this gem
Public Class Methods
configure!()
click to toggle source
# File lib/puppet_litmus/spec_helper_acceptance.rb, line 7 def self.configure! require 'serverspec' RSpec.configure do |config| config.include PuppetLitmus config.extend PuppetLitmus end if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost' puts 'Running tests against this machine !' if Gem.win_platform? set :backend, :cmd else set :backend, :exec end else # load inventory inventory_hash = inventory_hash_from_inventory_file node_config = config_from_node(inventory_hash, ENV['TARGET_HOST']) 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? run_as = node_config.dig('ssh', 'run-as') unless node_config.dig('ssh', 'run-as').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 set :request_pty, false set :sudo_password, options[:password] if run_as puts "Running tests as #{run_as}" if run_as elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'winrm_nodes') require 'winrm' set :backend, :winrm set :os, family: 'windows' user = node_config.dig('winrm', 'user') unless node_config.dig('winrm', 'user').nil? pass = node_config.dig('winrm', 'password') unless node_config.dig('winrm', 'password').nil? endpoint = URI("http://#{ENV['TARGET_HOST']}") endpoint.port = 5985 if endpoint.port == 80 endpoint.path = '/wsman' opts = { user: user, password: pass, endpoint: endpoint, operation_timeout: 300, } winrm = WinRM::Connection.new opts Specinfra.configuration.winrm = winrm end end end