]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/commitdiff
Convert to using litmus
authorFlorin Dragos <florin@puppet.com>
Tue, 11 Jun 2019 14:45:24 +0000 (17:45 +0300)
committerFlorin Dragos <florin@puppet.com>
Wed, 12 Jun 2019 07:26:46 +0000 (10:26 +0300)
.fixtures.yml
.sync.yml
.travis.yml
Gemfile
Rakefile
provision.yaml [new file with mode: 0644]
spec/acceptance/apt_key_provider_spec.rb
spec/acceptance/apt_spec.rb
spec/acceptance/locales_spec.rb [deleted file]
spec/spec_helper_acceptance.rb

index b419b4d716007b132ad970fbdbb544a44551b278..6c2bda86165760b348891830f322b7f160279054 100644 (file)
@@ -4,5 +4,8 @@ fixtures:
       "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}"
index 1e4bce19e30cb4e663d7590a36c94f0e25df594a..4adfb674a03b03bdf35c8a44461d9ed898702481 100644 (file)
--- a/.sync.yml
+++ b/.sync.yml
@@ -36,6 +36,13 @@ Gemfile:
           - mswin
           - mingw
           - x64_mingw
+      - gem: 'puppet_litmus'
+        platforms:
+          - ruby
+          - mswin
+          - mingw
+          - x64_mingw
+        condition: "ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5}"
   optional:
     ':development':
       - gem: 'github_changelog_generator'
@@ -47,6 +54,7 @@ Gemfile:
 Rakefile:
   requires:
     - puppet_pot_generator/rake_tasks
+  use_litmus_tasks: true
 
 spec/spec_helper.rb:
   mock_with: ':rspec'
index 1877a1752bc0ea1a997bc8a7d269e130291ed33d..612b4c2e9533db57e397604d723db32d1a0e1c60 100644 (file)
@@ -23,22 +23,33 @@ matrix:
   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
-      rvm: 2.5.3
-      script: bundle exec rake beaker
+      env: PLATFORMS=deb_puppet5
+      rvm: 2.5.1
+      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
-      rvm: 2.5.3
-      script: bundle exec rake beaker
+      env: PLATFORM=centos:deb_puppet6
+      rvm: 2.5.1
+      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"
diff --git a/Gemfile b/Gemfile
index 0c0fdf5b28c988da3b740e9c7071ce4475dab416..e6c82f2417238c743138db88eaff7ccebfbd50b5 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -33,6 +33,7 @@ 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]
+  gem "puppet_litmus",                                require: false, platforms: [:ruby, :mswin, :mingw, :x64_mingw] if ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5}
 end
 
 puppet_version = ENV['PUPPET_GEM_VERSION']
index 24984ef4ff9256fb943f392780dd1db914f54c4d..13b58c86ddcc8d51fff1e19c957deab7f9565fd6 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -1,3 +1,4 @@
+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?
diff --git a/provision.yaml b/provision.yaml
new file mode 100644 (file)
index 0000000..62951bf
--- /dev/null
@@ -0,0 +1,10 @@
+---
+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']
index 18c885728ecc1ae28873a65f9a2e8eb5c1936ee4..3e38a6dc4682c4ab588c7e4916ae80363e0f4cf0 100644 (file)
@@ -21,7 +21,7 @@ DEBIAN_PUPPETLABS_EXP_CHECK_COMMAND = 'apt-key list | grep -F -A 1 \'pub   rsa40
 
 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
 
@@ -440,8 +440,8 @@ hkp_pool_pp = <<-MANIFEST
         }
   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
@@ -646,10 +646,8 @@ describe 'apt_key' do
   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
@@ -684,14 +682,14 @@ describe 'apt_key' 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
 
@@ -712,7 +710,7 @@ describe 'apt_key' do
         end
 
         apply_manifest(hkp_pool_pp, catch_changes: true)
-        shell(PUPPETLABS_KEY_CHECK_COMMAND)
+        run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
       end
     end
 
@@ -724,7 +722,7 @@ describe 'apt_key' do
           end
 
           apply_manifest(hkps_ubuntu_pp, catch_changes: true)
-          shell(PUPPETLABS_KEY_CHECK_COMMAND)
+          run_shell(PUPPETLABS_KEY_CHECK_COMMAND)
         end
       end
     end
@@ -750,12 +748,12 @@ describe 'apt_key' do
     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
@@ -774,13 +772,12 @@ describe 'apt_key' 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
@@ -799,17 +796,17 @@ describe 'apt_key' 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
@@ -827,17 +824,17 @@ describe 'apt_key' 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
 
@@ -851,11 +848,11 @@ describe 'apt_key' do
 
     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|
@@ -869,7 +866,7 @@ describe 'apt_key' do
     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
@@ -891,18 +888,17 @@ describe 'apt_key' do
   end
 
   describe 'refresh' do
-    if fact('osfamily') == 'Debian' && (fact('lsbdistcodename') == 'stretch' || fact('lsbdistcodename') == 'bionic')
+    if os[:family] == 'debian' && (os[:distro][:codename] == 'stretch' || os[:distro][:codename] == 'bionic')
       # Set Debian Stetch specific value of 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])
     else
       # Set default value of puppetlabs_exp_check_command
       let(:puppetlabs_exp_check_command) { PUPPETLABS_EXP_CHECK_COMMAND }
     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)
@@ -911,14 +907,14 @@ describe 'apt_key' do
       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
index 7fe1d033297ea9061b8ee5569361083785c83838..d3215a17714b1765bbd05998a8a0d163db66ef16 100644 (file)
@@ -31,7 +31,7 @@ everything_everything_pp = <<-MANIFEST
 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
 
@@ -43,14 +43,14 @@ describe 'apt class' do
       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
diff --git a/spec/acceptance/locales_spec.rb b/spec/acceptance/locales_spec.rb
deleted file mode 100644 (file)
index 338e8ed..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-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
index 29b178a51e3a8a125f65e273dc66e9e086c29658..7cd8fdffe9331f6cd6cd614ac23a60c01af39d19 100644 (file)
@@ -1,17 +1,9 @@
-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
@@ -42,30 +34,68 @@ def retry_on_error_matching(max_retry_count = MAX_RETRY_COUNT, retry_wait_interv
   end
 end
 
-RSpec.configure do |c|
-  File.expand_path(File.join(File.dirname(__FILE__), '..'))
+def pe_install?
+  false
+end
+
+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
+else
+  # load inventory
+  inventory_hash = inventory_hash_from_inventory_file
+  node_config = config_from_node(inventory_hash, ENV['TARGET_HOST'])
 
-  # Readable test descriptions
-  c.formatter = :documentation
+  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
+    set :request_pty, true
+  elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'winrm_nodes')
+    require 'winrm'
 
-  # 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'))
+    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"
 
-    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
+    opts = {
+      user: user,
+      password: pass,
+      endpoint: endpoint,
+      operation_timeout: 300,
+    }
+
+    winrm = WinRM::Connection.new opts
+    Specinfra.configuration.winrm = winrm
   end
+
+  lsb_package = <<-MANIFEST
+    package { 'lsb-release':
+           ensure => installed,
+    }
+    MANIFEST
+
+  apply_manifest(lsb_package)
+  run_shell('puppet module install stahnma/epel')
 end