This repository has been archived by the owner on Aug 18, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathspec_helper_acceptance.rb
102 lines (90 loc) · 2.8 KB
/
spec_helper_acceptance.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# frozen_string_literal: true
require 'lib/dsc_utils'
require 'erb'
require 'serverspec'
require 'puppet_litmus'
require 'open3'
include PuppetLitmus
def single_dsc_resource_manifest(dsc_type, dsc_props)
output = "dsc_#{dsc_type} {'#{dsc_type}_test':\n"
dsc_props.each do |k, v|
output += if v =~ %r{^\[.*\]$}
" #{k} => #{v},\n"
elsif v =~ %r{^(true|false)$}
" #{k} => #{v},\n"
elsif v =~ %r{^{.*}$}
" #{k} => #{v},\n"
else
" #{k} => '#{v}',\n"
end
end
output += "}\n"
output
end
def create_windows_file(folder_path, file_name, content)
content = content.tr('"', "'")
manifest = <<-FileManifest
file{"#{folder_path}":
ensure => directory,
}
file { "#{folder_path}/#{file_name}":
content => "#{content}",
}
FileManifest
apply_manifest(manifest)
end
def strip_crln(input_string)
input_string.to_s.delete("\n").delete("\r")
end
def escape_value(value)
if is_number?(value)
value
else
"'#{value.to_s.gsub("'", "''")}\'"
end
end
def is_number?(value)
value.respond_to?(:to_i) ? value.to_s == value.to_i.to_s : false
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
puts "TARGET_HOST #{ENV['TARGET_HOST']}"
# 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'], '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[:password] = node_config.dig('ssh', 'password') unless node_config.dig('ssh', 'password').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'
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"
opts = {
user: user,
password: pass,
endpoint: endpoint,
operation_timeout: 300,
}
winrm = WinRM::Connection.new opts
Specinfra.configuration.winrm = winrm
end
end