-require 'beaker-rspec'
+# frozen_string_literal: true
-# Install Puppet
-unless ENV['RS_PROVISION'] == 'no'
- hosts.each do |host|
- if host.is_pe?
- install_pe
- else
- install_puppet
- on host, "mkdir -p #{host['distmoduledir']}"
- end
+require 'serverspec'
+require 'puppet_litmus'
+require 'spec_helper_acceptance_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_acceptance_local.rb'))
+include PuppetLitmus
+
+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
-end
+else
+ # load inventory
+ inventory_hash = inventory_hash_from_inventory_file
+ node_config = config_from_node(inventory_hash, ENV['TARGET_HOST'])
-UNSUPPORTED_PLATFORMS = ['RedHat','Suse','windows','AIX','Solaris']
+ 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?
+ options[:verify_host_key] = Net::SSH::Verifiers::Null.new unless node_config.dig('ssh', 'host-key-check').nil?
+ 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'
-RSpec.configure do |c|
- # Project root
- proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
+ 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 = "http://#{ENV['TARGET_HOST']}:5985/wsman"
- # Readable test descriptions
- c.formatter = :documentation
+ opts = {
+ user: user,
+ password: pass,
+ endpoint: endpoint,
+ operation_timeout: 300,
+ }
- # Configure all nodes in nodeset
- c.before :suite do
- # Install module and dependencies
- puppet_module_install(:source => proj_root, :module_name => 'apt')
- hosts.each do |host|
- shell('/bin/touch /etc/puppet/hiera.yaml')
- shell('puppet module install puppetlabs-stdlib --version 2.2.1', { :acceptable_exit_codes => [0,1] })
- end
+ winrm = WinRM::Connection.new opts
+ Specinfra.configuration.winrm = winrm
end
end