beaker 2.18.3 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/HISTORY.md +439 -2
- data/acceptance/lib/beaker/acceptance/install_utils.rb +58 -0
- data/acceptance/pre_suite/puppet_git/install.rb +6 -65
- data/acceptance/tests/foss_utils/clone_git_repo_on.rb +49 -0
- data/beaker.gemspec +2 -0
- data/lib/beaker/dsl/helpers/web_helpers.rb +2 -1
- data/lib/beaker/dsl/install_utils/aio_defaults.rb +0 -2
- data/lib/beaker/dsl/install_utils/foss_utils.rb +97 -60
- data/lib/beaker/dsl/install_utils/pe_utils.rb +30 -53
- data/lib/beaker/dsl/install_utils/puppet_utils.rb +43 -0
- data/lib/beaker/dsl/install_utils/windows_utils.rb +144 -0
- data/lib/beaker/dsl/roles.rb +20 -3
- data/lib/beaker/dsl/structure.rb +14 -3
- data/lib/beaker/host.rb +24 -3
- data/lib/beaker/host/unix/pkg.rb +9 -0
- data/lib/beaker/host/windows/exec.rb +3 -0
- data/lib/beaker/host_prebuilt_steps.rb +5 -9
- data/lib/beaker/hypervisor/aws_sdk.rb +22 -18
- data/lib/beaker/hypervisor/docker.rb +7 -0
- data/lib/beaker/hypervisor/vmpooler.rb +4 -0
- data/lib/beaker/logger.rb +12 -1
- data/lib/beaker/options/command_line_parser.rb +9 -0
- data/lib/beaker/options/options_hash.rb +3 -296
- data/lib/beaker/options/parser.rb +12 -0
- data/lib/beaker/options/presets.rb +0 -1
- data/lib/beaker/ssh_connection.rb +48 -23
- data/lib/beaker/test_case.rb +1 -1
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/helpers/web_helpers_spec.rb +10 -1
- data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +194 -49
- data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +112 -22
- data/spec/beaker/dsl/install_utils/puppet_utils_spec.rb +57 -0
- data/spec/beaker/dsl/install_utils/windows_utils_spec.rb +132 -0
- data/spec/beaker/dsl/roles_spec.rb +36 -5
- data/spec/beaker/dsl/structure_spec.rb +9 -2
- data/spec/beaker/host/unix/pkg_spec.rb +26 -6
- data/spec/beaker/host_prebuilt_steps_spec.rb +3 -2
- data/spec/beaker/host_spec.rb +18 -0
- data/spec/beaker/hypervisor/aixer_spec.rb +1 -1
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +595 -58
- data/spec/beaker/hypervisor/docker_spec.rb +2 -1
- data/spec/beaker/hypervisor/solaris_spec.rb +1 -0
- data/spec/beaker/hypervisor/vagrant_spec.rb +2 -1
- data/spec/beaker/logger_spec.rb +39 -0
- data/spec/beaker/options/command_line_parser_spec.rb +2 -2
- data/spec/beaker/options/options_hash_spec.rb +1 -102
- data/spec/beaker/options/parser_spec.rb +19 -0
- data/spec/beaker/options/pe_version_scaper_spec.rb +11 -1
- data/spec/beaker/options/presets_spec.rb +8 -0
- data/spec/beaker/ssh_connection_spec.rb +39 -21
- data/spec/helpers.rb +9 -3
- data/spec/mocks.rb +2 -0
- metadata +34 -11
- data/lib/beaker/answers.rb +0 -143
- data/lib/beaker/answers/version20.rb +0 -120
- data/lib/beaker/answers/version28.rb +0 -121
- data/lib/beaker/answers/version30.rb +0 -227
- data/lib/beaker/answers/version32.rb +0 -44
- data/lib/beaker/answers/version34.rb +0 -51
- data/lib/beaker/answers/version38.rb +0 -29
- data/lib/beaker/answers/version40.rb +0 -44
- data/spec/beaker/answers_spec.rb +0 -547
@@ -0,0 +1,58 @@
|
|
1
|
+
module Beaker
|
2
|
+
module Acceptance
|
3
|
+
module InstallUtils
|
4
|
+
|
5
|
+
PLATFORM_PATTERNS = {
|
6
|
+
:redhat => /fedora|el|centos/,
|
7
|
+
:debian => /debian|ubuntu/,
|
8
|
+
:debian_ruby18 => /debian|ubuntu-lucid|ubuntu-precise/,
|
9
|
+
:solaris_10 => /solaris-10/,
|
10
|
+
:solaris_11 => /solaris-11/,
|
11
|
+
:windows => /windows/,
|
12
|
+
:sles => /sles/,
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
# Installs packages on the hosts.
|
16
|
+
#
|
17
|
+
# @param hosts [Array<Host>] Array of hosts to install packages to.
|
18
|
+
# @param package_hash [Hash{Symbol=>Array<String,Array<String,String>>}]
|
19
|
+
# Keys should be a symbol for a platform in PLATFORM_PATTERNS. Values
|
20
|
+
# should be an array of package names to install, or of two element
|
21
|
+
# arrays where a[0] is the command we expect to find on the platform
|
22
|
+
# and a[1] is the package name (when they are different).
|
23
|
+
# @param options [Hash{Symbol=>Boolean}]
|
24
|
+
# @option options [Boolean] :check_if_exists First check to see if
|
25
|
+
# command is present before installing package. (Default false)
|
26
|
+
# @return true
|
27
|
+
def install_packages_on(hosts, package_hash, options = {})
|
28
|
+
return true if hosts == nil
|
29
|
+
check_if_exists = options[:check_if_exists]
|
30
|
+
hosts = [hosts] unless hosts.kind_of?(Array)
|
31
|
+
hosts.each do |host|
|
32
|
+
package_hash.each do |platform_key,package_list|
|
33
|
+
if pattern = PLATFORM_PATTERNS[platform_key]
|
34
|
+
if pattern.match(host['platform'])
|
35
|
+
package_list.each do |cmd_pkg|
|
36
|
+
if cmd_pkg.kind_of?(Array)
|
37
|
+
command, package = cmd_pkg
|
38
|
+
else
|
39
|
+
command = package = cmd_pkg
|
40
|
+
end
|
41
|
+
if !check_if_exists || !host.check_for_package(command)
|
42
|
+
host.logger.notify("Installing #{package}")
|
43
|
+
additional_switches = '--allow-unauthenticated' if platform_key == :debian
|
44
|
+
host.install_package(package, additional_switches)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
else
|
49
|
+
raise("Unknown platform '#{platform_key}' in package_hash")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
return true
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,3 +1,9 @@
|
|
1
|
+
begin
|
2
|
+
require 'beaker/acceptance/install_utils'
|
3
|
+
extend Beaker::Acceptance::InstallUtils
|
4
|
+
end
|
5
|
+
test_name 'Puppet git pre-suite'
|
6
|
+
|
1
7
|
install = [
|
2
8
|
'facter#2.1.0',
|
3
9
|
'hiera#1.3.4',
|
@@ -40,73 +46,8 @@ PACKAGES = {
|
|
40
46
|
]
|
41
47
|
}
|
42
48
|
|
43
|
-
PLATFORM_PATTERNS = {
|
44
|
-
:redhat => /fedora|el|centos/,
|
45
|
-
:debian => /debian|ubuntu/,
|
46
|
-
:debian_ruby18 => /debian|ubuntu-lucid|ubuntu-precise/,
|
47
|
-
:solaris_10 => /solaris-10/,
|
48
|
-
:solaris_11 => /solaris-11/,
|
49
|
-
:windows => /windows/,
|
50
|
-
:sles => /sles/,
|
51
|
-
}.freeze
|
52
|
-
|
53
|
-
# Installs packages on the hosts.
|
54
|
-
#
|
55
|
-
# @param hosts [Array<Host>] Array of hosts to install packages to.
|
56
|
-
# @param package_hash [Hash{Symbol=>Array<String,Array<String,String>>}]
|
57
|
-
# Keys should be a symbol for a platform in PLATFORM_PATTERNS. Values
|
58
|
-
# should be an array of package names to install, or of two element
|
59
|
-
# arrays where a[0] is the command we expect to find on the platform
|
60
|
-
# and a[1] is the package name (when they are different).
|
61
|
-
# @param options [Hash{Symbol=>Boolean}]
|
62
|
-
# @option options [Boolean] :check_if_exists First check to see if
|
63
|
-
# command is present before installing package. (Default false)
|
64
|
-
# @return true
|
65
|
-
def install_packages_on(hosts, package_hash, options = {})
|
66
|
-
return true if hosts == nil
|
67
|
-
check_if_exists = options[:check_if_exists]
|
68
|
-
hosts = [hosts] unless hosts.kind_of?(Array)
|
69
|
-
hosts.each do |host|
|
70
|
-
package_hash.each do |platform_key,package_list|
|
71
|
-
if pattern = PLATFORM_PATTERNS[platform_key]
|
72
|
-
if pattern.match(host['platform'])
|
73
|
-
package_list.each do |cmd_pkg|
|
74
|
-
if cmd_pkg.kind_of?(Array)
|
75
|
-
command, package = cmd_pkg
|
76
|
-
else
|
77
|
-
command = package = cmd_pkg
|
78
|
-
end
|
79
|
-
if !check_if_exists || !host.check_for_package(command)
|
80
|
-
host.logger.notify("Installing #{package}")
|
81
|
-
additional_switches = '--allow-unauthenticated' if platform_key == :debian
|
82
|
-
host.install_package(package, additional_switches)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
else
|
87
|
-
raise("Unknown platform '#{platform_key}' in package_hash")
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
return true
|
92
|
-
end
|
93
|
-
|
94
49
|
install_packages_on(hosts, PACKAGES, :check_if_exists => true)
|
95
50
|
|
96
|
-
def lookup_in_env(env_variable_name, project_name, default)
|
97
|
-
project_specific_name = "#{project_name.upcase.gsub("-","_")}_#{env_variable_name}"
|
98
|
-
ENV[project_specific_name] || ENV[env_variable_name] || default
|
99
|
-
end
|
100
|
-
|
101
|
-
def build_giturl(project_name, git_fork = nil, git_server = nil)
|
102
|
-
git_fork ||= lookup_in_env('FORK', project_name, 'puppetlabs')
|
103
|
-
git_server ||= lookup_in_env('GIT_SERVER', project_name, 'github.com')
|
104
|
-
repo = (git_server == 'github.com') ?
|
105
|
-
"#{git_fork}/#{project_name}.git" :
|
106
|
-
"#{git_fork}-#{project_name}.git"
|
107
|
-
"git://#{git_server}/#{repo}"
|
108
|
-
end
|
109
|
-
|
110
51
|
hosts.each do |host|
|
111
52
|
case host['platform']
|
112
53
|
when /windows/
|
@@ -0,0 +1,49 @@
|
|
1
|
+
begin
|
2
|
+
require 'beaker/acceptance/install_utils'
|
3
|
+
extend Beaker::Acceptance::InstallUtils
|
4
|
+
end
|
5
|
+
test_name 'Clone from git'
|
6
|
+
|
7
|
+
PACKAGES = {
|
8
|
+
:redhat => [
|
9
|
+
'git',
|
10
|
+
],
|
11
|
+
:debian => [
|
12
|
+
['git', 'git-core'],
|
13
|
+
],
|
14
|
+
:solaris_11 => [
|
15
|
+
['git', 'developer/versioning/git'],
|
16
|
+
],
|
17
|
+
:solaris_10 => [
|
18
|
+
'coreutils',
|
19
|
+
'curl', # update curl to fix "CURLOPT_SSL_VERIFYHOST no longer supports 1 as value!" issue
|
20
|
+
'git',
|
21
|
+
],
|
22
|
+
:windows => [
|
23
|
+
'git',
|
24
|
+
],
|
25
|
+
:sles => [
|
26
|
+
'git-core',
|
27
|
+
]
|
28
|
+
}
|
29
|
+
|
30
|
+
install_packages_on(hosts, PACKAGES, :check_if_exists => true)
|
31
|
+
|
32
|
+
# build_giturl implicitly looks these up
|
33
|
+
ENV['HIERA_FORK']='puppetlabs'
|
34
|
+
ENV['FORK']='fail'
|
35
|
+
|
36
|
+
# implicitly tests build_giturl() and lookup_in_env()
|
37
|
+
hosts.each do |host|
|
38
|
+
on host, "echo #{GitHubSig} >> $HOME/.ssh/known_hosts"
|
39
|
+
testdir = create_tmpdir_on(host, File.basename(__FILE__))
|
40
|
+
|
41
|
+
step 'should find fork name from the correct environment variable'
|
42
|
+
results = clone_git_repo_on(host, "#{testdir}", extract_repo_info_from(build_git_url('puppet')))
|
43
|
+
assert_match( /github\.com:fail/, result.cmd, 'Did not find correct fork name')
|
44
|
+
assert_equal( 1, result.exit_code, 'Did not produce error exit_code of 1')
|
45
|
+
|
46
|
+
step 'should clone hiera from correct fork'
|
47
|
+
results = clone_git_repo_on(host, "#{testdir}", extract_repo_info_from(build_git_url('hiera')))
|
48
|
+
assert_match( /From github\.com:puppetlabs\/hiera/, result.output, 'Did not find clone')
|
49
|
+
end
|
data/beaker.gemspec
CHANGED
@@ -39,6 +39,8 @@ Gem::Specification.new do |s|
|
|
39
39
|
s.add_runtime_dependency 'inifile', '~> 2.0'
|
40
40
|
s.add_runtime_dependency 'rsync', '~> 1.0.9'
|
41
41
|
s.add_runtime_dependency 'open_uri_redirections', '~> 0.2.1'
|
42
|
+
s.add_runtime_dependency 'beaker-answers', '~> 0.0'
|
43
|
+
s.add_runtime_dependency 'stringify-hash', '~> 0.0'
|
42
44
|
|
43
45
|
# Optional provisioner specific support
|
44
46
|
s.add_runtime_dependency 'rbvmomi', '~> 1.8'
|
@@ -33,7 +33,7 @@ module Beaker
|
|
33
33
|
#
|
34
34
|
# @param [String] base_url The base url from which to recursively download
|
35
35
|
# files.
|
36
|
-
# @param [String] file_name The trailing name
|
36
|
+
# @param [String] file_name The trailing name component of both the source url
|
37
37
|
# and the destination file.
|
38
38
|
# @param [String] dst_dir The local destination directory.
|
39
39
|
#
|
@@ -44,6 +44,7 @@ module Beaker
|
|
44
44
|
require 'open-uri'
|
45
45
|
require 'open_uri_redirections'
|
46
46
|
FileUtils.makedirs(dst_dir)
|
47
|
+
base_url.chomp!('/')
|
47
48
|
src = "#{base_url}/#{file_name}"
|
48
49
|
dst = File.join(dst_dir, file_name)
|
49
50
|
if File.exists?(dst)
|
@@ -36,7 +36,6 @@ module Beaker
|
|
36
36
|
else
|
37
37
|
host['group'] = 'puppet'
|
38
38
|
end
|
39
|
-
host['type'] = 'aio'
|
40
39
|
end
|
41
40
|
|
42
41
|
# Add the appropriate aio defaults to an array of hosts
|
@@ -60,7 +59,6 @@ module Beaker
|
|
60
59
|
AIO_DEFAULTS[platform].each_pair do |key, val|
|
61
60
|
host.delete(key)
|
62
61
|
end
|
63
|
-
host['type'] = nil
|
64
62
|
host['group'] = nil
|
65
63
|
end
|
66
64
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
[ 'aio_defaults', 'foss_defaults', 'puppet_utils' ].each do |lib|
|
1
|
+
[ 'aio_defaults', 'foss_defaults', 'puppet_utils', 'windows_utils' ].each do |lib|
|
2
2
|
require "beaker/dsl/install_utils/#{lib}"
|
3
3
|
end
|
4
4
|
module Beaker
|
@@ -18,6 +18,7 @@ module Beaker
|
|
18
18
|
include AIODefaults
|
19
19
|
include FOSSDefaults
|
20
20
|
include PuppetUtils
|
21
|
+
include WindowsUtils
|
21
22
|
|
22
23
|
# The default install path
|
23
24
|
SourcePath = "/opt/puppet-git-repos"
|
@@ -28,26 +29,39 @@ module Beaker
|
|
28
29
|
# Github's ssh signature for cloning via ssh
|
29
30
|
GitHubSig = 'github.com,207.97.227.239 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=='
|
30
31
|
|
31
|
-
#
|
32
|
-
#
|
32
|
+
# lookup project-specific git environment variables
|
33
|
+
# PROJECT_VAR or VAR otherwise return the default
|
33
34
|
#
|
34
|
-
#
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
35
|
+
# @!visibility private
|
36
|
+
def lookup_in_env(env_variable_name, project_name=nil, default=nil)
|
37
|
+
env_variable_name = "#{env_variable_name.upcase.gsub('-','_')}"
|
38
|
+
project_specific_name = "#{project_name.upcase.gsub('-','_')}_#{env_variable_name}" if project_name
|
39
|
+
project_name && ENV[project_specific_name] || ENV[env_variable_name] || default
|
40
|
+
end
|
41
|
+
|
42
|
+
# @param [String] project_name
|
43
|
+
# @param [String] git_fork When not provided will use PROJECT_FORK environment variable
|
44
|
+
# @param [String] git_server When not provided will use PROJECT_SERVER environment variable
|
45
|
+
# @param [String] git_protocol 'git','ssh','https'
|
46
|
+
#
|
47
|
+
# @return [String] Returns a git-usable url
|
48
|
+
#
|
49
|
+
# TODO: enable other protocols, clarify, http://git-scm.com/book/ch4-1.html
|
50
|
+
def build_git_url(project_name, git_fork = nil, git_server = nil, git_protocol='https')
|
51
|
+
git_fork ||= lookup_in_env('FORK', project_name, 'puppetlabs')
|
52
|
+
git_server ||= lookup_in_env('SERVER', project_name, 'github.com')
|
53
|
+
|
54
|
+
case git_protocol
|
55
|
+
when /(ssh|git)/
|
56
|
+
git_protocol = 'git@'
|
57
|
+
when /https/
|
58
|
+
git_protocol = 'https://'
|
49
59
|
end
|
60
|
+
|
61
|
+
repo = (git_server == 'github.com') ? "#{git_fork}/#{project_name}.git" : "#{git_fork}-#{project_name}.git"
|
62
|
+
return git_protocol == 'git@' ? "#{git_protocol}#{git_server}:#{repo}" : "#{git_protocol}#{git_server}/#{repo}"
|
50
63
|
end
|
64
|
+
alias_method :build_giturl, :build_git_url
|
51
65
|
|
52
66
|
# @param [String] uri A uri in the format of <git uri>#<revision>
|
53
67
|
# the `git://`, `http://`, `https://`, and ssh
|
@@ -121,9 +135,18 @@ module Beaker
|
|
121
135
|
version
|
122
136
|
end
|
123
137
|
|
138
|
+
# @param [Host] host An object implementing {Beaker::Hosts}'s
|
139
|
+
# interface.
|
140
|
+
# @param [String] path The path on the remote [host] to the repository
|
141
|
+
# @param [Hash{Symbol=>String}] repository A hash representing repo
|
142
|
+
# info like that emitted by
|
143
|
+
# {#extract_repo_info_from}
|
124
144
|
#
|
125
|
-
# @
|
126
|
-
|
145
|
+
# @note This requires the helper methods:
|
146
|
+
# * {Beaker::DSL::Helpers#on}
|
147
|
+
#
|
148
|
+
def clone_git_repo_on host, path, repository, opts = {}
|
149
|
+
opts = {:accept_all_exit_codes => true}.merge(opts)
|
127
150
|
name = repository[:name]
|
128
151
|
repo = repository[:path]
|
129
152
|
rev = repository[:rev]
|
@@ -142,33 +165,41 @@ module Beaker
|
|
142
165
|
|
143
166
|
logger.notify("\n * Clone #{repo} if needed")
|
144
167
|
|
145
|
-
on host, "test -d #{path} || mkdir -p #{path}"
|
146
|
-
on host, "test -d #{target} || #{clone_cmd}"
|
168
|
+
on host, "test -d #{path} || mkdir -p #{path}", opts
|
169
|
+
on host, "test -d #{target} || #{clone_cmd}", opts
|
147
170
|
|
148
171
|
logger.notify("\n * Update #{name} and check out revision #{rev}")
|
149
|
-
|
150
172
|
commands = ["cd #{target}",
|
151
173
|
"remote rm origin",
|
152
174
|
"remote add origin #{repo}",
|
153
175
|
"fetch origin +refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/*",
|
154
176
|
"clean -fdx",
|
155
177
|
"checkout -f #{rev}"]
|
156
|
-
on host, commands.join(" && git ")
|
178
|
+
on host, commands.join(" && git "), opts
|
179
|
+
end
|
157
180
|
|
181
|
+
# @see #find_git_repo_versions
|
182
|
+
# @note This assumes the target repository application
|
183
|
+
# can be installed via an install.rb ruby script.
|
184
|
+
def install_from_git_on host, path, repository, opts = {}
|
185
|
+
opts = {:accept_all_exit_codes => true}.merge(opts)
|
186
|
+
clone_git_repo_on host, path, repository, opts
|
187
|
+
name = repository[:name]
|
158
188
|
logger.notify("\n * Install #{name} on the system")
|
159
189
|
# The solaris ruby IPS package has bindir set to /usr/ruby/1.8/bin.
|
160
190
|
# However, this is not the path to which we want to deliver our
|
161
191
|
# binaries. So if we are using solaris, we have to pass the bin and
|
162
192
|
# sbin directories to the install.rb
|
193
|
+
target = "#{path}/#{name}"
|
163
194
|
install_opts = ''
|
164
|
-
install_opts = '--bindir=/usr/bin --sbindir=/usr/sbin' if
|
165
|
-
host['platform'].include? 'solaris'
|
195
|
+
install_opts = '--bindir=/usr/bin --sbindir=/usr/sbin' if host['platform'].include? 'solaris'
|
166
196
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
197
|
+
on host, "cd #{target} && " +
|
198
|
+
"if [ -f install.rb ]; then " +
|
199
|
+
"ruby ./install.rb #{install_opts}; " +
|
200
|
+
"else true; fi", opts
|
171
201
|
end
|
202
|
+
alias_method :install_from_git, :install_from_git_on
|
172
203
|
|
173
204
|
# @deprecated Use {#install_puppet_on} instead.
|
174
205
|
def install_puppet(opts = {})
|
@@ -299,7 +330,7 @@ module Beaker
|
|
299
330
|
opts[:puppet_agent_version] ||= opts[:version] #backwards compatability with old parameter name
|
300
331
|
|
301
332
|
block_on hosts do |host|
|
302
|
-
host
|
333
|
+
add_role(host, 'aio') #we are installing agent, so we want aio role
|
303
334
|
case host['platform']
|
304
335
|
when /el-4|sles/
|
305
336
|
# pe-only agent, get from dev repo
|
@@ -421,7 +452,7 @@ module Beaker
|
|
421
452
|
|
422
453
|
puppet_pkg = opts[:version] ? "puppet-#{opts[:version]}" : 'puppet'
|
423
454
|
host.install_package("#{puppet_pkg}")
|
424
|
-
|
455
|
+
configure_type_defaults_on( host )
|
425
456
|
end
|
426
457
|
end
|
427
458
|
alias_method :install_puppet_from_rpm, :install_puppet_from_rpm_on
|
@@ -455,7 +486,7 @@ module Beaker
|
|
455
486
|
else
|
456
487
|
host.install_package('puppet')
|
457
488
|
end
|
458
|
-
|
489
|
+
configure_type_defaults_on( host )
|
459
490
|
end
|
460
491
|
end
|
461
492
|
alias_method :install_puppet_from_deb, :install_puppet_from_deb_on
|
@@ -491,7 +522,7 @@ module Beaker
|
|
491
522
|
install_a_puppet_msi_on(host, opts)
|
492
523
|
|
493
524
|
end
|
494
|
-
|
525
|
+
configure_type_defaults_on( host )
|
495
526
|
end
|
496
527
|
end
|
497
528
|
alias_method :install_puppet_from_msi, :install_puppet_from_msi_on
|
@@ -540,7 +571,7 @@ module Beaker
|
|
540
571
|
def install_puppet_agent_from_msi_on(hosts, opts)
|
541
572
|
block_on hosts do |host|
|
542
573
|
|
543
|
-
host
|
574
|
+
add_role(host, 'aio') #we are installing agent, so we want aio role
|
544
575
|
is_config_32 = true == (host['ruby_arch'] == 'x86') || host['install_32'] || opts['install_32']
|
545
576
|
should_install_64bit = host.is_x86_64? && !is_config_32
|
546
577
|
arch = should_install_64bit ? 'x64' : 'x86'
|
@@ -564,26 +595,26 @@ module Beaker
|
|
564
595
|
raise "Puppet #{version} at #{link} does not exist!"
|
565
596
|
end
|
566
597
|
|
598
|
+
|
599
|
+
msi_download_path = "#{get_temp_path(host)}\\#{host['dist']}.msi"
|
600
|
+
|
567
601
|
if host.is_cygwin?
|
568
|
-
|
569
|
-
on host, "curl -O #{link}"
|
602
|
+
# NOTE: it is critical that -o be before -O on Windows
|
603
|
+
on host, "curl -o \"#{msi_download_path}\" -O #{link}"
|
570
604
|
|
571
605
|
#Because the msi installer doesn't add Puppet to the environment path
|
572
606
|
#Add both potential paths for simplicity
|
573
607
|
#NOTE - this is unnecessary if the host has been correctly identified as 'foss' during set up
|
574
608
|
puppetbin_path = "\"/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin\":\"/cygdrive/c/Program Files/Puppet Labs/Puppet/bin\""
|
575
609
|
on host, %Q{ echo 'export PATH=$PATH:#{puppetbin_path}' > /etc/bash.bashrc }
|
576
|
-
|
577
|
-
on host, "cmd /C 'start /w msiexec.exe /qn /i #{dest}'"
|
578
610
|
else
|
579
|
-
|
580
|
-
|
581
|
-
on host, powershell("$webclient = New-Object System.Net.WebClient; $webclient.DownloadFile('#{link}','#{dest}')")
|
582
|
-
|
583
|
-
on host, "start /w msiexec.exe /qn /i #{dest}"
|
611
|
+
on host, powershell("$webclient = New-Object System.Net.WebClient; $webclient.DownloadFile('#{link}','#{msi_download_path}')")
|
584
612
|
end
|
585
613
|
|
586
|
-
|
614
|
+
opts = { :debug => host[:pe_debug] || opts[:pe_debug] }
|
615
|
+
install_msi_on(host, msi_download_path, {}, opts)
|
616
|
+
|
617
|
+
configure_type_defaults_on( host )
|
587
618
|
if not host.is_cygwin?
|
588
619
|
host.mkdir_p host['distmoduledir']
|
589
620
|
end
|
@@ -657,7 +688,7 @@ module Beaker
|
|
657
688
|
host.install_package("facter-#{facter_ver}")
|
658
689
|
host.install_package("hiera-#{hiera_ver}")
|
659
690
|
|
660
|
-
|
691
|
+
configure_type_defaults_on( host )
|
661
692
|
end
|
662
693
|
end
|
663
694
|
end
|
@@ -679,7 +710,7 @@ module Beaker
|
|
679
710
|
opts[:puppet_collection] = opts[:puppet_collection].upcase #needs to be upcase, more lovely consistency
|
680
711
|
block_on hosts do |host|
|
681
712
|
|
682
|
-
host
|
713
|
+
add_role(host, 'aio') #we are installing agent, so we want aio role
|
683
714
|
|
684
715
|
variant, version, arch, codename = host['platform'].to_array
|
685
716
|
agent_version = opts[:puppet_agent_version] || 'latest'
|
@@ -694,7 +725,7 @@ module Beaker
|
|
694
725
|
|
695
726
|
host.install_package(pkg_name)
|
696
727
|
|
697
|
-
|
728
|
+
configure_type_defaults_on( host )
|
698
729
|
end
|
699
730
|
end
|
700
731
|
|
@@ -714,7 +745,7 @@ module Beaker
|
|
714
745
|
block_on hosts do |host|
|
715
746
|
host.install_package('puppet')
|
716
747
|
|
717
|
-
|
748
|
+
configure_type_defaults_on(host)
|
718
749
|
end
|
719
750
|
end
|
720
751
|
|
@@ -808,7 +839,7 @@ module Beaker
|
|
808
839
|
host.mkdir_p host.puppet[key] if host.puppet.has_key?(key)
|
809
840
|
end
|
810
841
|
|
811
|
-
|
842
|
+
configure_type_defaults_on( host )
|
812
843
|
end
|
813
844
|
end
|
814
845
|
alias_method :install_puppet_from_gem, :install_puppet_from_gem_on
|
@@ -847,7 +878,7 @@ module Beaker
|
|
847
878
|
else
|
848
879
|
raise "No repository installation step for #{variant} yet..."
|
849
880
|
end
|
850
|
-
|
881
|
+
configure_type_defaults_on( host )
|
851
882
|
end
|
852
883
|
end
|
853
884
|
alias_method :install_puppetlabs_release_repo, :install_puppetlabs_release_repo_on
|
@@ -988,7 +1019,7 @@ module Beaker
|
|
988
1019
|
|
989
1020
|
on host, find_and_sed
|
990
1021
|
on host, "apt-get update"
|
991
|
-
|
1022
|
+
configure_type_defaults_on( host )
|
992
1023
|
|
993
1024
|
else
|
994
1025
|
raise "No repository installation step for #{variant} yet..."
|
@@ -1017,7 +1048,7 @@ module Beaker
|
|
1017
1048
|
end
|
1018
1049
|
find_command = "find /root/#{package_name} -type f -name '#{find_filename}' -exec #{find_command} {} \\;"
|
1019
1050
|
on host, find_command
|
1020
|
-
|
1051
|
+
configure_type_defaults_on( host )
|
1021
1052
|
end
|
1022
1053
|
|
1023
1054
|
# Install development repo of the puppet-agent on the given host(s). Downloaded from
|
@@ -1064,7 +1095,7 @@ module Beaker
|
|
1064
1095
|
opts[:copy_base_local] ||= File.join('tmp', 'repo_configs')
|
1065
1096
|
opts[:copy_dir_external] ||= File.join('/', 'root')
|
1066
1097
|
opts[:puppet_collection] ||= 'PC1'
|
1067
|
-
host
|
1098
|
+
add_role(host, 'aio') #we are installing agent, so we want aio role
|
1068
1099
|
release_path = opts[:download_url]
|
1069
1100
|
variant, version, arch, codename = host['platform'].to_array
|
1070
1101
|
copy_dir_local = File.join(opts[:copy_base_local], variant)
|
@@ -1113,11 +1144,12 @@ module Beaker
|
|
1113
1144
|
when /^windows$/
|
1114
1145
|
result = on host, "echo #{onhost_copied_file}"
|
1115
1146
|
onhost_copied_file = result.raw_output.chomp
|
1116
|
-
|
1147
|
+
opts = { :debug => host[:pe_debug] || opts[:pe_debug] }
|
1148
|
+
install_msi_on(host, onhost_copied_file, {}, opts)
|
1117
1149
|
when /^osx$/
|
1118
1150
|
host.install_package("#{mac_pkg_name}*")
|
1119
1151
|
end
|
1120
|
-
|
1152
|
+
configure_type_defaults_on( host )
|
1121
1153
|
end
|
1122
1154
|
end
|
1123
1155
|
alias_method :install_puppetagent_dev_repo, :install_puppet_agent_dev_repo_on
|
@@ -1156,7 +1188,7 @@ module Beaker
|
|
1156
1188
|
opts[:copy_base_local] ||= File.join('tmp', 'repo_configs')
|
1157
1189
|
opts[:copy_dir_external] ||= File.join('/', 'root')
|
1158
1190
|
opts[:puppet_collection] ||= 'PC1'
|
1159
|
-
host
|
1191
|
+
add_role(host, 'aio') #we are installing agent, so we want aio role
|
1160
1192
|
release_path = opts[:download_url]
|
1161
1193
|
variant, version, arch, codename = host['platform'].to_array
|
1162
1194
|
copy_dir_local = File.join(opts[:copy_base_local], variant)
|
@@ -1171,6 +1203,7 @@ module Beaker
|
|
1171
1203
|
if arch == 'x86_64'
|
1172
1204
|
arch = 'amd64'
|
1173
1205
|
end
|
1206
|
+
version = version[0,2] + '.' + version[2,2] if variant =~ /ubuntu/ && version =~ /\.{0}/
|
1174
1207
|
release_file = "/repos/apt/#{codename}/pool/#{opts[:puppet_collection]}/p/puppet-agent/puppet-agent*#{arch}.deb"
|
1175
1208
|
download_file = "puppet-agent-#{variant}-#{version}-#{arch}.tar.gz"
|
1176
1209
|
when /^windows$/
|
@@ -1198,6 +1231,9 @@ module Beaker
|
|
1198
1231
|
scp_to host, File.join(copy_dir_local, download_file), onhost_copy_base
|
1199
1232
|
|
1200
1233
|
case variant
|
1234
|
+
when /^(fedora-22)$/
|
1235
|
+
on host, "tar -zxvf #{onhost_copied_download} -C #{onhost_copy_base}"
|
1236
|
+
on host, "dnf --nogpgcheck localinstall -y #{onhost_copied_file}"
|
1201
1237
|
when /^(fedora|el|centos)$/
|
1202
1238
|
on host, "tar -zxvf #{onhost_copied_download} -C #{onhost_copy_base}"
|
1203
1239
|
on host, "yum --nogpgcheck localinstall -y #{onhost_copied_file}"
|
@@ -1211,19 +1247,20 @@ module Beaker
|
|
1211
1247
|
when /^windows$/
|
1212
1248
|
result = on host, "echo #{onhost_copied_file}"
|
1213
1249
|
onhost_copied_file = result.raw_output.chomp
|
1214
|
-
|
1250
|
+
opts = { :debug => host[:pe_debug] || opts[:pe_debug] }
|
1251
|
+
install_msi_on(host, onhost_copied_file, {}, opts)
|
1215
1252
|
when /^osx$/
|
1216
1253
|
on host, "tar -zxvf #{onhost_copied_download} -C #{onhost_copy_base}"
|
1217
1254
|
# move to better location
|
1218
1255
|
on host, "mv #{onhost_copied_file}.dmg ."
|
1219
1256
|
host.install_package("puppet-agent-*")
|
1220
1257
|
end
|
1221
|
-
|
1258
|
+
configure_type_defaults_on( host )
|
1222
1259
|
end
|
1223
1260
|
end
|
1224
1261
|
|
1225
1262
|
|
1226
|
-
# This method will install a pem file
|
1263
|
+
# This method will install a pem file certificate on a windows host
|
1227
1264
|
#
|
1228
1265
|
# @param [Host] host A host object
|
1229
1266
|
# @param [String] cert_name The name of the pem file
|