simp-beaker-helpers 1.18.8
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 +7 -0
- data/.fixtures.yml +8 -0
- data/.gitignore +8 -0
- data/.gitlab-ci.yml +163 -0
- data/.rspec +4 -0
- data/.rubocop.yml +546 -0
- data/.travis.yml +36 -0
- data/CHANGELOG.md +231 -0
- data/Gemfile +51 -0
- data/LICENSE +27 -0
- data/README.md +543 -0
- data/Rakefile +151 -0
- data/files/pki/clean.sh +1 -0
- data/files/pki/make.sh +101 -0
- data/files/pki/template_ca.cnf +259 -0
- data/files/pki/template_host.cnf +263 -0
- data/files/puppet-agent-versions.yaml +46 -0
- data/lib/simp/beaker_helpers.rb +1231 -0
- data/lib/simp/beaker_helpers/constants.rb +25 -0
- data/lib/simp/beaker_helpers/inspec.rb +328 -0
- data/lib/simp/beaker_helpers/snapshot.rb +156 -0
- data/lib/simp/beaker_helpers/ssg.rb +383 -0
- data/lib/simp/beaker_helpers/version.rb +5 -0
- data/lib/simp/beaker_helpers/windows.rb +16 -0
- data/lib/simp/rake/beaker.rb +269 -0
- data/simp-beaker-helpers.gemspec +38 -0
- data/spec/acceptance/nodesets/default.yml +32 -0
- data/spec/acceptance/suites/default/check_puppet_version_spec.rb +23 -0
- data/spec/acceptance/suites/default/enable_fips_spec.rb +23 -0
- data/spec/acceptance/suites/default/fixture_modules_spec.rb +22 -0
- data/spec/acceptance/suites/default/install_simp_deps_repo_spec.rb +43 -0
- data/spec/acceptance/suites/default/nodesets +1 -0
- data/spec/acceptance/suites/default/pki_tests_spec.rb +55 -0
- data/spec/acceptance/suites/default/set_hieradata_on_spec.rb +33 -0
- data/spec/acceptance/suites/default/write_hieradata_to_spec.rb +33 -0
- data/spec/acceptance/suites/fips_from_fixtures/00_default_spec.rb +63 -0
- data/spec/acceptance/suites/fips_from_fixtures/metadata.yml +2 -0
- data/spec/acceptance/suites/fips_from_fixtures/nodesets +1 -0
- data/spec/acceptance/suites/offline/00_default_spec.rb +165 -0
- data/spec/acceptance/suites/offline/README +2 -0
- data/spec/acceptance/suites/offline/nodesets/default.yml +26 -0
- data/spec/acceptance/suites/puppet_collections/00_default_spec.rb +25 -0
- data/spec/acceptance/suites/puppet_collections/metadata.yml +2 -0
- data/spec/acceptance/suites/puppet_collections/nodesets/default.yml +30 -0
- data/spec/acceptance/suites/snapshot/00_snapshot_test_spec.rb +82 -0
- data/spec/acceptance/suites/snapshot/10_general_usage_spec.rb +56 -0
- data/spec/acceptance/suites/snapshot/nodesets +1 -0
- data/spec/acceptance/suites/windows/00_default_spec.rb +119 -0
- data/spec/acceptance/suites/windows/metadata.yml +2 -0
- data/spec/acceptance/suites/windows/nodesets/default.yml +33 -0
- data/spec/acceptance/suites/windows/nodesets/win2016.yml +35 -0
- data/spec/acceptance/suites/windows/nodesets/win2019.yml +34 -0
- data/spec/lib/simp/beaker_helpers_spec.rb +216 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/spec_helper_acceptance.rb +25 -0
- metadata +243 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
3
|
+
require 'simp/beaker_helpers/version'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'simp-beaker-helpers'
|
8
|
+
s.date = Date.today.to_s
|
9
|
+
s.summary = 'beaker helper methods for SIMP'
|
10
|
+
s.description = <<-EOF
|
11
|
+
Beaker helper methods to help scaffold SIMP acceptance tests
|
12
|
+
EOF
|
13
|
+
s.version = Simp::BeakerHelpers::VERSION
|
14
|
+
s.license = 'Apache-2.0'
|
15
|
+
s.authors = ['Chris Tessmer','Trevor Vaughan']
|
16
|
+
s.email = 'simp@simp-project.org'
|
17
|
+
s.homepage = 'https://github.com/simp/rubygem-simp-beaker-helpers'
|
18
|
+
s.metadata = {
|
19
|
+
'issue_tracker' => 'https://simp-project.atlassian.net'
|
20
|
+
}
|
21
|
+
s.add_runtime_dependency 'beaker' , ['>= 4.17.0', '< 5.0.0']
|
22
|
+
s.add_runtime_dependency 'beaker-rspec' , '~> 6.2'
|
23
|
+
s.add_runtime_dependency 'beaker-puppet' , ['>= 1.18.14', '< 2.0.0']
|
24
|
+
s.add_runtime_dependency 'beaker-docker' , '~> 0.3'
|
25
|
+
s.add_runtime_dependency 'beaker-vagrant' , ['>= 0.6.4', '< 2.0.0']
|
26
|
+
s.add_runtime_dependency 'beaker-puppet_install_helper', '~> 0.9'
|
27
|
+
s.add_runtime_dependency 'highline' , '~> 2.0'
|
28
|
+
s.add_runtime_dependency 'nokogiri' , '~> 1.8'
|
29
|
+
|
30
|
+
# Because net-telnet dropped support for Ruby < 2.3.0
|
31
|
+
# TODO: Update this when we no longer support Ruby 2.1.9 (should be October 2018)
|
32
|
+
s.add_runtime_dependency 'net-telnet', '~> 0.1.1'
|
33
|
+
|
34
|
+
### s.files = Dir['Rakefile', '{bin,lib,spec}/**/*', 'README*', 'LICENSE*'] & `git ls-files -z .`.split("\0")
|
35
|
+
s.files = `git ls-files`.split("\n")
|
36
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
37
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
38
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<%
|
2
|
+
if ENV['BEAKER_HYPERVISOR']
|
3
|
+
hypervisor = ENV['BEAKER_HYPERVISOR']
|
4
|
+
else
|
5
|
+
hypervisor = 'vagrant'
|
6
|
+
end
|
7
|
+
-%>
|
8
|
+
HOSTS:
|
9
|
+
server-el7:
|
10
|
+
roles:
|
11
|
+
- server
|
12
|
+
- default
|
13
|
+
- master
|
14
|
+
- el7
|
15
|
+
platform: el-7-x86_64
|
16
|
+
box: centos/7
|
17
|
+
hypervisor: <%= hypervisor %>
|
18
|
+
|
19
|
+
server-el6:
|
20
|
+
roles:
|
21
|
+
- el6
|
22
|
+
platform: el-6-x86_64
|
23
|
+
box: centos/6
|
24
|
+
hypervisor: <%= hypervisor %>
|
25
|
+
|
26
|
+
CONFIG:
|
27
|
+
log_level: verbose
|
28
|
+
type: aio
|
29
|
+
vagrant_memsize: 256
|
30
|
+
<% if ENV['BEAKER_PUPPET_COLLECTION'] -%>
|
31
|
+
puppet_collection: <%= ENV['BEAKER_PUPPET_COLLECTION'] %>
|
32
|
+
<% end -%>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
hosts.each do |host|
|
4
|
+
describe 'make sure puppet version is valid' do
|
5
|
+
context "on #{host}" do
|
6
|
+
puppet_collection = host.options[:puppet_collection]
|
7
|
+
|
8
|
+
client_puppet_version = on(host, 'puppet --version').output.strip
|
9
|
+
|
10
|
+
if puppet_collection =~ /puppet(\d+)/
|
11
|
+
puppet_collection_version = $1
|
12
|
+
|
13
|
+
it "should be running puppet version #{puppet_collection_version}" do
|
14
|
+
expect(client_puppet_version.split('.').first).to eq(puppet_collection_version)
|
15
|
+
end
|
16
|
+
else
|
17
|
+
it 'should not be running puppet 5' do
|
18
|
+
expect(client_puppet_version.split('.').first).to eq '5'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
hosts.each do |host|
|
4
|
+
describe 'FIPS enabled from Forge' do
|
5
|
+
context "on #{host}" do
|
6
|
+
if ENV['BEAKER_fips'] == 'yes'
|
7
|
+
it 'creates an alternate apply directory' do
|
8
|
+
on(host, 'test -d /root/.beaker_fips/modules')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'has fips enabled' do
|
12
|
+
stdout = on(host, 'cat /proc/sys/crypto/fips_enabled').stdout.strip
|
13
|
+
expect(stdout).to eq('1')
|
14
|
+
end
|
15
|
+
else
|
16
|
+
it 'has fips disabled' do
|
17
|
+
stdout = on(host, 'cat /proc/sys/crypto/fips_enabled').stdout.strip
|
18
|
+
expect(stdout).to eq('0')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
context 'after copy_fixture_modules_to( hosts )' do
|
4
|
+
before(:all) do
|
5
|
+
# This should automatically run pluginsync_on hosts
|
6
|
+
copy_fixture_modules_to( hosts )
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "fact_on(master,'root_home')" do
|
10
|
+
it 'should not return value of `root_home`' do
|
11
|
+
puts fact = fact_on(master, 'root_home')
|
12
|
+
expect( fact ).to eq ''
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "pfact_on(master,'root_home')" do
|
17
|
+
it 'should return value of `root_home`' do
|
18
|
+
puts fact = pfact_on(master, 'root_home')
|
19
|
+
expect( fact ).to eq '/root'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
hosts.each do |host|
|
4
|
+
describe '#write_hieradata_to' do
|
5
|
+
|
6
|
+
it 'should install yum utils' do
|
7
|
+
host.install_package('yum-utils')
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'defailt settings' do
|
11
|
+
before(:all) { install_simp_repos(host) }
|
12
|
+
|
13
|
+
it 'creates the repo' do
|
14
|
+
on host, 'test -f /etc/yum.repos.d/simp.repo'
|
15
|
+
on host, 'test -f /etc/yum.repos.d/simp_deps.repo'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'enables the correct repos' do
|
19
|
+
simp6info = on(host, '/usr/bin/yum repolist -v simp | grep ^Repo-status').stdout.strip
|
20
|
+
expect(simp6info).to match(/.*Repo-status.*enabled.*/)
|
21
|
+
simp6depsinfo = on(host, 'yum repolist -v simp_deps| grep ^Repo-status').stdout.strip
|
22
|
+
expect(simp6depsinfo).to match(/.*Repo-status.*enabled.*/)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when passed a disabled list ' do
|
27
|
+
before(:all) { install_simp_repos(host, ['simp'] ) }
|
28
|
+
|
29
|
+
it 'creates the repo' do
|
30
|
+
on host, 'test -f /etc/yum.repos.d/simp.repo'
|
31
|
+
on host, 'test -f /etc/yum.repos.d/simp_deps.repo'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'enables the correct repos' do
|
35
|
+
simp6info = on(host, 'yum repolist -v simp | grep ^Repo-status').stdout.strip
|
36
|
+
expect(simp6info).to match(/.*Repo-status.*disabled.*/)
|
37
|
+
simp6depsinfo = on(host, 'yum repolist -v simp_deps| grep ^Repo-status').stdout.strip
|
38
|
+
expect(simp6depsinfo).to match(/.*Repo-status.*enabled.*/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
spec/acceptance/suites/default/../../nodesets
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
require 'tmpdir'
|
3
|
+
|
4
|
+
|
5
|
+
context 'PKI operations' do
|
6
|
+
|
7
|
+
context 'after run_fake_pki_ca_on(master,hosts)' do
|
8
|
+
before(:all) do
|
9
|
+
copy_fixture_modules_to( hosts )
|
10
|
+
end
|
11
|
+
|
12
|
+
shared_examples_for 'a correctly copied keydist/ tree' do |test_dir|
|
13
|
+
it 'correctly copies keydist/ tree' do
|
14
|
+
on(master, "ls -d #{test_dir}" +
|
15
|
+
" #{test_dir}/cacerts" +
|
16
|
+
" #{test_dir}/cacerts/cacert_*.pem"
|
17
|
+
)
|
18
|
+
|
19
|
+
hosts.each do |host|
|
20
|
+
name = host.node_name
|
21
|
+
on(master, "ls -d #{test_dir}/#{name}/cacerts" +
|
22
|
+
" #{test_dir}/#{name}/#{name}.pem" +
|
23
|
+
" #{test_dir}/#{name}/#{name}.pub" +
|
24
|
+
" #{test_dir}/cacerts/cacert_*.pem"
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'a Fake CA under /root' do
|
31
|
+
tmp_keydist_dir = Dir.mktmpdir 'simp-beaker-helpers__pki-tests'
|
32
|
+
run_fake_pki_ca_on( master, hosts, tmp_keydist_dir )
|
33
|
+
|
34
|
+
it 'should create /root/pki' do
|
35
|
+
on(master, 'test -d /root/pki')
|
36
|
+
end
|
37
|
+
|
38
|
+
it_behaves_like 'a correctly copied keydist/ tree', '/root/pki/keydist'
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'after copy_keydist_to' do
|
43
|
+
test_dir = '/etc/puppetlabs/code/environments/production/modules/pki/files/keydist'
|
44
|
+
copy_keydist_to(master)
|
45
|
+
it_behaves_like 'a correctly copied keydist/ tree', test_dir
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'after copy_keydist_to(master,"/tmp/foo")' do
|
49
|
+
test_dir = '/tmp/foo'
|
50
|
+
copy_keydist_to(master, test_dir)
|
51
|
+
it_behaves_like 'a correctly copied keydist/ tree', test_dir
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
hosts.each do |host|
|
4
|
+
describe '#set_hieradata_on' do
|
5
|
+
context 'when passed a YAML string' do
|
6
|
+
before(:all) { set_hieradata_on(host, "---\n") }
|
7
|
+
after(:all) { on(host, "rm -rf #{hiera_datadir(host)}") }
|
8
|
+
|
9
|
+
it 'creates the datadir' do
|
10
|
+
on host, "test -d #{hiera_datadir(host)}"
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'writes the correct contents to the correct file' do
|
14
|
+
stdout = on(host, "cat #{hiera_datadir(host)}/common.yaml").stdout
|
15
|
+
expect(stdout).to eq("---\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when passed a hash' do
|
20
|
+
before(:all) { set_hieradata_on(host, { 'foo' => 'bar' }) }
|
21
|
+
after(:all) { on(host, "rm -rf #{hiera_datadir(host)}") }
|
22
|
+
|
23
|
+
it 'creates the datadir' do
|
24
|
+
on host, "test -d #{hiera_datadir(host)}"
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'writes the correct contents to the correct file' do
|
28
|
+
stdout = on(host, "cat #{hiera_datadir(host)}/common.yaml").stdout
|
29
|
+
expect(stdout).to eq("---\nfoo: bar\n")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
hosts.each do |host|
|
4
|
+
describe '#write_hieradata_to' do
|
5
|
+
context 'when passed a YAML string' do
|
6
|
+
before(:all) { set_hieradata_on(host, "---\n") }
|
7
|
+
after(:all) { on(host, "rm -rf #{hiera_datadir(host)}") }
|
8
|
+
|
9
|
+
it 'creates the datadir' do
|
10
|
+
on host, "test -d #{hiera_datadir(host)}"
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'writes the correct contents to the correct file' do
|
14
|
+
stdout = on(host, "cat #{hiera_datadir(host)}/common.yaml").stdout
|
15
|
+
expect(stdout).to eq("---\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when passed a hash' do
|
20
|
+
before(:all) { set_hieradata_on(host, { 'foo' => 'bar' }) }
|
21
|
+
after(:all) { on(host, "rm -rf #{hiera_datadir(host)}") }
|
22
|
+
|
23
|
+
it 'creates the datadir' do
|
24
|
+
on host, "test -d #{hiera_datadir(host)}"
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'writes the correct contents to the correct file' do
|
28
|
+
stdout = on(host, "cat #{hiera_datadir(host)}/common.yaml").stdout
|
29
|
+
expect(stdout).to eq("---\nfoo: bar\n")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class ScrubFixtures
|
2
|
+
require 'simp/beaker_helpers'
|
3
|
+
include Simp::BeakerHelpers
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
FileUtils.rm_rf(File.join(fixtures_path, 'modules'))
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'yaml'
|
11
|
+
require 'tempfile'
|
12
|
+
|
13
|
+
alt_fixtures = File.absolute_path('.fips_fixtures.yml')
|
14
|
+
|
15
|
+
new_fixtures = {
|
16
|
+
'fixtures' => {
|
17
|
+
'repositories' => {}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
new_fixtures['fixtures']['repositories']['fips'] = 'https://github.com/simp/pupmod-simp-fips'
|
22
|
+
new_fixtures['fixtures']['repositories']['augeasproviders_core'] = 'https://github.com/simp/augeasproviders_core'
|
23
|
+
new_fixtures['fixtures']['repositories']['augeasproviders_grub'] = 'https://github.com/simp/augeasproviders_grub'
|
24
|
+
new_fixtures['fixtures']['repositories']['simplib'] = 'https://github.com/simp/pupmod-simp-simplib'
|
25
|
+
new_fixtures['fixtures']['repositories']['stdlib'] = 'https://github.com/simp/puppetlabs-stdlib'
|
26
|
+
|
27
|
+
File.open(alt_fixtures, 'w'){ |fh| fh.puts(new_fixtures.to_yaml) }
|
28
|
+
|
29
|
+
ScrubFixtures.new
|
30
|
+
|
31
|
+
ENV['BEAKER_fips'] = 'yes'
|
32
|
+
ENV['FIXTURES_YML'] = alt_fixtures
|
33
|
+
|
34
|
+
Bundler.with_clean_env{
|
35
|
+
ENV['FIXTURES_YML'] = alt_fixtures
|
36
|
+
|
37
|
+
%x{bundle exec rake spec_prep}
|
38
|
+
}
|
39
|
+
|
40
|
+
require 'spec_helper_acceptance'
|
41
|
+
|
42
|
+
describe 'FIPS pre-installed' do
|
43
|
+
after(:all) do
|
44
|
+
if alt_fixtures && File.exist?(alt_fixtures)
|
45
|
+
FileUtils.rm(alt_fixtures)
|
46
|
+
|
47
|
+
ScrubFixtures.new
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
hosts.each do |host|
|
52
|
+
context "on #{host}" do
|
53
|
+
it 'does not create an alternate apply directory' do
|
54
|
+
on(host, 'test ! -d /root/.beaker_fips/modules')
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'has fips enabled' do
|
58
|
+
stdout = on(host, 'cat /proc/sys/crypto/fips_enabled').stdout.strip
|
59
|
+
expect(stdout).to eq('1')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
spec/acceptance/suites/fips_from_fixtures/../../nodesets
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'spec_helper_acceptance'
|
2
|
+
|
3
|
+
describe 'Offline mode' do
|
4
|
+
hosts.each do |host|
|
5
|
+
context "on #{host}" do
|
6
|
+
let(:vagrant_version) { '2.2.5' }
|
7
|
+
let(:vagrant_rpm) { "https://releases.hashicorp.com/vagrant/#{vagrant_version}/vagrant_#{vagrant_version}_x86_64.rpm" }
|
8
|
+
let(:virtualbox_repo) { 'http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo' }
|
9
|
+
let(:build_user) { 'build_user' }
|
10
|
+
let(:build_user_cmd) { "runuser #{build_user} -l -c" }
|
11
|
+
|
12
|
+
# Not sure if this is a QEMU thing with the image or something else
|
13
|
+
it 'works around a CentOS curl bug with libvirt' do
|
14
|
+
on(host, %(touch /etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned))
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'adds the build user' do
|
18
|
+
on(host, %(useradd -b /home -G wheel -m -c "Build User" -s /bin/bash -U #{build_user}))
|
19
|
+
|
20
|
+
# Allow the build user to perform privileged operations
|
21
|
+
on(host, %(echo 'Defaults:build_user !requiretty' >> /etc/sudoers))
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'installs required packages' do
|
25
|
+
host.install_package('epel-release')
|
26
|
+
|
27
|
+
required_packages = [
|
28
|
+
'augeas-devel',
|
29
|
+
'autoconf',
|
30
|
+
'automake',
|
31
|
+
'bison',
|
32
|
+
'createrepo',
|
33
|
+
'curl',
|
34
|
+
'dkms',
|
35
|
+
'initscripts',
|
36
|
+
'gcc',
|
37
|
+
'gcc-c++',
|
38
|
+
'genisoimage',
|
39
|
+
'git',
|
40
|
+
'glibc-devel',
|
41
|
+
'glibc-headers',
|
42
|
+
'gnupg2',
|
43
|
+
'kernel-devel',
|
44
|
+
'libffi-devel',
|
45
|
+
'libicu-devel',
|
46
|
+
'libtool',
|
47
|
+
'libvirt',
|
48
|
+
'libvirt-client',
|
49
|
+
'libvirt-devel',
|
50
|
+
'libxml2',
|
51
|
+
'libxml2-devel',
|
52
|
+
'libxslt',
|
53
|
+
'libxslt-devel',
|
54
|
+
'libyaml-devel',
|
55
|
+
'make',
|
56
|
+
'ntpdate',
|
57
|
+
'openssl',
|
58
|
+
'openssl-devel',
|
59
|
+
'qemu',
|
60
|
+
'readline-devel',
|
61
|
+
'rpm-build',
|
62
|
+
'rpm-sign',
|
63
|
+
'rpmdevtools',
|
64
|
+
'ruby-devel',
|
65
|
+
'rubygems',
|
66
|
+
'seabios',
|
67
|
+
'sqlite-devel',
|
68
|
+
'util-linux',
|
69
|
+
'which'
|
70
|
+
]
|
71
|
+
|
72
|
+
on(host, %(yum -y install #{required_packages.join(' ')}))
|
73
|
+
on(host, %(yum -y update))
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'removes limits from the system' do
|
77
|
+
# Remove system limits
|
78
|
+
on(host, %(rm -rf /etc/security/limits.d/*.conf))
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'installs the latest VirtualBox' do
|
82
|
+
on(host, %(curl "#{virtualbox_repo}" -o /etc/yum.repos.d/virtualbox.repo))
|
83
|
+
on(host, 'yum -y install $(yum -y list | grep VirtualBox | sort | tail -1 | cut -f 1 -d " ")')
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'installs the VirtualBox extension pack' do
|
87
|
+
on(host, 'VERSION=$(VBoxManage --version | tail -1 | cut -f 1 -d "r") && curl -Lo ${TMPDIR}/Oracle_VM_VirtualBox_Extension_Pack-${VERSION}.vbox-extpack http://download.virtualbox.org/virtualbox/${VERSION}/Oracle_VM_VirtualBox_Extension_Pack-${VERSION}.vbox-extpack && yes | VBoxManage extpack install ${TMPDIR}/Oracle_VM_VirtualBox_Extension_Pack-${VERSION}.vbox-extpack && rm -rf ${TMPDIR}/Oracle_VM_VirtualBox_Extension_Pack-${VERSION}.vbox-extpack')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'adds the build user to the vboxusers group' do
|
91
|
+
on(host, %(usermod -a -G vboxusers #{build_user}))
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'reboots the system to finalize VirtualBox' do
|
95
|
+
host.reboot
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'installs RPM for the build user' do
|
99
|
+
# Install RVM
|
100
|
+
on(host, %(#{build_user_cmd} "for i in {1..5}; do { gpg2 --keyserver hkp://pgp.mit.edu --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 || gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 || gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3; } && { gpg2 --keyserver hkp://pgp.mit.edu --recv-keys 7D2BAF1CF37B13E2069D6956105BD0E739499BDB || gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 7D2BAF1CF37B13E2069D6956105BD0E739499BDB; } && break || sleep 1; done"))
|
101
|
+
on(host, %(#{build_user_cmd} "gpg2 --refresh-keys"))
|
102
|
+
on(host, %(#{build_user_cmd} "curl -sSL https://raw.githubusercontent.com/rvm/rvm/stable/binscripts/rvm-installer -o rvm-installer && curl -sSL https://raw.githubusercontent.com/rvm/rvm/stable/binscripts/rvm-installer.asc -o rvm-installer.asc && gpg2 --verify rvm-installer.asc rvm-installer && bash rvm-installer"))
|
103
|
+
on(host, %(#{build_user_cmd} "rvm install 2.4.4 --disable-binary"))
|
104
|
+
on(host, %(#{build_user_cmd} "rvm use --default 2.4.4"))
|
105
|
+
on(host, %(#{build_user_cmd} "rvm all do gem install bundler -v '~> 1.16' --no-document"))
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'installs vagrant' do
|
109
|
+
on(host, %(yum -y install #{vagrant_rpm}))
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'preps for testing by downloading boxes for tests' do
|
113
|
+
on(host, %(#{build_user_cmd} "vagrant box add --provider virtualbox centos/6"))
|
114
|
+
on(host, %(#{build_user_cmd} "vagrant box add --provider virtualbox centos/7"))
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'runs a simple nested virt test' do
|
118
|
+
build_user_homedir = on(host, "readlink -f ~#{build_user}").output.strip
|
119
|
+
vagrant_testdir = "#{build_user_homedir}/vagrant_test"
|
120
|
+
|
121
|
+
vagrant_test_file = <<-EOM
|
122
|
+
Vagrant.configure("2") do |c|
|
123
|
+
c.vm.define 'test' do |v|
|
124
|
+
v.vm.hostname = 'centos7.test.net'
|
125
|
+
v.vm.box = 'centos/7'
|
126
|
+
v.vm.box_check_update = 'false'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
EOM
|
130
|
+
|
131
|
+
host.mkdir_p(vagrant_testdir)
|
132
|
+
|
133
|
+
create_remote_file(host, "#{vagrant_testdir}/Vagrantfile", vagrant_test_file)
|
134
|
+
|
135
|
+
on(host, %(chown -R #{build_user} #{vagrant_testdir}))
|
136
|
+
|
137
|
+
on(host, %(#{build_user_cmd} "cd #{vagrant_testdir} && vagrant up"))
|
138
|
+
on(host, %(#{build_user_cmd} "cd #{vagrant_testdir} && vagrant destroy -f"))
|
139
|
+
end
|
140
|
+
|
141
|
+
# We're testing a real module since that has the widest set of
|
142
|
+
# repercussions for reaching out to the internet
|
143
|
+
it 'downloads a module to test' do
|
144
|
+
on(host, %(#{build_user_cmd} "git clone https://github.com/simp/pupmod-simp-at"))
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'preps the module for building' do
|
148
|
+
on(host, %(#{build_user_cmd} "cd pupmod-simp-at; bundle update"))
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'runs a network-connected test' do
|
152
|
+
on(host, %(#{build_user_cmd} "cd pupmod-simp-at; rake beaker:suites"))
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'disables all internet network traffic via iptables' do
|
156
|
+
on(host, %(iptables -I OUTPUT -d `ip route | awk '/default/ {print $3}'`/16 -j ACCEPT))
|
157
|
+
on(host, 'iptables -A OUTPUT -j DROP')
|
158
|
+
end
|
159
|
+
|
160
|
+
xit 'runs a network-disconnected test' do
|
161
|
+
on(host, %(#{build_user_cmd} "cd pupmod-simp-at; rake beaker:suites"))
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|