"repo": "git://github.com/puppetlabs/puppetlabs-stdlib.git"
"translate":
"repo": "https://github.com/puppetlabs/puppetlabs-translate"
+ facts: 'git://github.com/puppetlabs/puppetlabs-facts.git'
+ puppet_agent: 'git://github.com/puppetlabs/puppetlabs-puppet_agent.git'
+ provision: 'git://github.com/puppetlabs/provision.git'
symlinks:
"apt": "#{source_dir}"
- rubocop-rspec
.travis.yml:
- docker_sets:
- - set: docker/debian-8
- - set: docker/ubuntu-14.04
- docker_defaults:
- bundler_args: ""
- secure: ""
- branches:
- - release
+ unmanaged: true
appveyor.yml:
delete: true
Gemfile:
required:
- ':system_tests':
- - gem: 'puppet-module-posix-system-r#{minor_version}'
- platforms: ruby
- - gem: 'puppet-module-win-system-r#{minor_version}'
+ ':development':
+ - gem: 'puppet_litmus'
platforms:
+ - ruby
- mswin
- mingw
- x64_mingw
+ condition: "ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5}"
+ - gem: 'serverspec'
optional:
':development':
- gem: 'github_changelog_generator'
Rakefile:
requires:
- puppet_pot_generator/rake_tasks
+ use_litmus_tasks: true
spec/spec_helper.rb:
mock_with: ':rspec'
fast_finish: true
include:
-
- bundler_args:
+ bundler_args:
dist: trusty
- env: PUPPET_INSTALL_TYPE=agent BEAKER_debug=true BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_set=docker/debian-8 BEAKER_TESTMODE=apply
+ env: PLATFORMS=deb_puppet5
rvm: 2.5.3
- script: bundle exec rake beaker
+ before_script:
+ - bundle exec rake 'litmus:provision_list[travis_deb]'
+ - bundle exec bolt command run 'apt-get install wget -y' --inventoryfile inventory.yaml --nodes='localhost*'
+ - bundle exec rake 'litmus:install_agent[puppet5]'
+ - bundle exec rake litmus:install_module
+ script:
+ - bundle exec rake litmus:acceptance:parallel
services: docker
stage: acceptance
sudo: required
-
- bundler_args:
+ bundler_args:
dist: trusty
- env: PUPPET_INSTALL_TYPE=agent BEAKER_debug=true BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_set=docker/ubuntu-14.04 BEAKER_TESTMODE=apply
+ env: PLATFORM=deb_puppet6
rvm: 2.5.3
- script: bundle exec rake beaker
+ before_script:
+ - bundle exec rake 'litmus:provision_list[travis_deb]'
+ - bundle exec bolt command run 'apt-get install wget -y' --inventoryfile inventory.yaml --nodes='localhost*'
+ - bundle exec rake 'litmus:install_agent[puppet6]'
+ - bundle exec rake litmus:install_module
+ script:
+ - bundle exec rake litmus:acceptance:parallel
services: docker
- stage: acceptance
sudo: required
-
env: CHECK="check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop syntax lint metadata_lint"
gem "puppet-module-posix-dev-r#{minor_version}", '~> 0.3', require: false, platforms: [:ruby]
gem "puppet-module-win-default-r#{minor_version}", '~> 0.3', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "puppet-module-win-dev-r#{minor_version}", '~> 0.3', require: false, platforms: [:mswin, :mingw, :x64_mingw]
+ gem "puppet_litmus", require: false, platforms: [:ruby, :mswin, :mingw, :x64_mingw] if ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5}
+ gem "serverspec", require: false
gem "github_changelog_generator", require: false, git: 'https://github.com/skywinder/github-changelog-generator', ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018' if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2')
gem "puppet-lint-i18n", require: false
end
-group :system_tests do
- gem "puppet-module-posix-system-r#{minor_version}", require: false, platforms: [:ruby]
- gem "puppet-module-win-system-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
-end
puppet_version = ENV['PUPPET_GEM_VERSION']
facter_version = ENV['FACTER_GEM_VERSION']
+require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any?
require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-syntax/tasks/puppet-syntax'
require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
--- /dev/null
+team-modules/puppetlabs-apt:
+ PreBuild:
+ - source /opt/rh/rh-ruby25/enable
+ - echo "--- LETS update BUNDLER ---"
+ - bundle install --path vendor/bundle --jobs 3
+ Build:
+ - echo "--- PROVISIONING ---"
+ - source /opt/rh/rh-ruby25/enable
+ - bundle exec rake litmus:provision_list[release_checks]
+ - cat inventory.yaml
+ - echo "--- AGENT INSTALLATION ---"
+ - bundle exec rake litmus:install_agent
+ - echo "--- MODULE INSTALLATION ---"
+ - bundle exec rake litmus:install_module
+ - echo "--- TESTS RUNNING ---"
+ - bundle exec rake litmus:acceptance:parallel
+ AfterBuildSuccess:
+ - source /opt/rh/rh-ruby25/enable
+ - bundle exec rake litmus:tear_down
+ AfterBuildFailure:
+ - source /opt/rh/rh-ruby25/enable
+ - bundle exec rake litmus:tear_down
+ CommitData:
+ - RepoType: Git
+ - RepoPath: .
"version_requirement": ">= 5.5.10 < 7.0.0"
}
],
- "template-url": "https://github.com/puppetlabs/pdk-templates#master",
+ "template-url": "https://github.com/puppetlabs/pdk-templates/#master",
"template-ref": "heads/master-0-g7827fc2",
"pdk-version": "1.10.0"
}
--- /dev/null
+---
+default:
+ provisioner: docker
+ images: ['waffleimage/debian8']
+travis_deb:
+ provisioner: docker
+ images: ['debian:8', 'debian:9', 'ubuntu:14.04', 'ubuntu:16.04', 'ubuntu:18.04']
+waffle_deb:
+ provisioner: docker
+ images: ['waffleimage/debian8', 'waffleimage/debian9', 'waffleimage/ubuntu14.04', 'waffleimage/ubuntu16.04', 'waffleimage/ubuntu18.04']
+release_checks:
+ provisioner: vmpooler
+ images: ['debian-8-x86_64', 'debian-9-x86_64', 'ubuntu-1404-x86_64', 'ubuntu-1604-x86_64', 'ubuntu-1804-x86_64']
def install_key(key)
retry_on_error_matching do
- shell("apt-key adv --no-tty --keyserver pgp.mit.edu --recv-keys #{key}")
+ run_shell("apt-key adv --no-tty --keyserver pgp.mit.edu --recv-keys #{key}")
end
end
}
MANIFEST
-hkps_protocol_supported = fact('operatingsystem') =~ %r{Ubuntu} && \
- fact('operatingsystemrelease') =~ %r{^18\.04}
+hkps_protocol_supported = os[:family] =~ %r{Ubuntu} && \
+ os[:family][:release][:full] =~ %r{^18\.04}
if hkps_protocol_supported
hkps_ubuntu_pp = <<-MANIFEST
before(:each) do
# Delete twice to make sure everything is cleaned
# up after the short key collision
- shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}",
- acceptable_exit_codes: [0, 1, 2])
- shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}",
- acceptable_exit_codes: [0, 1, 2])
+ run_shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}", expect_failures: true)
+ run_shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}", expect_failures: true)
end
describe 'ensure =>' do
end
apply_manifest(gpg_key_pp, catch_changes: true)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
end
context 'with multiple keys' do
it 'runs without errors' do
apply_manifest_twice(multiple_keys_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
end
end
apply_manifest(hkp_pool_pp, catch_changes: true)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
end
end
apply_manifest(hkps_ubuntu_pp, catch_changes: true)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
end
end
context 'with http://' do
it 'works' do
apply_manifest_twice(http_works_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
it 'works with userinfo' do
apply_manifest_twice(http_works_userinfo_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
it 'fails with a 404' do
# disabled when running in travis, security issues prevent FTP
context 'with ftp://', unless: (ENV['TRAVIS'] == 'true') do
before(:each) do
- shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}",
- acceptable_exit_codes: [0, 1, 2])
+ run_shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}", expect_failures: true)
end
it 'works' do
apply_manifest_twice(ftp_works_pp)
- shell(CENTOS_KEY_CHECK_COMMAND)
+ run_shell(CENTOS_KEY_CHECK_COMMAND)
end
it 'fails with a 550' do
context 'with https://' do
it 'works' do
apply_manifest_twice(https_works_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
it 'works with weak ssl' do
apply_manifest_twice(https_with_weak_ssl_works_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
it 'works with userinfo' do
apply_manifest_twice(https_userinfo_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
it 'fails with a 404' do
context 'with /path/that/exists' do
before(:each) do
- shell("curl -o /tmp/puppetlabs-pubkey.gpg \
+ run_shell("curl -o /tmp/puppetlabs-pubkey.gpg \
http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}")
end
after(:each) do
- shell('rm /tmp/puppetlabs-pubkey.gpg')
+ run_shell('rm /tmp/puppetlabs-pubkey.gpg')
end
it 'works' do
apply_manifest_twice(path_exists_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
end
context 'with /path/that/exists/with/bogus/content' do
before(:each) do
- shell('echo "here be dragons" > /tmp/fake-key.gpg')
+ run_shell('echo "here be dragons" > /tmp/fake-key.gpg')
end
after(:each) do
- shell('rm /tmp/fake-key.gpg')
+ run_shell('rm /tmp/fake-key.gpg')
end
it 'fails' do
apply_manifest(path_bogus_content_pp, expect_failures: true) do |r|
context 'with debug' do
it 'works' do
apply_manifest_twice(debug_works_pp)
- shell(PUPPETLABS_KEY_CHECK_COMMAND)
+ run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
end
end
end
end
describe 'refresh' do
- if fact('osfamily') == 'Debian' && (fact('lsbdistcodename') == 'stretch' || fact('lsbdistcodename') == 'bionic')
- # Set Debian Stetch specific value of puppetlabs_exp_check_command
- let(:puppetlabs_exp_check_command) { DEBIAN_PUPPETLABS_EXP_CHECK_COMMAND }
- else
- # Set default value of puppetlabs_exp_check_command
+ if ['8', '14.04', '16.04'].include?(host_inventory['facter']['os']['release']['major'])
+ # older OSes use puppetlabs_exp_check_command
let(:puppetlabs_exp_check_command) { PUPPETLABS_EXP_CHECK_COMMAND }
+
+ else
+ # Set Debian Stetch and newer OSes puppetlabs_exp_check_command
+ let(:puppetlabs_exp_check_command) { DEBIAN_PUPPETLABS_EXP_CHECK_COMMAND }
+
+ # Ensure dirmngr package is installed
+ apply_manifest(refresh_check_for_dirmngr_pp, acceptable_exit_codes: [0, 2])
end
before(:each) do
- if fact('lsbdistcodename') == 'stretch' || fact('lsbdistcodename') == 'bionic'
- # Ensure dirmngr package is installed
- apply_manifest(refresh_check_for_dirmngr_pp, acceptable_exit_codes: [0, 2])
- end
# Delete the Puppet Labs Release Key and install an expired version of the key
apply_manifest(refresh_del_key_pp)
apply_manifest(refresh_pp, catch_failures: true)
it 'updates an expired key' do
apply_manifest(refresh_true_pp)
# Check key has been updated to new version
- shell(puppetlabs_exp_check_command.to_s, acceptable_exit_codes: [0])
+ run_shell(puppetlabs_exp_check_command.to_s)
end
end
context 'when refresh => false' do
it 'does not replace an expired key' do
apply_manifest(refresh_false_pp)
# Expired key is present and has not been updated by the new version
- shell(puppetlabs_exp_check_command.to_s, acceptable_exit_codes: [1])
+ run_shell(puppetlabs_exp_check_command.to_s, expect_failures: true)
end
end
end
describe 'apt class' do
context 'with reset' do
it 'fixes the sources.list' do
- shell('cp /etc/apt/sources.list /tmp')
+ run_shell('cp /etc/apt/sources.list /tmp')
end
end
end
end
it 'stills work' do
- shell('apt-get update')
- shell('apt-get -y --force-yes upgrade')
+ run_shell('apt-get update')
+ run_shell('apt-get -y --force-yes upgrade')
end
end
context 'with reset' do
it 'fixes the sources.list' do
- shell('cp /tmp/sources.list /etc/apt')
+ run_shell('cp /tmp/sources.list /etc/apt')
end
end
end
# run a test task
require 'spec_helper_acceptance'
-describe 'apt tasks', if: pe_install? && puppet_version =~ %r{(5\.\d\.\d)} && fact_on(master, 'osfamily') == 'Debian' do
+describe 'apt tasks' do
describe 'update' do
it 'updates package lists' do
- result = run_task(task_name: 'apt', params: 'action=update')
- expect_multiple_regexes(result: result, regexes: [%r{Reading package lists}, %r{Job completed. 1/1 nodes succeeded}])
+ result = run_bolt_task('apt', 'action' => 'update')
+ expect(result.stdout).to contain(%r{Reading package lists})
end
end
describe 'upgrade' do
it 'upgrades packages' do
- result = run_task(task_name: 'apt', params: 'action=upgrade')
- expect_multiple_regexes(result: result, regexes: [%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}, %r{Job completed. 1/1 nodes succeeded}])
+ result = run_bolt_task('apt', 'action' => 'upgrade')
+ expect(result.stdout).to contain(%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded})
end
end
describe 'dist-upgrade' do
it 'dist-upgrades packages' do
- result = run_task(task_name: 'apt', params: 'action=dist-upgrade')
- expect_multiple_regexes(result: result, regexes: [%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}, %r{Job completed. 1/1 nodes succeeded}])
+ result = run_bolt_task('apt', 'action' => 'dist-upgrade')
+ expect(result.stdout).to contain(%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded})
end
end
describe 'autoremove' do
it 'autoremoves obsolete packages' do
- result = run_task(task_name: 'apt', params: 'action=autoremove')
- expect_multiple_regexes(result: result, regexes: [%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}, %r{Job completed. 1/1 nodes succeeded}])
+ result = run_bolt_task('apt', 'action' => 'autoremove')
+ expect(result.stdout).to contain(%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded})
end
end
end
+++ /dev/null
-require 'spec_helper_acceptance'
-require 'beaker/i18n_helper'
-
-PUPPETLABS_GPG_KEY_LONG_ID = '7F438280EF8D349F'.freeze
-PUPPETLABS_LONG_FINGERPRINT = '123456781274D2C8A956789A456789A456789A9A'.freeze
-
-id_doesnt_match_fingerprint_pp = <<-MANIFEST
- apt_key { '#{PUPPETLABS_LONG_FINGERPRINT}':
- ensure => 'present',
- content => '123456781274D2C8A956789A456789A456789A9B',
- }
-MANIFEST
-
-location_not_specified_fail_pp = <<-MANIFEST
- apt::source { 'puppetlabs':
- ensure => 'present',
- repos => 'main',
- key => {
- id => '6F6B15509CF8E59E6E469F327F438280EF8D349F',
- server => 'hkps.pool.sks-keyservers.net',
- },
- }
-MANIFEST
-
-invalid_title_pp = <<-MANIFEST
- apt::setting { 'test':
- ensure => 'present',
- content => 'test'
- }
-MANIFEST
-
-no_content_param_pp = <<-MANIFEST
- apt::conf { 'test':
- ensure => 'present',
- }
-MANIFEST
-
-describe 'localization', if: (fact('osfamily') == 'Debian' || fact('osfamily') == 'RedHat') && (Gem::Version.new(puppet_version) >= Gem::Version.new('4.10.5')) do
- before :all do
- hosts.each do |host|
- on(host, "sed -i \"96i FastGettext.locale='ja'\" /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb")
- change_locale_on(host, 'ja_JP.utf-8')
- end
- end
-
- describe 'ruby translations' do
- it 'translates an interpolated string' do
- apply_manifest(id_doesnt_match_fingerprint_pp, expect_failures: true) do |r|
- expect(r.stderr).to match(%r{content/sourceが正当であるかを確認してください})
- end
- end
- it 'translates a simple string' do
- apply_manifest(location_not_specified_fail_pp, expect_failures: true) do |r|
- expect(r.stderr).to match(%r{場所を指定せずにソースエントリを作成することはできません})
- end
- end
- end
-
- describe 'puppet translations' do
- it 'translates a concatenated string' do
- apply_manifest(invalid_title_pp, expect_failures: true) do |r|
- expect(r.stderr).to match(%r{apt::settingのリソース名/タイトルの先頭は、'conf-'、'pref-'、'list-'にする必要があります})
- end
- end
- it 'translates a simple string' do
- apply_manifest(no_content_param_pp, expect_failures: true) do |r|
- expect(r.stderr).to match(%r{contentパラメータを渡す必要があります})
- end
- end
- end
-
- after :all do
- hosts.each do |host|
- on(host, 'sed -i "96d" /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb')
- change_locale_on(host, 'en_US')
- end
- end
-end
-require 'beaker-pe'
-require 'beaker-puppet'
-require 'beaker-rspec'
-require 'beaker/puppet_install_helper'
-require 'beaker/module_install_helper'
-require 'beaker-task_helper'
-require 'beaker/i18n_helper'
-require 'beaker-task_helper'
+# frozen_string_literal: true
-run_puppet_install_helper
-configure_type_defaults_on(hosts)
-install_bolt_on(hosts) unless pe_install?
-install_module_on(hosts)
-install_module_dependencies_on(hosts)
+require 'serverspec'
+require 'puppet_litmus'
+require 'spec_helper_acceptance_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_acceptance_local.rb'))
+include PuppetLitmus
-UNSUPPORTED_PLATFORMS = ['RedHat', 'Suse', 'windows', 'AIX', 'Solaris'].freeze
-MAX_RETRY_COUNT = 5
-RETRY_WAIT = 3
-ERROR_MATCHER = %r{(no valid OpenPGP data found|keyserver timed out|keyserver receive failed)}
-
-# This method allows a block to be passed in and if an exception is raised
-# that matches the 'error_matcher' matcher, the block will wait a set number
-# of seconds before retrying.
-# Params:
-# - max_retry_count - Max number of retries
-# - retry_wait_interval_secs - Number of seconds to wait before retry
-# - error_matcher - Matcher which the exception raised must match to allow retry
-# Example Usage:
-# retry_on_error_matching(3, 5, /OpenGPG Error/) do
-# apply_manifest(pp, :catch_failures => true)
-# end
-def retry_on_error_matching(max_retry_count = MAX_RETRY_COUNT, retry_wait_interval_secs = RETRY_WAIT, error_matcher = ERROR_MATCHER)
- try = 0
- begin
- puts "retry_on_error_matching: try #{try}" unless try.zero?
- try += 1
- yield
- rescue StandardError => e
- raise(_('Attempted this %{value0} times. Raising %{value1}') % { value0: max_retry_count, value1: e }) unless try < max_retry_count && (error_matcher.nil? || e.message =~ error_matcher)
- sleep retry_wait_interval_secs
- retry
+if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost'
+ puts 'Running tests against this machine !'
+ if Gem.win_platform?
+ set :backend, :cmd
+ else
+ set :backend, :exec
end
-end
+else
+ # load inventory
+ inventory_hash = inventory_hash_from_inventory_file
+ node_config = config_from_node(inventory_hash, ENV['TARGET_HOST'])
-RSpec.configure do |c|
- File.expand_path(File.join(File.dirname(__FILE__), '..'))
+ if target_in_group(inventory_hash, ENV['TARGET_HOST'], 'docker_nodes')
+ host = ENV['TARGET_HOST']
+ set :backend, :docker
+ set :docker_container, host
+ elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'ssh_nodes')
+ set :backend, :ssh
+ options = Net::SSH::Config.for(host)
+ options[:user] = node_config.dig('ssh', 'user') unless node_config.dig('ssh', 'user').nil?
+ options[:port] = node_config.dig('ssh', 'port') unless node_config.dig('ssh', 'port').nil?
+ options[:keys] = node_config.dig('ssh', 'private-key') unless node_config.dig('ssh', 'private-key').nil?
+ options[:password] = node_config.dig('ssh', 'password') unless node_config.dig('ssh', 'password').nil?
+ options[:verify_host_key] = Net::SSH::Verifiers::Null.new unless node_config.dig('ssh', 'host-key-check').nil?
+ host = if ENV['TARGET_HOST'].include?(':')
+ ENV['TARGET_HOST'].split(':').first
+ else
+ ENV['TARGET_HOST']
+ end
+ set :host, options[:host_name] || host
+ set :ssh_options, options
+ elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'winrm_nodes')
+ require 'winrm'
- # Readable test descriptions
- c.formatter = :documentation
+ set :backend, :winrm
+ set :os, family: 'windows'
+ user = node_config.dig('winrm', 'user') unless node_config.dig('winrm', 'user').nil?
+ pass = node_config.dig('winrm', 'password') unless node_config.dig('winrm', 'password').nil?
+ endpoint = "http://#{ENV['TARGET_HOST']}:5985/wsman"
- # Configure all nodes in nodeset
- c.before :suite do
- run_puppet_access_login(user: 'admin') if pe_install? && (Gem::Version.new(puppet_version) >= Gem::Version.new('5.0.0'))
+ opts = {
+ user: user,
+ password: pass,
+ endpoint: endpoint,
+ operation_timeout: 300,
+ }
- hosts.each do |host|
- # This will be removed, this is temporary to test localisation.
- if (fact('osfamily') == 'Debian' || fact('osfamily') == 'RedHat') &&
- (Gem::Version.new(puppet_version) >= Gem::Version.new('4.10.5') &&
- Gem::Version.new(puppet_version) < Gem::Version.new('5.2.0'))
- on(host, 'mkdir /opt/puppetlabs/puppet/share/locale/ja')
- on(host, 'touch /opt/puppetlabs/puppet/share/locale/ja/puppet.po')
- end
- if fact('osfamily') == 'Debian'
- # install language on debian systems
- install_language_on(host, 'ja_JP.utf-8') if not_controller(host)
- # This will be removed, this is temporary to test localisation.
- end
- on host, puppet('module', 'install', 'stahnma/epel')
- end
+ winrm = WinRM::Connection.new opts
+ Specinfra.configuration.winrm = winrm
end
end
--- /dev/null
+# frozen_string_literal: true
+
+UNSUPPORTED_PLATFORMS = ['RedHat', 'Suse', 'windows', 'AIX', 'Solaris'].freeze
+MAX_RETRY_COUNT = 5
+RETRY_WAIT = 3
+ERROR_MATCHER = %r{(no valid OpenPGP data found|keyserver timed out|keyserver receive failed)}
+
+# this is needed for puppet facts / apply
+lsb_package = <<-MANIFEST
+package { 'lsb-release':
+ ensure => installed,
+}
+MANIFEST
+
+include PuppetLitmus
+apply_manifest(lsb_package)
+
+# This method allows a block to be passed in and if an exception is raised
+# that matches the 'error_matcher' matcher, the block will wait a set number
+# of seconds before retrying.
+# Params:
+# - max_retry_count - Max number of retries
+# - retry_wait_interval_secs - Number of seconds to wait before retry
+# - error_matcher - Matcher which the exception raised must match to allow retry
+# Example Usage:
+# retry_on_error_matching(3, 5, /OpenGPG Error/) do
+# apply_manifest(pp, :catch_failures => true)
+# end
+
+def retry_on_error_matching(max_retry_count = MAX_RETRY_COUNT, retry_wait_interval_secs = RETRY_WAIT, error_matcher = ERROR_MATCHER)
+ try = 0
+ begin
+ puts "retry_on_error_matching: try #{try}" unless try.zero?
+ try += 1
+ yield
+ rescue StandardError => e
+ raise('Attempted this %{value0} times. Raising %{value1}' % { value0: max_retry_count, value1: e }) unless try < max_retry_count && (error_matcher.nil? || e.message =~ error_matcher)
+ sleep retry_wait_interval_secs
+ retry
+ end
+end