A few of these fixes are absolutely horrendous but we have no choice as
we need to stay current- and future-parser compatible for now.
Once we can go Puppet 4 only we can use the `$facts` hash lookup instead
which will return undef/nil for things that aren't set instead of them
not being defined at all.
13 files changed:
- if $caller_module_name and $caller_module_name != $module_name {
+ if defined('$caller_module_name') and $caller_module_name and $caller_module_name != $module_name {
fail('apt::params is a private class and cannot be accessed directly')
}
fail('apt::params is a private class and cannot be accessed directly')
}
+ if $::osfamily != 'Debian' {
+ fail('This module only works on Debian or derivatives like Ubuntu')
+ }
+
+ $xfacts = {
+ 'lsbdistcodename' => defined('$lsbdistcodename') ? {
+ true => $::lsbdistcodename,
+ default => undef
+ },
+ }
+
$root = '/etc/apt'
$provider = '/usr/bin/apt-get'
$sources_list = "${root}/sources.list"
$root = '/etc/apt'
$provider = '/usr/bin/apt-get'
$sources_list = "${root}/sources.list"
$preferences_d = "${root}/preferences.d"
$keyserver = 'keyserver.ubuntu.com'
$preferences_d = "${root}/preferences.d"
$keyserver = 'keyserver.ubuntu.com'
- if $::osfamily != 'Debian' {
- fail('This module only works on Debian or derivatives like Ubuntu')
- }
-
$config_files = {
'conf' => {
'path' => $conf_d,
$config_files = {
'conf' => {
'path' => $conf_d,
case $::lsbdistid {
'ubuntu', 'debian': {
$distid = $::lsbdistid
case $::lsbdistid {
'ubuntu', 'debian': {
$distid = $::lsbdistid
- $distcodename = $::lsbdistcodename
+ $distcodename = $xfacts['lsbdistcodename']
}
'linuxmint': {
if $::lsbdistcodename == 'debian' {
}
'linuxmint': {
if $::lsbdistcodename == 'debian' {
+ '', default: {
+ $ppa_options = undef
+ $ppa_package = undef
+ }
define apt::pin(
$ensure = present,
define apt::pin(
$ensure = present,
- $explanation = "${caller_module_name}: ${name}",
$order = undef,
$packages = '*',
$priority = 0,
$order = undef,
$packages = '*',
$priority = 0,
fail('Only integers are allowed in the apt::pin order param')
}
fail('Only integers are allowed in the apt::pin order param')
}
+ if $explanation {
+ $_explanation = $explanation
+ } else {
+ if defined('$caller_module_name') { # strict vars check
+ $_explanation = "${caller_module_name}: ${name}"
+ } else {
+ $_explanation = ": ${name}"
+ }
+ }
+
$pin_release_array = [
$release,
$codename,
$pin_release_array = [
$release,
$codename,
# ppa.pp
define apt::ppa(
$ensure = 'present',
# ppa.pp
define apt::ppa(
$ensure = 'present',
- $release = $::lsbdistcodename,
$options = $::apt::ppa_options,
$options = $::apt::ppa_options,
+ $release = $::apt::xfacts['lsbdistcodename'],
$package_name = $::apt::ppa_package,
$package_manage = false,
) {
$package_name = $::apt::ppa_package,
$package_manage = false,
) {
fail('lsbdistcodename fact not available: release parameter required')
}
fail('lsbdistcodename fact not available: release parameter required')
}
# source.pp
# add an apt source
define apt::source(
# source.pp
# add an apt source
define apt::source(
- $comment = $name,
- $ensure = present,
- $location = '',
- $release = $::lsbdistcodename,
- $repos = 'main',
- $include_src = false,
- $include_deb = true,
- $key = undef,
- $pin = false,
- $architecture = undef,
- $trusted_source = false,
+ $comment = $name,
+ $ensure = present,
+ $location = '',
+ $release = $::apt::xfacts['lsbdistcodename'],
+ $repos = 'main',
+ $include_src = false,
+ $include_deb = true,
+ $key = undef,
+ $pin = false,
+ $architecture = undef,
+ $trusted_source = false,
- validate_string($architecture, $comment, $location, $release, $repos)
+ validate_string($architecture, $comment, $location, $repos)
validate_bool($trusted_source, $include_src, $include_deb)
validate_bool($trusted_source, $include_src, $include_deb)
fail('lsbdistcodename fact not available: release parameter required')
}
fail('lsbdistcodename fact not available: release parameter required')
}
$_key = merge($::apt::source_key_defaults, $key)
} else {
validate_string($key)
$_key = merge($::apt::source_key_defaults, $key)
} else {
validate_string($key)
before => $_before,
}
} else {
before => $_before,
}
} else {
- apt::key { "Add key: ${key} from Apt::Source ${title}":
+ apt::key { "Add key: ${_key} from Apt::Source ${title}":
require 'spec_helper'
describe 'apt' do
require 'spec_helper'
describe 'apt' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy'} }
context 'defaults' do
it { is_expected.to contain_file('sources.list').that_notifies('Exec[apt_update]').only_with({
context 'defaults' do
it { is_expected.to contain_file('sources.list').that_notifies('Exec[apt_update]').only_with({
describe 'apt::update', :type => :class do
context "when update['always']=true" do
#This should completely disable all of this logic. These tests are to guarantee that we don't somehow magically change the behavior.
describe 'apt::update', :type => :class do
context "when update['always']=true" do
#This should completely disable all of this logic. These tests are to guarantee that we don't somehow magically change the behavior.
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{'::apt': update => {'always' => true},}" }
it 'should trigger an apt-get update run' do
#set the apt_update exec's refreshonly attribute to false
let (:pre_condition) { "class{'::apt': update => {'always' => true},}" }
it 'should trigger an apt-get update run' do
#set the apt_update exec's refreshonly attribute to false
context "when apt::update['frequency'] has the value of #{update_frequency}" do
{ 'a recent run' => Time.now.to_i, 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
context "when apt::update['frequency'] has the value of #{update_frequency}" do
{ 'a recent run' => Time.now.to_i, 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval, :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{'::apt': update => {'always' => true, 'frequency' => '#{update_frequency}'}, }" }
it 'should trigger an apt-get update run' do
# set the apt_update exec's refreshonly attribute to false
let (:pre_condition) { "class{'::apt': update => {'always' => true, 'frequency' => '#{update_frequency}'}, }" }
it 'should trigger an apt-get update run' do
# set the apt_update exec's refreshonly attribute to false
end
end
context 'when $::apt_update_last_success is nil' do
end
end
context 'when $::apt_update_last_success is nil' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{'::apt': update => {'always' => true, 'frequency' => '#{update_frequency}'}, }" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
let (:pre_condition) { "class{'::apt': update => {'always' => true, 'frequency' => '#{update_frequency}'}, }" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
context "and apt::update['frequency']='always'" do
{ 'a recent run' => Time.now.to_i, 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
context "and apt::update['frequency']='always'" do
{ 'a recent run' => Time.now.to_i, 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval, :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{'::apt': update => {'always' => false, 'frequency' => 'always' },}" }
it 'should trigger an apt-get update run' do
#set the apt_update exec's refreshonly attribute to false
let (:pre_condition) { "class{'::apt': update => {'always' => false, 'frequency' => 'always' },}" }
it 'should trigger an apt-get update run' do
#set the apt_update exec's refreshonly attribute to false
end
end
context 'when $::apt_update_last_success is nil' do
end
end
context 'when $::apt_update_last_success is nil' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => 'always' },}" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => 'always' },}" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
context "and apt::update['frequency']='reluctantly'" do
{'a recent run' => Time.now.to_i, 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
context "and apt::update['frequency']='reluctantly'" do
{'a recent run' => Time.now.to_i, 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval} }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval, :lsbdistcodename => 'wheezy'} }
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => 'reluctantly' },}" }
it 'should not trigger an apt-get update run' do
#don't change the apt_update exec's refreshonly attribute. (it should be true)
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => 'reluctantly' },}" }
it 'should not trigger an apt-get update run' do
#don't change the apt_update exec's refreshonly attribute. (it should be true)
end
end
context 'when $::apt_update_last_success is nil' do
end
end
context 'when $::apt_update_last_success is nil' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => 'reluctantly' },}" }
it 'should not trigger an apt-get update run' do
#don't change the apt_update exec's refreshonly attribute. (it should be true)
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => 'reluctantly' },}" }
it 'should not trigger an apt-get update run' do
#don't change the apt_update exec's refreshonly attribute. (it should be true)
context "and apt::update['frequency'] has the value of #{update_frequency}" do
{ 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
context "and apt::update['frequency'] has the value of #{update_frequency}" do
{ 'we are due for a run' => 1406660561,'the update-success-stamp file does not exist' => -1 }.each_pair do |desc, factval|
context "and $::apt_update_last_success indicates #{desc}" do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => factval, :lsbdistcodename => 'wheezy' } }
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => '#{update_frequency}',} }" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => '#{update_frequency}',} }" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
end
end
context 'when the $::apt_update_last_success fact has a recent value' do
end
end
context 'when the $::apt_update_last_success fact has a recent value' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :apt_update_last_success => Time.now.to_i } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy', :apt_update_last_success => Time.now.to_i } }
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => '#{update_frequency}',} }" }
it 'should not trigger an apt-get update run' do
#don't change the apt_update exec\'s refreshonly attribute. (it should be true)
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => '#{update_frequency}',} }" }
it 'should not trigger an apt-get update run' do
#don't change the apt_update exec\'s refreshonly attribute. (it should be true)
end
end
context 'when $::apt_update_last_success is nil' do
end
end
context 'when $::apt_update_last_success is nil' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy', :apt_update_last_success => nil } }
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => '#{update_frequency}',} }" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
let (:pre_condition) { "class{ '::apt': update => {'always' => false, 'frequency' => '#{update_frequency}',} }" }
it 'should trigger an apt-get update run' do
#set the apt_update exec\'s refreshonly attribute to false
require 'spec_helper'
describe 'apt::params', :type => :class do
require 'spec_helper'
describe 'apt::params', :type => :class do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let (:title) { 'my_package' }
it { is_expected.to contain_apt__params }
let (:title) { 'my_package' }
it { is_expected.to contain_apt__params }
let :pre_condition do
'class { "apt": }'
end
let :pre_condition do
'class { "apt": }'
end
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let :title do
'norecommends'
end
let :title do
'norecommends'
end
require 'spec_helper'
describe 'apt::key' do
require 'spec_helper'
describe 'apt::key' do
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let :pre_condition do
+ 'class { "apt": }'
+ end
+
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
+
GPG_KEY_ID = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
let :title do
GPG_KEY_ID = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
let :title do
:id => title,
:ensure => 'present',
:source => nil,
:id => title,
:ensure => 'present',
:source => nil,
+ :server => 'keyserver.ubuntu.com',
:content => nil,
:options => nil,
})
:content => nil,
:options => nil,
})
:id => GPG_KEY_ID,
:ensure => 'present',
:source => nil,
:id => GPG_KEY_ID,
:ensure => 'present',
:source => nil,
+ :server => 'keyserver.ubuntu.com',
:content => nil,
:options => nil,
})
:content => nil,
:options => nil,
})
:id => title,
:ensure => 'absent',
:source => nil,
:id => title,
:ensure => 'absent',
:source => nil,
+ :server => 'keyserver.ubuntu.com',
:content => nil,
:keyserver => nil,
})
:content => nil,
:keyserver => nil,
})
describe 'duplication' do
context 'two apt::key resources for same key, different titles' do
let :pre_condition do
describe 'duplication' do
context 'two apt::key resources for same key, different titles' do
let :pre_condition do
- "apt::key { 'duplicate': id => '#{title}', }"
+ "class { 'apt': }
+ apt::key { 'duplicate': id => '#{title}', }"
end
it 'contains two apt::key resources' do
end
it 'contains two apt::key resources' do
:id => title,
:ensure => 'present',
:source => nil,
:id => title,
:ensure => 'present',
:source => nil,
+ :server => 'keyserver.ubuntu.com',
:content => nil,
:options => nil,
})
:content => nil,
:options => nil,
})
context 'two apt::key resources, different ensure' do
let :pre_condition do
context 'two apt::key resources, different ensure' do
let :pre_condition do
- "apt::key { 'duplicate': id => '#{title}', ensure => 'absent', }"
+ "class { 'apt': }
+ apt::key { 'duplicate': id => '#{title}', ensure => 'absent', }"
end
it 'informs the user of the impossibility' do
expect { subject }.to raise_error(/already ensured as absent/)
end
it 'informs the user of the impossibility' do
expect { subject }.to raise_error(/already ensured as absent/)
let :pre_condition do
'class { "apt": }'
end
let :pre_condition do
'class { "apt": }'
end
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let(:title) { 'my_pin' }
context 'defaults' do
let(:title) { 'my_pin' }
context 'defaults' do
require 'spec_helper'
describe 'apt::ppa' do
require 'spec_helper'
describe 'apt::ppa' do
+ let :pre_condition do
+ 'class { "apt": }'
+ end
- let :pre_condition do
- 'class { "apt": }'
- end
let :facts do
{
:lsbdistrelease => '11.04',
let :facts do
{
:lsbdistrelease => '11.04',
:operatingsystem => 'Ubuntu',
:lsbdistid => 'Ubuntu',
:osfamily => 'Debian',
:operatingsystem => 'Ubuntu',
:lsbdistid => 'Ubuntu',
:osfamily => 'Debian',
+ :lsbdistcodeanme => nil,
}
end
let(:title) { 'ppa:foo' }
}
end
let(:title) { 'ppa:foo' }
describe 'not ubuntu' do
let :facts do
{
describe 'not ubuntu' do
let :facts do
{
- :lsbdistrelease => '14.04',
- :lsbdistcodename => 'trusty',
+ :lsbdistrelease => '6.0.7',
+ :lsbdistcodename => 'wheezy',
:operatingsystem => 'Debian',
:operatingsystem => 'Debian',
- :lsbdistid => 'Ubuntu',
+ :lsbdistid => 'debian',
:osfamily => 'Debian',
}
end
:osfamily => 'Debian',
}
end
describe 'apt::setting' do
let(:pre_condition) { 'class { "apt": }' }
describe 'apt::setting' do
let(:pre_condition) { 'class { "apt": }' }
- let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
+ let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian', :lsbdistcodename => 'wheezy' } }
let(:title) { 'conf-teddybear' }
let(:default_params) { { :content => 'di' } }
let(:title) { 'conf-teddybear' }
let(:default_params) { { :content => 'di' } }
@pin = "origin #{@origin}"
end
-%>
@pin = "origin #{@origin}"
end
-%>
-Explanation: <%= @explanation %>
+Explanation: <%= @_explanation %>
Package: <%= @packages_string %>
Pin: <%= @pin %>
Pin-Priority: <%= @priority %>
Package: <%= @packages_string %>
Pin: <%= @pin %>
Pin-Priority: <%= @priority %>