beaker 1.21.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/CONTRIBUTING.md +1 -0
- data/HISTORY.md +17288 -2
- data/Rakefile +6 -2
- data/beaker.gemspec +15 -19
- data/lib/beaker.rb +2 -5
- data/lib/beaker/answers.rb +2 -0
- data/lib/beaker/answers/version34.rb +37 -1
- data/lib/beaker/cli.rb +4 -0
- data/lib/beaker/command.rb +16 -84
- data/lib/beaker/command_factory.rb +13 -2
- data/lib/beaker/dsl/assertions.rb +25 -2
- data/lib/beaker/dsl/ezbake_utils.rb +2 -2
- data/lib/beaker/dsl/helpers.rb +66 -12
- data/lib/beaker/dsl/install_utils.rb +128 -66
- data/lib/beaker/dsl/wrappers.rb +41 -3
- data/lib/beaker/host.rb +42 -6
- data/lib/beaker/host/mac.rb +62 -0
- data/lib/beaker/host/mac/group.rb +96 -0
- data/lib/beaker/host/mac/user.rb +93 -0
- data/lib/beaker/host/unix/exec.rb +1 -1
- data/lib/beaker/host/unix/pkg.rb +11 -11
- data/lib/beaker/host/windows.rb +4 -4
- data/lib/beaker/host_prebuilt_steps.rb +194 -58
- data/lib/beaker/hypervisor.rb +16 -9
- data/lib/beaker/hypervisor/aws_sdk.rb +61 -17
- data/lib/beaker/hypervisor/docker.rb +14 -2
- data/lib/beaker/hypervisor/ec2_helper.rb +15 -3
- data/lib/beaker/hypervisor/vagrant.rb +22 -10
- data/lib/beaker/hypervisor/vagrant_libvirt.rb +11 -0
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +1 -1
- data/lib/beaker/hypervisor/vcloud_pooled.rb +8 -39
- data/lib/beaker/logger.rb +15 -9
- data/lib/beaker/network_manager.rb +2 -2
- data/lib/beaker/options/command_line_parser.rb +1 -1
- data/lib/beaker/options/parser.rb +1 -8
- data/lib/beaker/options/presets.rb +70 -45
- data/lib/beaker/perf.rb +3 -4
- data/lib/beaker/platform.rb +2 -1
- data/lib/beaker/result.rb +3 -9
- data/lib/beaker/ssh_connection.rb +2 -0
- data/lib/beaker/test_case.rb +2 -21
- data/lib/beaker/test_suite.rb +21 -25
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +36 -0
- data/spec/beaker/cli_spec.rb +45 -45
- data/spec/beaker/command_spec.rb +25 -36
- data/spec/beaker/dsl/assertions_spec.rb +20 -27
- data/spec/beaker/dsl/ezbake_utils_spec.rb +5 -5
- data/spec/beaker/dsl/helpers_spec.rb +293 -208
- data/spec/beaker/dsl/install_utils_spec.rb +310 -189
- data/spec/beaker/dsl/outcomes_spec.rb +6 -6
- data/spec/beaker/dsl/roles_spec.rb +27 -18
- data/spec/beaker/dsl/structure_spec.rb +11 -11
- data/spec/beaker/dsl/wrappers_spec.rb +35 -11
- data/spec/beaker/host/mac/group_spec.rb +124 -0
- data/spec/beaker/host/mac/user_spec.rb +134 -0
- data/spec/beaker/host/unix/pkg_spec.rb +40 -24
- data/spec/beaker/host/windows/group_spec.rb +1 -1
- data/spec/beaker/host_prebuilt_steps_spec.rb +194 -68
- data/spec/beaker/host_spec.rb +145 -67
- data/spec/beaker/hypervisor/aixer_spec.rb +6 -6
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +22 -7
- data/spec/beaker/hypervisor/docker_spec.rb +71 -50
- data/spec/beaker/hypervisor/ec2_helper_spec.rb +25 -4
- data/spec/beaker/hypervisor/fusion_spec.rb +2 -2
- data/spec/beaker/hypervisor/hypervisor_spec.rb +20 -27
- data/spec/beaker/hypervisor/hypervisor_spec.rb.orig +80 -0
- data/spec/beaker/hypervisor/solaris_spec.rb +8 -8
- data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +6 -8
- data/spec/beaker/hypervisor/vagrant_libvirt_spec.rb +34 -0
- data/spec/beaker/hypervisor/vagrant_spec.rb +34 -33
- data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +18 -8
- data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +6 -8
- data/spec/beaker/hypervisor/vcloud_pooled_spec.rb +8 -8
- data/spec/beaker/hypervisor/vcloud_spec.rb +10 -10
- data/spec/beaker/hypervisor/vsphere_helper_spec.rb +8 -8
- data/spec/beaker/hypervisor/vsphere_spec.rb +1 -1
- data/spec/beaker/logger_spec.rb +45 -31
- data/spec/beaker/options/command_line_parser_spec.rb +10 -2
- data/spec/beaker/options/hosts_file_parser_spec.rb +9 -2
- data/spec/beaker/options/options_hash_spec.rb +2 -2
- data/spec/beaker/options/parser_spec.rb +2 -2
- data/spec/beaker/options/pe_version_scaper_spec.rb +6 -1
- data/spec/beaker/options/presets_spec.rb +11 -1
- data/spec/beaker/shared/error_handler_spec.rb +5 -5
- data/spec/beaker/shared/host_manager_spec.rb +3 -2
- data/spec/beaker/shared/repetition_spec.rb +18 -18
- data/spec/beaker/ssh_connection_spec.rb +33 -4
- data/spec/beaker/test_case_spec.rb +9 -9
- data/spec/beaker/test_suite_spec.rb +14 -14
- data/spec/helpers.rb +4 -4
- data/spec/matchers.rb +4 -4
- data/spec/mocks.rb +5 -1
- data/spec/spec_helper.rb +2 -8
- metadata +114 -80
- data/lib/beaker/hypervisor/blimper.rb +0 -108
- data/spec/beaker/hypervisor/blimper_spec.rb +0 -42
- data/spec/beaker/options/data/LATEST +0 -1
- data/spec/beaker/puppet_command_spec.rb +0 -161
- data/spec/mock_blimpy.rb +0 -48
@@ -8,7 +8,7 @@ module Beaker
|
|
8
8
|
@hosts = hosts
|
9
9
|
|
10
10
|
# increase the http timeouts as provisioning images can be slow
|
11
|
-
::Docker.options = { :write_timeout => 300, :read_timeout => 300 }
|
11
|
+
::Docker.options = { :write_timeout => 300, :read_timeout => 300 }.merge(::Docker.options || {})
|
12
12
|
# assert that the docker-api gem can talk to your docker
|
13
13
|
# enpoint. Will raise if there is a version mismatch
|
14
14
|
::Docker.validate_version!
|
@@ -111,11 +111,18 @@ module Beaker
|
|
111
111
|
# add platform-specific actions
|
112
112
|
case host['platform']
|
113
113
|
when /ubuntu/, /debian/
|
114
|
+
sshd_options = '-o "PermitRootLogin yes" -o "PasswordAuthentication yes"'
|
114
115
|
dockerfile += <<-EOF
|
115
116
|
RUN apt-get update
|
116
117
|
RUN apt-get install -y openssh-server openssh-client #{Beaker::HostPrebuiltSteps::DEBIAN_PACKAGES.join(' ')}
|
117
118
|
EOF
|
118
|
-
|
119
|
+
when /cumulus/
|
120
|
+
sshd_options = '-o "PermitRootLogin yes" -o "PasswordAuthentication yes"'
|
121
|
+
dockerfile += <<-EOF
|
122
|
+
RUN apt-get update
|
123
|
+
RUN apt-get install -y openssh-server openssh-client #{Beaker::HostPrebuiltSteps::CUMULUS_PACKAGES.join(' ')}
|
124
|
+
EOF
|
125
|
+
when /^el-/, /centos/, /fedora/, /redhat/, /eos/
|
119
126
|
dockerfile += <<-EOF
|
120
127
|
RUN yum clean all
|
121
128
|
RUN yum install -y sudo openssh-server openssh-clients #{Beaker::HostPrebuiltSteps::UNIX_PACKAGES.join(' ')}
|
@@ -145,6 +152,11 @@ module Beaker
|
|
145
152
|
"RUN #{command}\n"
|
146
153
|
}.join('')
|
147
154
|
|
155
|
+
# Override image entrypoint
|
156
|
+
if host['docker_image_entrypoint']
|
157
|
+
dockerfile += "ENTRYPOINT #{host['docker_image_entrypoint']}\n"
|
158
|
+
end
|
159
|
+
|
148
160
|
# How to start a sshd on port 22. May be an init for more supervision
|
149
161
|
cmd = host['docker_cmd'] || "/usr/sbin/sshd -D #{sshd_options}"
|
150
162
|
dockerfile += <<-EOF
|
@@ -3,13 +3,16 @@ module Beaker
|
|
3
3
|
# Return a list of open ports for testing based on a hosts role
|
4
4
|
#
|
5
5
|
# @todo horribly hard-coded
|
6
|
-
# @param [
|
6
|
+
# @param [Host] host to find ports for
|
7
7
|
# @return [Array<Number>] array of port numbers
|
8
8
|
# @api private
|
9
|
-
def self.amiports(
|
9
|
+
def self.amiports(host)
|
10
10
|
ports = [22, 61613, 8139]
|
11
11
|
|
12
|
+
roles = host['roles']
|
13
|
+
|
12
14
|
if roles.include? 'database'
|
15
|
+
ports << 5432
|
13
16
|
ports << 8080
|
14
17
|
ports << 8081
|
15
18
|
end
|
@@ -20,10 +23,19 @@ module Beaker
|
|
20
23
|
|
21
24
|
if roles.include? 'dashboard'
|
22
25
|
ports << 443
|
26
|
+
ports << 4433
|
23
27
|
ports << 4435
|
24
28
|
end
|
25
29
|
|
26
|
-
|
30
|
+
# If they only specified one port in the host config file, YAML will have converted it
|
31
|
+
# into a string, but if it was more than one, an array.
|
32
|
+
user_ports = []
|
33
|
+
if host.has_key?('additional_ports')
|
34
|
+
user_ports = host['additional_ports'].is_a?(Array) ? host['additional_ports'] : [host['additional_ports']]
|
35
|
+
end
|
36
|
+
|
37
|
+
additional_ports = ports + user_ports
|
38
|
+
additional_ports.uniq
|
27
39
|
end
|
28
40
|
end
|
29
41
|
end
|
@@ -58,14 +58,17 @@ module Beaker
|
|
58
58
|
def set_ssh_config host, user
|
59
59
|
f = Tempfile.new("#{host.name}")
|
60
60
|
ssh_config = Dir.chdir(@vagrant_path) do
|
61
|
-
|
62
|
-
if
|
63
|
-
raise "Failed to vagrant ssh-config for #{host.name}"
|
61
|
+
stdin, stdout, stderr, wait_thr = Open3.popen3('vagrant', 'ssh-config', host.name)
|
62
|
+
if not wait_thr.value.success?
|
63
|
+
raise "Failed to 'vagrant ssh-config' for #{host.name}"
|
64
64
|
end
|
65
|
-
|
65
|
+
stdout.read
|
66
66
|
end
|
67
67
|
#replace hostname with ip
|
68
68
|
ssh_config = ssh_config.gsub(/#{host.name}/, host['ip']) unless not host['ip']
|
69
|
+
if host['platform'] =~ /windows/
|
70
|
+
ssh_config = ssh_config.gsub(/127\.0\.0\.1/, host['ip']) unless not host['ip']
|
71
|
+
end
|
69
72
|
#set the user
|
70
73
|
ssh_config = ssh_config.gsub(/User vagrant/, "User #{user}")
|
71
74
|
f.write(ssh_config)
|
@@ -128,7 +131,10 @@ module Beaker
|
|
128
131
|
|
129
132
|
set_ssh_config host, 'vagrant'
|
130
133
|
|
134
|
+
#copy vagrant's keys to roots home dir, to allow for login as root
|
131
135
|
copy_ssh_to_root host, @options
|
136
|
+
#ensure that root login is enabled for this host
|
137
|
+
enable_root_login host, @options
|
132
138
|
#shut down connection, will reconnect on next exec
|
133
139
|
host.close
|
134
140
|
|
@@ -151,12 +157,18 @@ module Beaker
|
|
151
157
|
|
152
158
|
def vagrant_cmd(args)
|
153
159
|
Dir.chdir(@vagrant_path) do
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
+
exit_status = 1
|
161
|
+
Open3.popen3("vagrant #{args}") {|stdin, stdout, stderr, wait_thr|
|
162
|
+
while line = stdout.gets
|
163
|
+
@logger.info(line)
|
164
|
+
end
|
165
|
+
if not wait_thr.value.success?
|
166
|
+
raise "Failed to exec 'vagrant #{args}'"
|
167
|
+
end
|
168
|
+
exit_status = wait_thr.value
|
169
|
+
}
|
170
|
+
if exit_status != 0
|
171
|
+
raise "Failed to execute vagrant_cmd ( #{args} )"
|
160
172
|
end
|
161
173
|
end
|
162
174
|
end
|
@@ -9,6 +9,7 @@ class Beaker::VagrantVirtualbox < Beaker::Vagrant
|
|
9
9
|
provider_section = ""
|
10
10
|
provider_section << " v.vm.provider :virtualbox do |vb|\n"
|
11
11
|
provider_section << " vb.customize ['modifyvm', :id, '--memory', '#{options['vagrant_memsize'] ||= '1024'}']\n"
|
12
|
+
provider_section << " vb.vbguest.auto_update = false" if options[:vbguest_plugin] == 'disable'
|
12
13
|
if host['disk_path']
|
13
14
|
unless File.exist?(host['disk_path'])
|
14
15
|
host['disk_path'] = File.join(host['disk_path'], "#{host.name}.vmdk")
|
@@ -17,7 +18,6 @@ class Beaker::VagrantVirtualbox < Beaker::Vagrant
|
|
17
18
|
provider_section << " vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium','#{host['disk_path']}']\n"
|
18
19
|
provider_section << " vb.customize [\"modifyvm\", :id, \"--natdnshostresolver1\", \"#{host['natdns']}\"]\n" unless host['natdns'].nil?
|
19
20
|
provider_section << " vb.customize [\"modifyvm\", :id, \"--natdnsproxy1\", \"#{host['natdns']}\"]\n" unless host['natdns'].nil?
|
20
|
-
provider_section << " end\n"
|
21
21
|
end
|
22
22
|
provider_section << " end\n"
|
23
23
|
|
@@ -19,37 +19,12 @@ module Beaker
|
|
19
19
|
@options = options
|
20
20
|
@logger = options[:logger]
|
21
21
|
@hosts = vcloud_hosts
|
22
|
-
@credentials = load_credentials(@options[:dot_fog])
|
23
22
|
|
24
23
|
raise 'You must specify a datastore for vCloud instances!' unless @options['datastore']
|
25
24
|
raise 'You must specify a resource pool for vCloud instances!' unless @options['resourcepool']
|
26
25
|
raise 'You must specify a folder for vCloud instances!' unless @options['folder']
|
27
26
|
end
|
28
27
|
|
29
|
-
def load_credentials(dot_fog = '.fog')
|
30
|
-
creds = {}
|
31
|
-
|
32
|
-
if fog = read_fog_file(dot_fog)
|
33
|
-
if fog[:default] && fog[:default][:vmpooler_token]
|
34
|
-
creds[:vmpooler_token] = fog[:default][:vmpooler_token]
|
35
|
-
else
|
36
|
-
@logger.warn "Credentials file (#{dot_fog}) is missing a :default section with a :vmpooler_token value; proceeding without authentication"
|
37
|
-
end
|
38
|
-
else
|
39
|
-
@logger.warn "Credentials file (#{dot_fog}) is empty; proceeding without authentication"
|
40
|
-
end
|
41
|
-
|
42
|
-
creds
|
43
|
-
|
44
|
-
rescue Errno::ENOENT
|
45
|
-
@logger.warn "Credentials file (#{dot_fog}) not found; proceeding without authentication"
|
46
|
-
creds
|
47
|
-
end
|
48
|
-
|
49
|
-
def read_fog_file(dot_fog = '.fog')
|
50
|
-
YAML.load_file(dot_fog)
|
51
|
-
end
|
52
|
-
|
53
28
|
def check_url url
|
54
29
|
begin
|
55
30
|
URI.parse(url)
|
@@ -77,7 +52,6 @@ module Beaker
|
|
77
52
|
|
78
53
|
def provision
|
79
54
|
start = Time.now
|
80
|
-
try = 1
|
81
55
|
@hosts.each_with_index do |h, i|
|
82
56
|
if not h['template']
|
83
57
|
raise ArgumentError, "You must specify a template name for #{h}"
|
@@ -89,22 +63,19 @@ module Beaker
|
|
89
63
|
|
90
64
|
@logger.notify "Requesting '#{h['template']}' VM from vCloud host pool"
|
91
65
|
|
66
|
+
last_wait, wait = 0, 1
|
67
|
+
waited = 0 #the amount of time we've spent waiting for this host to provision
|
92
68
|
begin
|
93
69
|
uri = URI.parse(get_template_url(@options['pooling_api'], h['template']))
|
94
70
|
|
95
71
|
http = Net::HTTP.new( uri.host, uri.port )
|
96
72
|
request = Net::HTTP::Post.new(uri.request_uri)
|
97
73
|
|
98
|
-
if @credentials[:vmpooler_token]
|
99
|
-
request['X-AUTH-TOKEN'] = @credentials[:vmpooler_token]
|
100
|
-
end
|
101
|
-
|
102
74
|
request.set_form_data({'pool' => @options['resourcepool'], 'folder' => 'foo'})
|
103
75
|
|
104
|
-
attempts = @options[:timeout].to_i / 5
|
105
76
|
response = http.request(request)
|
106
77
|
parsed_response = JSON.parse(response.body)
|
107
|
-
if parsed_response[h['template']] && parsed_response['ok'] && parsed_response[h['template']]['hostname']
|
78
|
+
if parsed_response[h['template']] && parsed_response[h['template']]['ok'] && parsed_response[h['template']]['hostname']
|
108
79
|
hostname = parsed_response[h['template']]['hostname']
|
109
80
|
domain = parsed_response['domain']
|
110
81
|
h['vmhostname'] = domain ? "#{hostname}.#{domain}" : hostname
|
@@ -112,9 +83,11 @@ module Beaker
|
|
112
83
|
raise "VcloudPooled.provision - no vCloud host free for #{h.name} in pool"
|
113
84
|
end
|
114
85
|
rescue JSON::ParserError, RuntimeError, *SSH_EXCEPTIONS => e
|
115
|
-
if
|
116
|
-
|
117
|
-
|
86
|
+
if waited <= @options[:timeout].to_i
|
87
|
+
@logger.debug("Retrying provision for vCloud host #{h.name} after waiting #{wait} second(s) (failed with #{e.class})")
|
88
|
+
sleep wait
|
89
|
+
waited += wait
|
90
|
+
last_wait, wait = wait, last_wait + wait
|
118
91
|
retry
|
119
92
|
end
|
120
93
|
report_and_raise(@logger, e, 'vCloudPooled.provision')
|
@@ -141,10 +114,6 @@ module Beaker
|
|
141
114
|
http = Net::HTTP.new( uri.host, uri.port )
|
142
115
|
request = Net::HTTP::Delete.new(uri.request_uri)
|
143
116
|
|
144
|
-
if @credentials[:vmpooler_token]
|
145
|
-
request['X-AUTH-TOKEN'] = @credentials[:vmpooler_token]
|
146
|
-
end
|
147
|
-
|
148
117
|
begin
|
149
118
|
response = http.request(request)
|
150
119
|
rescue *SSH_EXCEPTIONS => e
|
data/lib/beaker/logger.rb
CHANGED
@@ -169,15 +169,9 @@ module Beaker
|
|
169
169
|
convert s
|
170
170
|
end
|
171
171
|
else
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
string.force_encoding('UTF-8')
|
176
|
-
return string.chars.select{|i| i.valid_encoding?}.join
|
177
|
-
else
|
178
|
-
# We're running 1.8, do nothing
|
179
|
-
string
|
180
|
-
end
|
172
|
+
# Remove invalid and undefined UTF-8 character encodings
|
173
|
+
string.force_encoding('UTF-8')
|
174
|
+
return string.chars.select{|i| i.valid_encoding?}.join
|
181
175
|
end
|
182
176
|
end
|
183
177
|
|
@@ -306,6 +300,18 @@ module Beaker
|
|
306
300
|
@sublog.read
|
307
301
|
end
|
308
302
|
|
303
|
+
# Utility method to centralize dated log folder generation
|
304
|
+
#
|
305
|
+
# @param [String] base_dir path of the directory for the dated log folder to live in
|
306
|
+
# @param [Time] timestamp the timestamp that should be used to generate the dated log folder
|
307
|
+
#
|
308
|
+
# @return [String] the path of the dated log folder generated
|
309
|
+
def Logger.generate_dated_log_folder(base_dir, timestamp)
|
310
|
+
log_dir = File.join(base_dir, timestamp.strftime("%F_%H_%M_%S"))
|
311
|
+
FileUtils.mkdir_p(log_dir) unless File.directory?(log_dir)
|
312
|
+
log_dir
|
313
|
+
end
|
314
|
+
|
309
315
|
private
|
310
316
|
# Expand each symlink found to its full path
|
311
317
|
# Lines are assumed to be in the format "String : Integer"
|
@@ -75,10 +75,10 @@ module Beaker
|
|
75
75
|
|
76
76
|
# configure proxy on all provioned machines
|
77
77
|
#@raise [Exception] Raise an exception if virtual machines fail to be configured
|
78
|
-
def
|
78
|
+
def proxy_package_manager
|
79
79
|
if @hypervisors
|
80
80
|
@hypervisors.each_key do |type|
|
81
|
-
@hypervisors[type].
|
81
|
+
@hypervisors[type].proxy_package_manager
|
82
82
|
end
|
83
83
|
end
|
84
84
|
end
|
@@ -155,7 +155,7 @@ module Beaker
|
|
155
155
|
end
|
156
156
|
|
157
157
|
opts.on '--repo-proxy',
|
158
|
-
'Proxy packaging repositories on ubuntu, debian and solaris-11',
|
158
|
+
'Proxy packaging repositories on ubuntu, debian, cumulus and solaris-11',
|
159
159
|
'(default: false)' do
|
160
160
|
@cmd_options[:repo_proxy] = true
|
161
161
|
end
|
@@ -11,7 +11,7 @@ module Beaker
|
|
11
11
|
#These options expand out into an array of .rb files
|
12
12
|
RB_FILE_OPTS = [:tests, :pre_suite, :post_suite]
|
13
13
|
|
14
|
-
PARSE_ERROR =
|
14
|
+
PARSE_ERROR = Psych::SyntaxError
|
15
15
|
|
16
16
|
#The OptionsHash of all parsed options
|
17
17
|
attr_accessor :options
|
@@ -240,7 +240,6 @@ module Beaker
|
|
240
240
|
# - --fail-mode is one of 'fast', 'stop' or nil
|
241
241
|
# - if using blimpy hypervisor an EC2 YAML file exists
|
242
242
|
# - if using the aix, solaris, or vcloud hypervisors a .fog file exists
|
243
|
-
# - if using docker hypervisor are using RUBY 1.9+
|
244
243
|
# - that one and only one master is defined per set of hosts
|
245
244
|
# - that solaris/windows/aix hosts are agent only for PE tests OR
|
246
245
|
# - that windows/aix host are agent only if type is not 'pe'
|
@@ -307,12 +306,6 @@ module Beaker
|
|
307
306
|
check_yaml_file(@options[:dot_fog], "required by #{visor}")
|
308
307
|
end
|
309
308
|
end
|
310
|
-
#if using docker need ruby 1.9+
|
311
|
-
if hypervisors.include?('docker')
|
312
|
-
if RUBY_VERSION < '1.9'
|
313
|
-
parser_error "Cannot use the 'docker' hypervisor on Ruby < 1.9 (using #{RUBY_VERSION})"
|
314
|
-
end
|
315
|
-
end
|
316
309
|
|
317
310
|
#check that roles of hosts make sense
|
318
311
|
# - must be one and only one master
|
@@ -26,6 +26,7 @@ module Beaker
|
|
26
26
|
:release_apt_repo_url => ['BEAKER_RELEASE_APT_REPO', 'RELEASE_APT_REPO'],
|
27
27
|
:release_yum_repo_url => ['BEAKER_RELEASE_YUM_REPO', 'RELEASE_YUM_REPO'],
|
28
28
|
:dev_builds_url => ['BEAKER_DEV_BUILDS_URL', 'DEV_BUILDS_URL'],
|
29
|
+
:vbguest_plugin => ['BEAKER_VB_GUEST_PLUGIN', 'BEAKER_vb_guest_plugin'],
|
29
30
|
}
|
30
31
|
|
31
32
|
# Select all environment variables whose name matches provided regex
|
@@ -64,7 +65,19 @@ module Beaker
|
|
64
65
|
# @return [Hash] Environment config values formatted appropriately
|
65
66
|
def format_found_env_vars( found_env_vars )
|
66
67
|
found_env_vars[:consoleport] &&= found_env_vars[:consoleport].to_i
|
67
|
-
|
68
|
+
|
69
|
+
if found_env_vars[:is_pe]
|
70
|
+
is_pe_val = found_env_vars[:is_pe]
|
71
|
+
type = case is_pe_val
|
72
|
+
when /yes|true/ then 'pe'
|
73
|
+
when /no|false/ then 'foss'
|
74
|
+
else
|
75
|
+
raise "Invalid value for one of #{ENVIRONMENT_SPEC[:is_pe].join(' ,')}: #{is_pe_val}"
|
76
|
+
end
|
77
|
+
|
78
|
+
found_env_vars[:type] = type
|
79
|
+
end
|
80
|
+
|
68
81
|
found_env_vars[:pe_version_file_win] = found_env_vars[:pe_version_file]
|
69
82
|
found_env_vars
|
70
83
|
end
|
@@ -96,45 +109,48 @@ module Beaker
|
|
96
109
|
def presets
|
97
110
|
h = Beaker::Options::OptionsHash.new
|
98
111
|
h.merge({
|
99
|
-
:project
|
100
|
-
:department
|
101
|
-
:validate
|
102
|
-
:jenkins_build_url
|
103
|
-
:log_level
|
104
|
-
:trace_limit
|
105
|
-
:"master-start-curl-retries"
|
106
|
-
:options_file
|
107
|
-
:type
|
108
|
-
:provision
|
109
|
-
:preserve_hosts
|
110
|
-
:root_keys
|
111
|
-
:quiet
|
112
|
-
:project_root
|
113
|
-
:xml_dir
|
114
|
-
:xml_file
|
115
|
-
:xml_stylesheet
|
116
|
-
:log_dir
|
117
|
-
:color
|
118
|
-
:dry_run
|
119
|
-
:timeout
|
120
|
-
:fail_mode
|
121
|
-
:
|
122
|
-
:
|
123
|
-
:
|
124
|
-
:
|
125
|
-
:
|
126
|
-
:
|
127
|
-
:
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
135
|
-
:
|
136
|
-
:
|
137
|
-
:
|
112
|
+
:project => 'Beaker',
|
113
|
+
:department => ENV['USER'] || ENV['USERNAME'] || 'unknown',
|
114
|
+
:validate => true,
|
115
|
+
:jenkins_build_url => nil,
|
116
|
+
:log_level => 'info',
|
117
|
+
:trace_limit => 10,
|
118
|
+
:"master-start-curl-retries" => 120,
|
119
|
+
:options_file => nil,
|
120
|
+
:type => 'pe',
|
121
|
+
:provision => true,
|
122
|
+
:preserve_hosts => 'never',
|
123
|
+
:root_keys => false,
|
124
|
+
:quiet => false,
|
125
|
+
:project_root => File.expand_path(File.join(File.dirname(__FILE__), "../")),
|
126
|
+
:xml_dir => 'junit',
|
127
|
+
:xml_file => 'beaker_junit.xml',
|
128
|
+
:xml_stylesheet => 'junit.xsl',
|
129
|
+
:log_dir => 'log',
|
130
|
+
:color => true,
|
131
|
+
:dry_run => false,
|
132
|
+
:timeout => 300,
|
133
|
+
:fail_mode => 'slow',
|
134
|
+
:accept_all_exit_codes => false,
|
135
|
+
:timesync => false,
|
136
|
+
:disable_iptables => false,
|
137
|
+
:repo_proxy => false,
|
138
|
+
:package_proxy => false,
|
139
|
+
:add_el_extras => false,
|
140
|
+
:release_apt_repo_url => "http://apt.puppetlabs.com",
|
141
|
+
:release_yum_repo_url => "http://yum.puppetlabs.com",
|
142
|
+
:dev_builds_url => "http://builds.delivery.puppetlabs.net",
|
143
|
+
:epel_url => "http://mirrors.kernel.org/fedora-epel",
|
144
|
+
:epel_arch => "i386",
|
145
|
+
:epel_6_pkg => "epel-release-6-8.noarch.rpm",
|
146
|
+
:epel_5_pkg => "epel-release-5-4.noarch.rpm",
|
147
|
+
:consoleport => 443,
|
148
|
+
:pe_dir => '/opt/enterprise/dists',
|
149
|
+
:pe_version_file => 'LATEST',
|
150
|
+
:pe_version_file_win => 'LATEST-win',
|
151
|
+
:host_env => {},
|
152
|
+
:ssh_env_file => '~/.ssh/environment',
|
153
|
+
:answers => {
|
138
154
|
:q_puppet_enterpriseconsole_auth_user_email => 'admin@example.com',
|
139
155
|
:q_puppet_enterpriseconsole_auth_password => '~!@#$%^*-/ aZ',
|
140
156
|
:q_puppet_enterpriseconsole_smtp_port => 25,
|
@@ -153,12 +169,21 @@ module Beaker
|
|
153
169
|
:q_puppetdb_database_user => 'mYpdBu3r',
|
154
170
|
:q_database_port => 5432,
|
155
171
|
:q_puppetdb_port => 8081,
|
172
|
+
:q_classifier_database_user => 'DFGhjlkj',
|
173
|
+
:q_database_name => 'pe-classifier',
|
174
|
+
:q_classifier_database_password => '~!@#$%^*-/ aZ',
|
175
|
+
:q_activity_database_user => 'adsfglkj',
|
176
|
+
:q_activity_database_name => 'pe-activity',
|
177
|
+
:q_activity_database_password => '~!@#$%^*-/ aZ',
|
178
|
+
:q_rbac_database_user => 'RbhNBklm',
|
179
|
+
:q_rbac_database_name => 'pe-rbac',
|
180
|
+
:q_rbac_database_password => '~!@#$%^*-/ aZ',
|
156
181
|
},
|
157
|
-
:dot_fog
|
158
|
-
:ec2_yaml
|
159
|
-
:help
|
160
|
-
:collect_perf_data
|
161
|
-
:ssh
|
182
|
+
:dot_fog => File.join(ENV['HOME'], '.fog'),
|
183
|
+
:ec2_yaml => 'config/image_templates/ec2.yaml',
|
184
|
+
:help => false,
|
185
|
+
:collect_perf_data => false,
|
186
|
+
:ssh => {
|
162
187
|
:config => false,
|
163
188
|
:paranoid => false,
|
164
189
|
:timeout => 300,
|