Merge pull request #240 from daenney/manage-preferences
authorHunter Haugen <hunter@puppetlabs.com>
Tue, 25 Feb 2014 17:25:49 +0000 (09:25 -0800)
committerHunter Haugen <hunter@puppetlabs.com>
Tue, 25 Feb 2014 17:25:49 +0000 (09:25 -0800)
apt: Allow managing of preferences file.

32 files changed:
Gemfile
manifests/params.pp
manifests/ppa.pp
manifests/unattended_upgrades.pp
spec/acceptance/apt_builddep_spec.rb
spec/acceptance/apt_key_spec.rb
spec/acceptance/apt_ppa_spec.rb
spec/acceptance/apt_source_spec.rb
spec/acceptance/apt_spec.rb
spec/acceptance/backports_spec.rb
spec/acceptance/class_spec.rb
spec/acceptance/conf_spec.rb
spec/acceptance/force_spec.rb
spec/acceptance/nodesets/ubuntu-server-10044-x64.yml [new file with mode: 0644]
spec/acceptance/pin_spec.rb
spec/acceptance/release_spec.rb
spec/acceptance/unattended_upgrade_spec.rb
spec/acceptance/unsupported_spec.rb [new file with mode: 0644]
spec/classes/apt_spec.rb
spec/classes/debian_testing_spec.rb
spec/classes/debian_unstable_spec.rb
spec/classes/params_spec.rb
spec/classes/release_spec.rb
spec/classes/unattended_upgrades_spec.rb
spec/defines/builddep_spec.rb
spec/defines/conf_spec.rb
spec/defines/force_spec.rb
spec/defines/key_spec.rb
spec/defines/pin_spec.rb
spec/defines/ppa_spec.rb
spec/defines/source_spec.rb
spec/spec_helper_acceptance.rb

diff --git a/Gemfile b/Gemfile
index cd7fbc89b8b34018b9c9ac830299f7af65f9acd2..1e359d07b563e2c3d869945136c3ab01aa00b64e 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -2,6 +2,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org'
 
 group :development, :test do
   gem 'rake',                    :require => false
+  gem 'pry',                     :require => false
   gem 'rspec-puppet',            :require => false
   gem 'puppet-lint',             :require => false
   gem 'puppetlabs_spec_helper',  :require => false
index 955954fe89f65ea1e9e00f7aaaaf9fe5a5a610c5..b35bb1c8d91b0a667d2fbb3a2ae986628db86261 100644 (file)
@@ -21,13 +21,22 @@ class apt::params {
     }
     'ubuntu': {
       case $::lsbdistcodename {
-        'hardy','lucid','maverick','natty','oneiric','precise': {
+        'hardy','maverick','natty','oneiric','precise': {
           $backports_location = 'http://us.archive.ubuntu.com/ubuntu'
+          $ppa_options = '-y'
+        }
+        'lucid': {
+          $backports_location = 'http://us.archive.ubuntu.com/ubuntu'
+          $ppa_options = undef
         }
         default: {
           $backports_location = 'http://old-releases.ubuntu.com/ubuntu'
+          $ppa_options = '-y'
         }
       }
     }
+    default: {
+      fail("Unsupported osfamily (${::osfamily}) or lsbdistid (${::lsbdistid})")
+    }
   }
 }
index 14fbbceba41089f3e7ee683724c748c8c65c5941..bc8d486007980a1770884ffa91d8bce06b90b421 100644 (file)
@@ -3,7 +3,7 @@
 define apt::ppa(
   $ensure  = 'present',
   $release = $::lsbdistcodename,
-  $options = '-y'
+  $options = $apt::params::ppa_options,
 ) {
   include apt::params
   include apt::update
index f006bd5289b2c21ff533a898b90411ca2f8d5700..b0bd8ab1e09d7a9dae7780b511012fd227d899f3 100644 (file)
@@ -37,6 +37,7 @@ class apt::unattended_upgrades (
   $download_delta = "0",
   $verbose = "0",
 ) {
+  include apt::params
 
   validate_bool(
     $auto_fix,
index b61fca29550196008fc31073eb55ae1e8ea5effb..1e35e4aa68d9530c16c0bbc559f520261cea0b5d 100644 (file)
@@ -1,10 +1,10 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::builddep' do
+describe 'apt::builddep', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
 
   context 'reset' do
     it 'removes packages' do
-      shell('apt-get -y remove glusterfs-server')
+      shell('apt-get -y remove znc')
       shell('apt-get -y remove g++')
     end
   end
@@ -13,7 +13,7 @@ describe 'apt::builddep' do
     it 'should work with no errors' do
       pp = <<-EOS
       include '::apt'
-      apt::builddep { 'glusterfs-server': }
+      apt::builddep { 'znc': }
       EOS
 
       apply_manifest(pp, :catch_failures => true)
@@ -28,7 +28,7 @@ describe 'apt::builddep' do
 
   context 'reset' do
     it 'removes packages' do
-      shell('apt-get -y remove glusterfs-server')
+      shell('apt-get -y remove znc')
       shell('apt-get -y remove g++')
     end
   end
index 36cba5eeffae5d77e0b98e69027337367e58501e..9f2ba395ad5945a81593adc1bbd5d77aecb82afd 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::key' do
+describe 'apt::key', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'apt::key' do
     it 'should work with no errors' do
       pp = <<-EOS
index c0d216107de96913cebfaae9de713df8eff30958..b665c5cf477a84a5d74590163ebe7ae1d6a0dc35 100644 (file)
@@ -1,7 +1,7 @@
 require 'spec_helper_acceptance'
 
 if fact('operatingsystem') == 'Ubuntu'
-  describe 'apt::ppa' do
+  describe 'apt::ppa', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
 
     context 'reset' do
       it 'removes ppa' do
@@ -27,14 +27,13 @@ if fact('operatingsystem') == 'Ubuntu'
       end
     end
 
-    context 'readding a removed ppa.' do
+    context 'reading a removed ppa.' do
       it 'setup' do
-        shell('add-apt-repository -y ppa:raravena80/collectd5')
         # This leaves a blank file
-        shell('add-apt-repository --remove ppa:raravena80/collectd5')
+        shell('echo > /etc/apt/sources.list.d/raravena80-collectd5-$(lsb_release -c -s).list')
       end
 
-      it 'should readd it successfully' do
+      it 'should read it successfully' do
         pp = <<-EOS
         include '::apt'
         apt::ppa { 'ppa:raravena80/collectd5': }
@@ -111,7 +110,7 @@ if fact('operatingsystem') == 'Ubuntu'
     end
 
     context 'options' do
-      context '-y' do
+      context '-y', :unless => default[:platform].match(/10\.04/) do
         it 'works without failure' do
           pp = <<-EOS
           include '::apt'
@@ -135,6 +134,5 @@ if fact('operatingsystem') == 'Ubuntu'
     context 'reset' do
       it { shell('rm -rf /etc/apt/sources.list.d/canonical-kernel-team-ppa*', :acceptable_exit_codes => [0,1,2]) }
     end
-
   end
 end
index 6b026b88c958ae918e7bf3b3ad26ccf5d2f14d91..c2d076cbff4468e8fc319918a1b943cbba97a4b5 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::source' do
+describe 'apt::source', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
 
   context 'apt::source' do
     context 'ensure => present' do
index 336161cc6d8b8a21a2baed6b732427cc9661caa7..84b7f88281c1f6b7deda07779220f194ef4f200d 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt class' do
+describe 'apt class', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
 
   context 'reset' do
     it 'fixes the sources.list' do
index 80e2093848c6114ddd5676a8bd88befb713db97e..6d3f7f0e68713dfbf7d0c682e3a25d1730f132db 100644 (file)
@@ -8,7 +8,7 @@ when 'Debian'
   repos = 'main contrib non-free'
 end
 
-describe 'apt::backports class' do
+describe 'apt::backports class', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'defaults' do
     it 'should work with no errors' do
       pp = <<-EOS
index f228e4c4565f7b8d825b52ca83a421d2c007c142..e5994498b903ffec47f075de8f17a9d157d1428a 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt class' do
+describe 'apt class', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
 
   context 'default parameters' do
     # Using puppet_apply as a helper
index 98898c274989006b03d0f8fc4fdd9753f898f531..8a8ed63db4df2579061817c5460300265e9943b0 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::conf define' do
+describe 'apt::conf define', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'defaults' do
     it 'should work with no errors' do
       pp = <<-EOS
index c364d5fe157fdb05ea4b7e2fa6ff235841e3ee8d..a43902300d7c0c1067db5660ee82396186eda631 100644 (file)
@@ -2,7 +2,7 @@ require 'spec_helper_acceptance'
 
 codename = fact('lsbdistcodename')
 
-describe 'apt::force define' do
+describe 'apt::force define', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'defaults' do
     it 'should work with no errors' do
       pp = <<-EOS
diff --git a/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml b/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml
new file mode 100644 (file)
index 0000000..c1b8bdf
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  ubuntu-server-10044-x64:
+    roles:
+      - master
+    platform: ubuntu-10.04-amd64
+    box : ubuntu-server-10044-x64-vbox4210-nocm
+    box_url : http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-10044-x64-vbox4210-nocm.box
+    hypervisor : vagrant
+CONFIG:
+  log_level: debug
+  type: git
index a38dfa4b2702d0e3e2af33b4e4e7acb35b2d4360..09a8d18ea1bf72521dd5169f8f2f110755123e30 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::pin define' do
+describe 'apt::pin define', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'defaults' do
     it 'should work with no errors' do
       pp = <<-EOS
index 81d7ca0c4d7c33eb241cfa7708f68e0b3b4126bf..e7467bf62de31707e685264cc23fb5642e372dde 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::release class' do
+describe 'apt::release class', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'release_id' do
     it 'should work with no errors' do
       pp = <<-EOS
index a0349d40d7ca303e48c4229e47ed7a0cfed64302..6a19f4e74e044c5efb5eaf352340241fabd047b1 100644 (file)
@@ -1,6 +1,6 @@
 require 'spec_helper_acceptance'
 
-describe 'apt::unattended_upgrades class' do
+describe 'apt::unattended_upgrades class', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
   context 'defaults' do
     it 'should work with no errors' do
       pp = <<-EOS
diff --git a/spec/acceptance/unsupported_spec.rb b/spec/acceptance/unsupported_spec.rb
new file mode 100644 (file)
index 0000000..08dca76
--- /dev/null
@@ -0,0 +1,10 @@
+require 'spec_helper_acceptance'
+
+describe 'unsupported distributions and OSes', :if => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do
+  it 'class apt fails' do
+    pp = <<-EOS
+      class { 'apt': }
+    EOS
+    expect(apply_manifest(pp, :expect_failures => true).stderr).to match(/unsupported/i)
+  end
+end
index 5d8a597b9088ba3df2e5be02f5b2df29cc09d4a3..0da7d32db03088751687508d60e594e4f2843619 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt', :type => :class do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let :default_params do
     {
       :disable_keys => :undef,
index 6006afb41801dbc7629ca18bb21cd0f0cc961c34..ca55ef687bd100c54cea2af8f2851ad28767471b 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::debian::testing', :type => :class do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   it {
     should contain_apt__source("debian_testing").with({
       "location"            => "http://debian.mirror.iweb.ca/debian/",
index 411182df118e25964a1c6ddf9c1e9da866f5004f..f5ed4558a755df22882842a130870d1eccc59466 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::debian::unstable', :type => :class do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   it {
     should contain_apt__source("debian_unstable").with({
       "location"          => "http://debian.mirror.iweb.ca/debian/",
index f2790b0adb25615cd525d64d6ee9ffd3f11135ff..2d3ec3c71aa8bf0e753e2565534ff9677d9267f8 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::params', :type => :class do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let (:title) { 'my_package' }
 
   it { should contain_apt__params }
index 31252b99a98048355a2401aee457e6d47bb22b6c..e43f449d62689907d63a6ea0e2a86e2414db4d1d 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::release', :type => :class do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let (:title) { 'my_package' }
 
   let :param_set do
index e83c6e4c3096d3a47c6d2c0844e353a930118188..f5cad53a5b6857f80a091e17549874206ac3ffe7 100644 (file)
@@ -2,6 +2,7 @@ require 'spec_helper'
 describe 'apt::unattended_upgrades', :type => :class do
   let(:file_unattended) { '/etc/apt/apt.conf.d/50unattended-upgrades' }
   let(:file_periodic) { '/etc/apt/apt.conf.d/10periodic' }
+  let(:facts) { { :lsbdistid => 'Debian' } }
 
   it { should contain_package("unattended-upgrades") }
 
index 4e2b698d93883b21043a0c18f9aed6e9ec9d598b..a0cbaa4cc098e80acde84a7951788d1f64d31698 100644 (file)
@@ -1,6 +1,7 @@
 require 'spec_helper'
 describe 'apt::builddep', :type => :define do
 
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let(:title) { 'my_package' }
 
   describe "should require apt-get update" do
index 5a81b5148c7d7bf489dabdef47012abe8d58a995..cda5900c035a3174aa782d8d8e34d678534b6eb5 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::conf', :type => :define do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let :title do
     'norecommends'
   end
index 84231fa233b1082f42132f618680f95e767c78a8..0d3d6e594005be5e1005c66f399d66444ed31409 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::force', :type => :define do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let :pre_condition do
     'include apt::params'
   end
index aea197a7b2baf5c4a5668bb95ebe7278d75af404..4ba7b87eae6c777896d5de3c7a67948403060d66 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::key', :type => :define do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let :title do
     '8347A27F'
   end
index 179a2f3ac5bcf48e7bfc80b67c54334f76da093b..5d3d312ed69a65208f4d9c1060dc3881a19b4a18 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::pin', :type => :define do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let(:title) { 'my_pin' }
 
   let :default_params do
@@ -12,21 +13,21 @@ describe 'apt::pin', :type => :define do
     }
   end
 
-  [ 
+  [
     { :params  => {},
       :content => "# my_pin\nExplanation: : my_pin\nPackage: *\nPin: release a=my_pin\nPin-Priority: 0\n"
     },
     {
       :params => {
-        :packages => 'apache', 
+        :packages => 'apache',
         :priority => '1'
       },
       :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=my_pin\nPin-Priority: 1\n"
     },
     {
       :params => {
-        :order    => 50, 
-        :packages => 'apache', 
+        :order    => 50,
+        :packages => 'apache',
         :priority => '1'
       },
       :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=my_pin\nPin-Priority: 1\n"
index dc1173b8970c3c88fc6cd8c01709c10dd6b5c917..0c3bd75ed779dc64c8a9807eac679c9143b4dccf 100644 (file)
@@ -1,20 +1,28 @@
 require 'spec_helper'
 describe 'apt::ppa', :type => :define do
-  [ { :lsbdistrelease => '11.04',
+  [
+    {
+      :lsbdistrelease  => '11.04',
       :lsbdistcodename => 'natty',
       :operatingsystem => 'Ubuntu',
-      :package => 'python-software-properties'},
-    { :lsbdistrelease => '12.10',
+      :lsbdistid       => 'Ubuntu',
+      :package         => 'python-software-properties'
+    },
+    {
+      :lsbdistrelease  => '12.10',
       :lsbdistcodename => 'quantal',
       :operatingsystem => 'Ubuntu',
-      :package => 'software-properties-common'},
+      :lsbdistid       => 'Ubuntu',
+      :package         => 'software-properties-common'
+    },
   ].each do |platform|
     context "on #{platform[:lsbdistcodename]}" do
       let :facts do
         {
-          :lsbdistrelease => platform[:lsbdistrelease],
+          :lsbdistrelease  => platform[:lsbdistrelease],
           :lsbdistcodename => platform[:lsbdistcodename],
           :operatingsystem => platform[:operatingsystem],
+          :lsbdistid       => platform[:lsbdistid],
         }
       end
       let :release do
@@ -125,7 +133,8 @@ describe 'apt::ppa', :type => :define do
         end
         let :facts do
           {:lsbdistcodename => '#{platform[:lsbdistcodename]}',
-           :operatingsystem => 'Ubuntu'}
+           :operatingsystem => 'Ubuntu',
+           :lsbdistid => 'Ubuntu'}
         end
         let(:title) { "ppa" }
         let(:release) { "#{platform[:lsbdistcodename]}" }
index 215d1e692f992c134c67f478f25b94e46bc2109f..9da8b235feff81e8623d255d8d2796ba7dc77454 100644 (file)
@@ -1,5 +1,6 @@
 require 'spec_helper'
 describe 'apt::source', :type => :define do
+  let(:facts) { { :lsbdistid => 'Debian' } }
   let :title do
     'my_source'
   end
@@ -59,7 +60,7 @@ describe 'apt::source', :type => :define do
       end
 
       let :facts do
-        {:lsbdistcodename => 'karmic'}
+        {:lsbdistcodename => 'karmic', :lsbdistid => 'Ubuntu'}
       end
 
       let :params do
@@ -160,7 +161,7 @@ describe 'apt::source', :type => :define do
     let(:default_params) { Hash.new }
     let(:facts) { Hash.new }
     it { expect { should raise_error(Puppet::Error) } }
-    let(:facts) { { :lsbdistcodename => 'lucid' } }
+    let(:facts) { { :lsbdistcodename => 'lucid', :lsbdistid => 'Ubuntu' } }
     it { should contain_apt__source(title) }
   end
 end
index 55c2fd4a4d957859893784cf723781278b55ba22..3352564ce7b553672fab7dafa8f277af232a065f 100644 (file)
@@ -1,18 +1,19 @@
 require 'beaker-rspec'
 
+# Install Puppet
 unless ENV['RS_PROVISION'] == 'no'
   hosts.each do |host|
-    # Install Puppet
     if host.is_pe?
       install_pe
     else
-      install_package host, 'rubygems'
-      on host, 'gem install puppet --no-ri --no-rdoc'
+      install_puppet
       on host, "mkdir -p #{host['distmoduledir']}"
     end
   end
 end
 
+UNSUPPORTED_PLATFORMS = ['RedHat','Suse','windows','AIX','Solaris']
+
 RSpec.configure do |c|
   # Project root
   proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))