beaker-puppet 0.17.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab9b20f21bd824b158c5ffa5b8e88d4ad05dff2b
4
- data.tar.gz: 53b1a3c552fef8592d72485444e1cd7323b49cc6
3
+ metadata.gz: 175a3e08fbd658bd3d8de3b2887bd0528d81bece
4
+ data.tar.gz: d9705d9cd91f355d1d275c1404f5c358a960820e
5
5
  SHA512:
6
- metadata.gz: d8218db2ae6f22c36b3a23c0a8ae3dcd663503900c5a6b0f22a027d4190cdda9a445d1c942750ddb7e6d16d4cd5d868bdc15e130a2957270a9c587d50556daca
7
- data.tar.gz: e7b406d7f1e5ac8a9ecd0f768ce8499f9d814b1d4457b010f7e93d1fd994fb7a1879d773d698f10b6c97c59b87aed714228b4f7ada010f0e215bb14e1659648b
6
+ metadata.gz: b5fc2e1b4252e692f8e5f8022093603aa609994751502ef9042739e7752bad2c679932f52ba89638444a871c908cd27153a1be0d8794d28720788f0fd00eb38e
7
+ data.tar.gz: f705cc01f0635e048e5c3e4e14311822eee1b5ba95369a8a650af0afdcb854321f3e7956872199d96e55beb46cca7071fae96c72dabbcad74c53e9cd569fab28
data/Gemfile CHANGED
@@ -16,7 +16,7 @@ end
16
16
 
17
17
 
18
18
  group :test do
19
- gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 3.24')
19
+ gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 4.0')
20
20
  gem "beaker-abs", *location_for(ENV['ABS_VERSION'] || '~> 0.4.0')
21
21
  end
22
22
 
data/README.md CHANGED
@@ -9,6 +9,27 @@ of beaker, please do, we would love any help that you'd like to provide.
9
9
 
10
10
  # How Do I Use This?
11
11
 
12
+ ## With Beaker 3.x
13
+
14
+ This library is included as a dependency of Beaker 3.x versions and is automatically included, so there's nothing to do.
15
+
16
+ ## With Beaker 4.x
17
+
18
+ As of Version 1.0 of `beaker-puppet`, the minimum supported version of beaker is Version 4.0. If you use `ENV['BEAKER_VERSION']`, you will have to ensure that this is compatible, and that if you are using a local Git repository it is up to date.
19
+
20
+ As of beaker 4.0, all hypervisor and DSL extension libraries have been removed and are no longer dependencies. In order to use a specific hypervisor or DSL extension library in your project, you will need to include them alongside Beaker in your Gemfile or project.gemspec. E.g.
21
+
22
+ ~~~ruby
23
+ # Gemfile
24
+ gem 'beaker', '~>4.0'
25
+ gem 'beaker-puppet', '~>1.0'
26
+ # project.gemspec
27
+ s.add_runtime_dependency 'beaker', '~>4.0'
28
+ s.add_runtime_dependency 'beaker-puppet', '~>1.0'
29
+ ~~~
30
+
31
+ For DSL Extension Libraries, you must also ensure that you `require` the library in your test files. You can do this manually in individual test files or in a test helper (if you have one). You can [use `Bundler.require()`](https://bundler.io/v1.16/guides/groups.html) to require the library automatically.
32
+
12
33
  ### Right Now? (beaker 3.x)
13
34
 
14
35
  At this point, beaker-puppet is included in beaker, so you don't have to _do_
@@ -1,3 +1,5 @@
1
+ require 'beaker-puppet'
2
+
1
3
  hosts.each do |host|
2
4
  install_puppet_from_gem(host, {:version => '3.8.7'})
3
5
  unless host['platform'] =~ /windows/
@@ -1,7 +1,5 @@
1
- begin
2
- require 'beaker/acceptance/install_utils'
3
- extend Beaker::Acceptance::InstallUtils
4
- end
1
+ require 'beaker-puppet'
2
+
5
3
  test_name 'Puppet git pre-suite'
6
4
 
7
5
  install = [
@@ -10,8 +8,6 @@ install = [
10
8
  'puppet#3.8.7'
11
9
  ]
12
10
 
13
- SourcePath = Beaker::DSL::InstallUtils::SourcePath
14
-
15
11
  PACKAGES = {
16
12
  :redhat => [
17
13
  'git',
@@ -1,3 +1,5 @@
1
+ require 'beaker-puppet'
2
+
1
3
  # the version is required on windows
2
4
  # all versions are required for osx
3
5
  install_puppet({
@@ -1,3 +1,5 @@
1
1
  # Beaker Acceptance Tests: puppet
2
2
 
3
3
  Tests that depend upon Puppet being installed on the SUTs.
4
+
5
+ As of Beaker 4.0, you must `require 'beaker-puppet'` in each of these test files in order to access beaker-puppet DSL extensions.
@@ -0,0 +1,43 @@
1
+ require 'beaker-puppet'
2
+
3
+ confine :except, :platform => /^solaris-10/
4
+
5
+ test_name 'Clone from git' do
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
+
31
+ install_packages_on(hosts, PACKAGES, :check_if_exists => true)
32
+
33
+ # implicitly tests build_giturl() and lookup_in_env()
34
+ hosts.each do |host|
35
+ on host, "echo #{GitHubSig} >> $HOME/.ssh/known_hosts"
36
+ testdir = host.tmpdir(File.basename(__FILE__))
37
+
38
+ step 'should be able to successfully clone a git repo' do
39
+ results = clone_git_repo_on(host, "#{testdir}", extract_repo_info_from(build_git_url('hiera')))
40
+ assert_match( %r{From.*github\.com[:/]puppetlabs/hiera}, result.output, 'Did not find clone')
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ test_name "dsl::helpers::host_helpers #create_tmpdir_on" do
2
+ step "#create_tmpdir_on returns a temporary directory on the remote system" do
3
+ tmpdir = create_tmpdir_on default
4
+ assert_match %r{/}, tmpdir
5
+ assert_equal 0, on(default, "touch #{tmpdir}/testfile").exit_code
6
+ end
7
+
8
+ step "#create_tmpdir_on uses the specified path prefix when provided" do
9
+ tmpdir = create_tmpdir_on(default, "mypathprefix")
10
+ assert_match %r{/mypathprefix}, tmpdir
11
+ assert_equal 0, on(default, "touch #{tmpdir}/testfile").exit_code
12
+ end
13
+
14
+ step "#create_tmpdir_on fails if a non-existent user is specified" do
15
+ assert_raises Beaker::Host::CommandFailure do
16
+ tmpdir = create_tmpdir_on default, '', 'fakeuser'
17
+ end
18
+ end
19
+
20
+ step "#create_tmpdir_on sets the user if specified" do
21
+ default.user_present('tmpdirtestuser')
22
+ tmpdir = create_tmpdir_on(default, nil, 'tmpdirtestuser', nil)
23
+ assert_match /tmpdirtestuser/, on(default, "ls -ld #{tmpdir}").output
24
+ default.user_absent('tmpdirtestuser')
25
+ end
26
+
27
+ step "#create_tmpdir_on fails if a non-existent group is specified" do
28
+ assert_raises Beaker::Host::CommandFailure do
29
+ tmpdir = create_tmpdir_on default, '', nil, 'fakegroup'
30
+ end
31
+ end
32
+
33
+ step "#create_tmpdir_on sets the group if specified" do
34
+ default.group_present('tmpdirtestgroup')
35
+ tmpdir = create_tmpdir_on(default, nil, nil, 'tmpdirtestgroup')
36
+ assert_match /testgroup/, on(default, "ls -ld #{tmpdir}").output
37
+ default.group_absent('tmpdirtestgroup')
38
+ end
39
+
40
+ step "#create_tmpdir_on operates on all hosts if given a hosts array" do
41
+ tmpdirs = create_tmpdir_on hosts
42
+ hosts.zip(tmpdirs).each do |(host, tmpdir)|
43
+ assert_match %r{/}, tmpdir
44
+ assert_equal 0, on(host, "touch #{tmpdir}/testfile").exit_code
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,5 @@
1
+ require 'beaker-puppet'
2
+
1
3
  test_name "puppet install smoketest"
2
4
 
3
5
  step 'puppet install smoketest: verify \'facter --help\' can be successfully called on all hosts'
@@ -1,3 +1,5 @@
1
+ require 'beaker-puppet'
2
+
1
3
  test_name "validate host stubbing behavior"
2
4
 
3
5
  def get_hosts_file(host)
@@ -1,3 +1,5 @@
1
+ require 'beaker-puppet'
2
+
1
3
  require 'webrick'
2
4
  require 'webrick/https'
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'beaker-puppet'
2
+
1
3
  test_name 'skip_test in with_puppet_running_on' do
2
4
  assert_raises SkipTest do
3
5
  with_puppet_running_on(master, {}) do
@@ -25,6 +25,9 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency 'simplecov'
26
26
  s.add_development_dependency 'pry', '~> 0.10'
27
27
 
28
+ # Acceptance Testing Dependencies
29
+ s.add_development_dependency 'beaker-vmpooler'
30
+
28
31
  # Documentation dependencies
29
32
  s.add_development_dependency 'yard'
30
33
  s.add_development_dependency 'markdown'
data/lib/beaker-puppet.rb CHANGED
@@ -8,7 +8,7 @@ require 'beaker-puppet/helpers/rake_helpers'
8
8
  [ 'aio', 'foss' ].each do |lib|
9
9
  require "beaker-puppet/install_utils/#{lib}_defaults"
10
10
  end
11
- [ 'foss', 'puppet', 'ezbake', 'module' ].each do |lib|
11
+ [ 'windows', 'foss', 'puppet', 'ezbake', 'module' ].each do |lib|
12
12
  require "beaker-puppet/install_utils/#{lib}_utils"
13
13
  end
14
14
  [ 'tk', 'facter', 'puppet' ].each do |lib|
@@ -19,34 +19,23 @@ require 'beaker-puppet/install_utils/puppet5'
19
19
 
20
20
 
21
21
  module BeakerPuppet
22
- module InstallUtils
23
- include Beaker::DSL::InstallUtils::FOSSDefaults
24
- include Beaker::DSL::InstallUtils::AIODefaults
22
+ include Beaker::DSL::InstallUtils::FOSSDefaults
23
+ include Beaker::DSL::InstallUtils::AIODefaults
25
24
 
26
- include Beaker::DSL::InstallUtils::PuppetUtils
27
- include Beaker::DSL::InstallUtils::FOSSUtils
28
- include Beaker::DSL::InstallUtils::EZBakeUtils
29
- include Beaker::DSL::InstallUtils::ModuleUtils
25
+ include Beaker::DSL::InstallUtils::WindowsUtils
26
+ include Beaker::DSL::InstallUtils::PuppetUtils
27
+ include Beaker::DSL::InstallUtils::FOSSUtils
28
+ include Beaker::DSL::InstallUtils::EZBakeUtils
29
+ include Beaker::DSL::InstallUtils::ModuleUtils
30
30
 
31
- include BeakerPuppet::Install::Puppet5
32
- end
31
+ include Beaker::DSL::InstallUtils::Puppet5
33
32
 
34
- module Helpers
35
- include Beaker::DSL::Helpers::TKHelpers
36
- include Beaker::DSL::Helpers::FacterHelpers
37
- include Beaker::DSL::Helpers::PuppetHelpers
38
- end
33
+ include Beaker::DSL::Helpers::TKHelpers
34
+ include Beaker::DSL::Helpers::FacterHelpers
35
+ include Beaker::DSL::Helpers::PuppetHelpers
39
36
 
40
37
  include Beaker::DSL::Wrappers
41
38
  end
42
39
 
43
-
44
- # # Boilerplate DSL inclusion mechanism:
45
- # # First we register our module with the Beaker DSL
46
- # Beaker::DSL.register( Beaker::DSL::Puppet )
47
- #
48
- # # Modules added into a module which has previously been included are not
49
- # # retroactively included in the including class.
50
- # #
51
- # # https://github.com/adrianomitre/retroactive_module_inclusion
52
- # Beaker::TestCase.class_eval { include Beaker::DSL }
40
+ # Register the DSL extension
41
+ Beaker::DSL.register( BeakerPuppet )
@@ -865,6 +865,55 @@ module Beaker
865
865
  sign_certificate_for(default)
866
866
  end
867
867
 
868
+ # Create a temp directory on remote host, optionally owned by specified user and group.
869
+ #
870
+ # @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon,
871
+ # or a role (String or Symbol) that identifies one or more hosts.
872
+ # @param [String] path_prefix A remote path prefix for the new temp directory.
873
+ # @param [String] user The name of user that should own the temp directory. If
874
+ # not specified, uses default permissions from tmpdir creation.
875
+ # @param [String] group The name of group that should own the temp directory.
876
+ # If not specified, uses default permissions from tmpdir creation.
877
+ #
878
+ # @return [String, Array<String>] Returns the name of the newly-created dir, or
879
+ # an array of names of newly-created dirs per-host
880
+ #
881
+ # @note While tempting, this method should not be "optimized" to coalesce calls to
882
+ # chown user:group when both options are passed, as doing so will muddy the spec.
883
+ def create_tmpdir_on(hosts, path_prefix = '', user = nil, group = nil)
884
+ block_on hosts do | host |
885
+ # create the directory
886
+ dir = host.tmpdir(path_prefix)
887
+ # only chown if explicitly passed; don't make assumptions about perms
888
+ # only `chown user` for cleaner codepaths
889
+ if user
890
+ # ensure user exists
891
+ if not host.user_get(user).success?
892
+ # clean up
893
+ host.rm_rf("#{dir}")
894
+ raise "User #{user} does not exist on #{host}."
895
+ end
896
+ # chown only user
897
+ host.chown(user, dir)
898
+ # on host, "chown #{user} #{dir}"
899
+ end
900
+ # only chgrp if explicitly passed; don't make assumptions about perms
901
+ if group
902
+ # ensure group exists
903
+ if not host.group_get(group).success?
904
+ # clean up
905
+ # on host, "rmdir #{dir}"
906
+ host.rm_rf(dir)
907
+ raise "Group #{group} does not exist on #{host}."
908
+ end
909
+ # chgrp
910
+ # on host, "chgrp #{group} #{dir}"
911
+ host.chgrp(group, dir)
912
+ end
913
+ dir
914
+ end
915
+ end
916
+
868
917
  # Create a temp directory on remote host with a user. Default user
869
918
  # is puppet master user.
870
919
  #
@@ -1,4 +1,4 @@
1
- require "beaker/dsl/install_utils/windows_utils"
1
+ require "beaker-puppet/install_utils/windows_utils"
2
2
  [ 'aio', 'foss' ].each do |lib|
3
3
  require "beaker-puppet/install_utils/#{lib}_defaults"
4
4
  end
@@ -1414,6 +1414,7 @@ module Beaker
1414
1414
  :solaris_11 => /solaris-11/,
1415
1415
  :windows => /windows/,
1416
1416
  :eos => /^eos-/,
1417
+ :sles => /sles/,
1417
1418
  }.freeze
1418
1419
 
1419
1420
  check_if_exists = options[:check_if_exists]
@@ -1,209 +1,211 @@
1
1
  require 'beaker/dsl/install_utils/foss_defaults'
2
2
 
3
- module BeakerPuppet
4
- module Install
5
- module Puppet5
6
-
7
- include Beaker::DSL::InstallUtils::FOSSDefaults
8
-
9
- # grab build json from the builds server
10
- #
11
- # @param [String] sha_yaml_url URL to the <SHA>.yaml file containing the
12
- # build details
13
- #
14
- # @return [Hash{String=>String}] build json parsed into a ruby hash
15
- def fetch_build_details(sha_yaml_url)
16
- dst_folder = Dir.mktmpdir
17
- sha_yaml_filename = File.basename( sha_yaml_url )
18
- sha_yaml_folder_url = File.dirname( sha_yaml_url )
19
-
20
- sha_yaml_file_local_path = fetch_http_file(
21
- sha_yaml_folder_url,
22
- sha_yaml_filename,
23
- dst_folder
24
- )
25
- file_hash = YAML.load_file( sha_yaml_file_local_path )
26
-
27
- return sha_yaml_folder_url, file_hash[:platform_data]
28
- end
3
+ module Beaker
4
+ module DSL
5
+ module InstallUtils
6
+ module Puppet5
7
+
8
+ include Beaker::DSL::InstallUtils::FOSSDefaults
9
+
10
+ # grab build json from the builds server
11
+ #
12
+ # @param [String] sha_yaml_url URL to the <SHA>.yaml file containing the
13
+ # build details
14
+ #
15
+ # @return [Hash{String=>String}] build json parsed into a ruby hash
16
+ def fetch_build_details(sha_yaml_url)
17
+ dst_folder = Dir.mktmpdir
18
+ sha_yaml_filename = File.basename( sha_yaml_url )
19
+ sha_yaml_folder_url = File.dirname( sha_yaml_url )
20
+
21
+ sha_yaml_file_local_path = fetch_http_file(
22
+ sha_yaml_folder_url,
23
+ sha_yaml_filename,
24
+ dst_folder
25
+ )
26
+ file_hash = YAML.load_file( sha_yaml_file_local_path )
27
+
28
+ return sha_yaml_folder_url, file_hash[:platform_data]
29
+ end
29
30
 
30
- # Get the host's packaging platform, based on beaker-hostgenerator's
31
- # osinfo hash and the environment. Set ENV['BEAKER_PACKAGING_PLATFORMS']
32
- # to override the default packaging platform specified by
33
- # beaker-hostgenerator. This should be a comma-separated string with
34
- # entries of the format `<host-platform>=<override-platform>`
35
- #
36
- # @param [Host] host Host whose packaging platform to determine
37
- # @return [String] The packaging platform
38
- def host_packaging_platform(host)
39
- packaging_platform = host[:packaging_platform]
40
- if ENV['BEAKER_PACKAGING_PLATFORMS']
41
- overrides = Hash[ENV['BEAKER_PACKAGING_PLATFORMS'].split(',').map { |e| e.split('=') }]
42
- logger.debug("Found packaging platform overrides: #{overrides}")
43
- if overrides[host[:platform]]
44
- platform = overrides[host[:platform]]
45
- logger.debug("Default beaker packaging platform '#{host[:packaging_platform]}' for '#{host[:platform]}' overridden as '#{platform}'")
46
- packaging_platform = platform
31
+ # Get the host's packaging platform, based on beaker-hostgenerator's
32
+ # osinfo hash and the environment. Set ENV['BEAKER_PACKAGING_PLATFORMS']
33
+ # to override the default packaging platform specified by
34
+ # beaker-hostgenerator. This should be a comma-separated string with
35
+ # entries of the format `<host-platform>=<override-platform>`
36
+ #
37
+ # @param [Host] host Host whose packaging platform to determine
38
+ # @return [String] The packaging platform
39
+ def host_packaging_platform(host)
40
+ packaging_platform = host[:packaging_platform]
41
+ if ENV['BEAKER_PACKAGING_PLATFORMS']
42
+ overrides = Hash[ENV['BEAKER_PACKAGING_PLATFORMS'].split(',').map { |e| e.split('=') }]
43
+ logger.debug("Found packaging platform overrides: #{overrides}")
44
+ if overrides[host[:platform]]
45
+ platform = overrides[host[:platform]]
46
+ logger.debug("Default beaker packaging platform '#{host[:packaging_platform]}' for '#{host[:platform]}' overridden as '#{platform}'")
47
+ packaging_platform = platform
48
+ end
47
49
  end
50
+ packaging_platform
48
51
  end
49
- packaging_platform
50
- end
51
52
 
52
- # Gets the artifact & repo_config URLs for this host in the build.
53
- #
54
- # @param [Host] host Host to get artifact URL for
55
- # @param [Hash] build_details Details of the build in a hash
56
- # @param [String] build_url URL to the build
57
- #
58
- # @return [String, String] URL to the build artifact, URL to the repo_config
59
- # (nil if there is no repo_config for this platform for this build)
60
- def host_urls(host, build_details, build_url)
61
- packaging_platform = host_packaging_platform(host)
62
- if packaging_platform.nil?
63
- message = <<-EOF
64
- :packaging_platform not provided for host '#{host}', platform '#{host[:platform]}'
65
- :packaging_platform should be the platform-specific key from this list:
66
- #{ build_details.keys }
67
- EOF
68
- fail_test( message )
69
- end
53
+ # Gets the artifact & repo_config URLs for this host in the build.
54
+ #
55
+ # @param [Host] host Host to get artifact URL for
56
+ # @param [Hash] build_details Details of the build in a hash
57
+ # @param [String] build_url URL to the build
58
+ #
59
+ # @return [String, String] URL to the build artifact, URL to the repo_config
60
+ # (nil if there is no repo_config for this platform for this build)
61
+ def host_urls(host, build_details, build_url)
62
+ packaging_platform = host_packaging_platform(host)
63
+ if packaging_platform.nil?
64
+ message = <<-EOF
65
+ :packaging_platform not provided for host '#{host}', platform '#{host[:platform]}'
66
+ :packaging_platform should be the platform-specific key from this list:
67
+ #{ build_details.keys }
68
+ EOF
69
+ fail_test( message )
70
+ end
70
71
 
71
- logger.debug("Platforms available for this build:")
72
- logger.debug("#{ build_details.keys }")
73
- logger.debug("PLATFORM SPECIFIC INFO for #{host} (packaging name '#{packaging_platform}'):")
74
- packaging_data = build_details[packaging_platform]
75
- logger.debug("- #{ packaging_data }, isnil? #{ packaging_data.nil? }")
76
- if packaging_data.nil?
77
- message = <<-EOF
78
- :packaging_platform '#{packaging_platform}' for host '#{host}' not in build details
79
- :packaging_platform should be the platform-specific key from this list:
80
- #{ build_details.keys }
81
- EOF
82
- fail_test( message )
83
- end
72
+ logger.debug("Platforms available for this build:")
73
+ logger.debug("#{ build_details.keys }")
74
+ logger.debug("PLATFORM SPECIFIC INFO for #{host} (packaging name '#{packaging_platform}'):")
75
+ packaging_data = build_details[packaging_platform]
76
+ logger.debug("- #{ packaging_data }, isnil? #{ packaging_data.nil? }")
77
+ if packaging_data.nil?
78
+ message = <<-EOF
79
+ :packaging_platform '#{packaging_platform}' for host '#{host}' not in build details
80
+ :packaging_platform should be the platform-specific key from this list:
81
+ #{ build_details.keys }
82
+ EOF
83
+ fail_test( message )
84
+ end
84
85
 
85
- artifact_buildserver_path = packaging_data[:artifact]
86
- repoconfig_buildserver_path = packaging_data[:repo_config]
87
- fail_test('no artifact_buildserver_path found') if artifact_buildserver_path.nil?
86
+ artifact_buildserver_path = packaging_data[:artifact]
87
+ repoconfig_buildserver_path = packaging_data[:repo_config]
88
+ fail_test('no artifact_buildserver_path found') if artifact_buildserver_path.nil?
88
89
 
89
- artifact_url = "#{build_url}/#{artifact_buildserver_path}"
90
- repoconfig_url = "#{build_url}/#{repoconfig_buildserver_path}" unless repoconfig_buildserver_path.nil?
91
- artifact_url_correct = link_exists?( artifact_url )
92
- logger.debug("- artifact url: '#{artifact_url}'. Exists? #{artifact_url_correct}")
93
- fail_test('artifact url built incorrectly') if !artifact_url_correct
90
+ artifact_url = "#{build_url}/#{artifact_buildserver_path}"
91
+ repoconfig_url = "#{build_url}/#{repoconfig_buildserver_path}" unless repoconfig_buildserver_path.nil?
92
+ artifact_url_correct = link_exists?( artifact_url )
93
+ logger.debug("- artifact url: '#{artifact_url}'. Exists? #{artifact_url_correct}")
94
+ fail_test('artifact url built incorrectly') if !artifact_url_correct
94
95
 
95
- return artifact_url, repoconfig_url
96
- end
96
+ return artifact_url, repoconfig_url
97
+ end
97
98
 
98
- # install build artifact on the given host
99
- #
100
- # @param [Host] host Host to install artifact on
101
- # @param [String] artifact_url URL of the project install artifact
102
- # @param [String] project_name Name of project for artifact. Needed for OSX installs
103
- #
104
- # @return nil
105
- def install_artifact_on(host, artifact_url, project_name)
106
- variant, version, _, _ = host[:platform].to_array
107
- case variant
108
- when 'eos'
109
- host.get_remote_file(artifact_url)
110
- onhost_package_file = File.basename(artifact_url)
111
- # TODO Will be refactored into {Beaker::Host#install_local_package}
112
- # immediately following this work. The release timing makes it
113
- # necessary to have this here separately for a short while
114
- host.install_from_file(onhost_package_file)
115
- when 'solaris'
116
- artifact_filename = File.basename(artifact_url)
117
- artifact_folder = File.dirname(artifact_url)
118
- fetch_http_file(artifact_folder, artifact_filename, '.')
119
- onhost_package_dir = host.tmpdir('puppet_installer')
120
- scp_to host, artifact_filename, onhost_package_dir
121
- onhost_package_file = "#{onhost_package_dir}/#{artifact_filename}"
122
- host.install_local_package(onhost_package_file, '.')
123
- when 'osx'
124
- on host, "curl -O #{artifact_url}"
125
- onhost_package_file = "#{project_name}*"
126
- host.install_local_package(onhost_package_file)
127
- when 'windows'
128
- if project_name == 'puppet-agent'
129
- install_msi_on(host, artifact_url)
99
+ # install build artifact on the given host
100
+ #
101
+ # @param [Host] host Host to install artifact on
102
+ # @param [String] artifact_url URL of the project install artifact
103
+ # @param [String] project_name Name of project for artifact. Needed for OSX installs
104
+ #
105
+ # @return nil
106
+ def install_artifact_on(host, artifact_url, project_name)
107
+ variant, version, _, _ = host[:platform].to_array
108
+ case variant
109
+ when 'eos'
110
+ host.get_remote_file(artifact_url)
111
+ onhost_package_file = File.basename(artifact_url)
112
+ # TODO Will be refactored into {Beaker::Host#install_local_package}
113
+ # immediately following this work. The release timing makes it
114
+ # necessary to have this here separately for a short while
115
+ host.install_from_file(onhost_package_file)
116
+ when 'solaris'
117
+ artifact_filename = File.basename(artifact_url)
118
+ artifact_folder = File.dirname(artifact_url)
119
+ fetch_http_file(artifact_folder, artifact_filename, '.')
120
+ onhost_package_dir = host.tmpdir('puppet_installer')
121
+ scp_to host, artifact_filename, onhost_package_dir
122
+ onhost_package_file = "#{onhost_package_dir}/#{artifact_filename}"
123
+ host.install_local_package(onhost_package_file, '.')
124
+ when 'osx'
125
+ on host, "curl -O #{artifact_url}"
126
+ onhost_package_file = "#{project_name}*"
127
+ host.install_local_package(onhost_package_file)
128
+ when 'windows'
129
+ if project_name == 'puppet-agent'
130
+ install_msi_on(host, artifact_url)
131
+ else
132
+ generic_install_msi_on(host, artifact_url)
133
+ end
134
+ when 'aix'
135
+ artifact_filename = File.basename(artifact_url)
136
+ artifact_folder = File.dirname(artifact_url)
137
+ fetch_http_file(artifact_folder, artifact_filename, '.')
138
+ onhost_package_dir = host.tmpdir('puppet_installer')
139
+ scp_to host, artifact_filename, onhost_package_dir
140
+ onhost_package_file = "#{onhost_package_dir}/#{artifact_filename}"
141
+
142
+ # TODO Will be refactored into {Beaker::Host#install_local_package}
143
+ # immediately following this work. The release timing makes it
144
+ # necessary to have this here seperately for a short while
145
+ # NOTE: the AIX 7.1 package will only install on 7.2 with
146
+ # --ignoreos. This is a bug in package building on AIX 7.1's RPM
147
+ if version == "7.2"
148
+ aix_72_ignoreos_hack = "--ignoreos"
149
+ end
150
+ on host, "rpm -ivh #{aix_72_ignoreos_hack} #{onhost_package_file}"
130
151
  else
131
- generic_install_msi_on(host, artifact_url)
152
+ host.install_package(artifact_url)
132
153
  end
133
- when 'aix'
134
- artifact_filename = File.basename(artifact_url)
135
- artifact_folder = File.dirname(artifact_url)
136
- fetch_http_file(artifact_folder, artifact_filename, '.')
137
- onhost_package_dir = host.tmpdir('puppet_installer')
138
- scp_to host, artifact_filename, onhost_package_dir
139
- onhost_package_file = "#{onhost_package_dir}/#{artifact_filename}"
140
-
141
- # TODO Will be refactored into {Beaker::Host#install_local_package}
142
- # immediately following this work. The release timing makes it
143
- # necessary to have this here seperately for a short while
144
- # NOTE: the AIX 7.1 package will only install on 7.2 with
145
- # --ignoreos. This is a bug in package building on AIX 7.1's RPM
146
- if version == "7.2"
147
- aix_72_ignoreos_hack = "--ignoreos"
148
- end
149
- on host, "rpm -ivh #{aix_72_ignoreos_hack} #{onhost_package_file}"
150
- else
151
- host.install_package(artifact_url)
152
- end
153
- end
154
-
155
- # Sets up the repo_configs on the host for this build
156
- #
157
- # @param [Host] host Host to install repo_configs on
158
- # @param [String] repoconfig_url URL to the repo_config
159
- #
160
- # @return nil
161
- def install_repo_configs_on(host, repoconfig_url)
162
- if repoconfig_url.nil?
163
- logger.warn("No repo_config for host '#{host}'. Skipping repo_config install")
164
- return
165
154
  end
166
155
 
167
- install_repo_configs_from_url( host, repoconfig_url )
168
- end
156
+ # Sets up the repo_configs on the host for this build
157
+ #
158
+ # @param [Host] host Host to install repo_configs on
159
+ # @param [String] repoconfig_url URL to the repo_config
160
+ #
161
+ # @return nil
162
+ def install_repo_configs_on(host, repoconfig_url)
163
+ if repoconfig_url.nil?
164
+ logger.warn("No repo_config for host '#{host}'. Skipping repo_config install")
165
+ return
166
+ end
169
167
 
170
- # Installs a specified puppet project on all hosts. Gets build information
171
- # from the provided YAML file located at the +sha_yaml_url+ parameter.
172
- #
173
- # @param [String] project_name Name of the project to install
174
- # @param [String] sha_yaml_url URL to the <SHA>.yaml file containing the
175
- # build details
176
- # @param [String or Array] hosts Optional string or array of host or hosts to
177
- # install on
178
- #
179
- # @note This install method only works for Puppet versions >= 5.0
180
- #
181
- # @return nil
182
- def install_from_build_data_url(project_name, sha_yaml_url, local_hosts = nil)
183
- if !link_exists?( sha_yaml_url )
184
- message = <<-EOF
185
- <SHA>.yaml URL '#{ sha_yaml_url }' does not exist.
186
- Please update the `sha_yaml_url` parameter to the `puppet5_install` method.
187
- EOF
188
- fail_test( message )
168
+ install_repo_configs_from_url( host, repoconfig_url )
189
169
  end
190
170
 
191
- base_url, build_details = fetch_build_details( sha_yaml_url )
171
+ # Installs a specified puppet project on all hosts. Gets build information
172
+ # from the provided YAML file located at the +sha_yaml_url+ parameter.
173
+ #
174
+ # @param [String] project_name Name of the project to install
175
+ # @param [String] sha_yaml_url URL to the <SHA>.yaml file containing the
176
+ # build details
177
+ # @param [String or Array] hosts Optional string or array of host or hosts to
178
+ # install on
179
+ #
180
+ # @note This install method only works for Puppet versions >= 5.0
181
+ #
182
+ # @return nil
183
+ def install_from_build_data_url(project_name, sha_yaml_url, local_hosts = nil)
184
+ if !link_exists?( sha_yaml_url )
185
+ message = <<-EOF
186
+ <SHA>.yaml URL '#{ sha_yaml_url }' does not exist.
187
+ Please update the `sha_yaml_url` parameter to the `puppet5_install` method.
188
+ EOF
189
+ fail_test( message )
190
+ end
192
191
 
193
- install_targets = local_hosts.nil? ? hosts : Array(local_hosts)
192
+ base_url, build_details = fetch_build_details( sha_yaml_url )
194
193
 
195
- install_targets.each do |host|
196
- artifact_url, repoconfig_url = host_urls( host, build_details, base_url )
197
- if repoconfig_url.nil?
198
- install_artifact_on( host, artifact_url, project_name )
199
- else
200
- install_repo_configs_on( host, repoconfig_url )
201
- host.install_package( project_name )
194
+ install_targets = local_hosts.nil? ? hosts : Array(local_hosts)
195
+
196
+ install_targets.each do |host|
197
+ artifact_url, repoconfig_url = host_urls( host, build_details, base_url )
198
+ if repoconfig_url.nil?
199
+ install_artifact_on( host, artifact_url, project_name )
200
+ else
201
+ install_repo_configs_on( host, repoconfig_url )
202
+ host.install_package( project_name )
203
+ end
204
+ configure_type_defaults_on( host )
202
205
  end
203
- configure_type_defaults_on( host )
204
206
  end
205
- end
206
207
 
208
+ end
207
209
  end
208
210
  end
209
211
  end