-*.swp
pkg/
Gemfile.lock
-spec/fixtures/manifests
+vendor/
+spec/fixtures/
+.vagrant/
+.bundle/
+coverage/
---
-branches:
- only:
- - master
language: ruby
bundler_args: --without development
-script: bundle exec rake spec SPEC_OPTS='--format documentation'
-rvm:
- - 1.8.7
- - 1.9.3
- - 2.0.0
-env:
- matrix:
- - PUPPET_GEM_VERSION="~> 3.4.0"
- - PUPPET_GEM_VERSION="~> 3.5.0"
+script: "bundle exec rake spec SPEC_OPTS='--format documentation'"
matrix:
fast_finish: true
+ include:
+ - rvm: 1.8.7
+ env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.6.0"
+ - rvm: 1.8.7
+ env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.7.0"
+ - rvm: 1.9.3
+ env: PUPPET_GEM_VERSION="~> 3.0"
+ - rvm: 2.0.0
+ env: PUPPET_GEM_VERSION="~> 3.0"
notifications:
email: false
--- /dev/null
+Checklist (and a short version for the impatient)
+=================================================
+
+ * Commits:
+
+ - Make commits of logical units.
+
+ - Check for unnecessary whitespace with "git diff --check" before
+ committing.
+
+ - Commit using Unix line endings (check the settings around "crlf" in
+ git-config(1)).
+
+ - Do not check in commented out code or unneeded files.
+
+ - The first line of the commit message should be a short
+ description (50 characters is the soft limit, excluding ticket
+ number(s)), and should skip the full stop.
+
+ - Associate the issue in the message. The first line should include
+ the issue number in the form "(#XXXX) Rest of message".
+
+ - The body should provide a meaningful commit message, which:
+
+ - uses the imperative, present tense: "change", not "changed" or
+ "changes".
+
+ - includes motivation for the change, and contrasts its
+ implementation with the previous behavior.
+
+ - Make sure that you have tests for the bug you are fixing, or
+ feature you are adding.
+
+ - Make sure the test suites passes after your commit:
+ `bundle exec rspec spec/acceptance` More information on [testing](#Testing) below
+
+ - When introducing a new feature, make sure it is properly
+ documented in the README.md
+
+ * Submission:
+
+ * Pre-requisites:
+
+ - Sign the [Contributor License Agreement](https://cla.puppetlabs.com/)
+
+ - Make sure you have a [GitHub account](https://github.com/join)
+
+ - [Create a ticket](http://projects.puppetlabs.com/projects/modules/issues/new), or [watch the ticket](http://projects.puppetlabs.com/projects/modules/issues) you are patching for.
+
+ * Preferred method:
+
+ - Fork the repository on GitHub.
+
+ - Push your changes to a topic branch in your fork of the
+ repository. (the format ticket/1234-short_description_of_change is
+ usually preferred for this project).
+
+ - Submit a pull request to the repository in the puppetlabs
+ organization.
+
+The long version
+================
+
+ 1. Make separate commits for logically separate changes.
+
+ Please break your commits down into logically consistent units
+ which include new or changed tests relevant to the rest of the
+ change. The goal of doing this is to make the diff easier to
+ read for whoever is reviewing your code. In general, the easier
+ your diff is to read, the more likely someone will be happy to
+ review it and get it into the code base.
+
+ If you are going to refactor a piece of code, please do so as a
+ separate commit from your feature or bug fix changes.
+
+ We also really appreciate changes that include tests to make
+ sure the bug is not re-introduced, and that the feature is not
+ accidentally broken.
+
+ Describe the technical detail of the change(s). If your
+ description starts to get too long, that is a good sign that you
+ probably need to split up your commit into more finely grained
+ pieces.
+
+ Commits which plainly describe the things which help
+ reviewers check the patch and future developers understand the
+ code are much more likely to be merged in with a minimum of
+ bike-shedding or requested changes. Ideally, the commit message
+ would include information, and be in a form suitable for
+ inclusion in the release notes for the version of Puppet that
+ includes them.
+
+ Please also check that you are not introducing any trailing
+ whitespace or other "whitespace errors". You can do this by
+ running "git diff --check" on your changes before you commit.
+
+ 2. Sign the Contributor License Agreement
+
+ Before we can accept your changes, we do need a signed Puppet
+ Labs Contributor License Agreement (CLA).
+
+ You can access the CLA via the [Contributor License Agreement link](https://cla.puppetlabs.com/)
+
+ If you have any questions about the CLA, please feel free to
+ contact Puppet Labs via email at cla-submissions@puppetlabs.com.
+
+ 3. Sending your patches
+
+ To submit your changes via a GitHub pull request, we _highly_
+ recommend that you have them on a topic branch, instead of
+ directly on "master".
+ It makes things much easier to keep track of, especially if
+ you decide to work on another thing before your first change
+ is merged in.
+
+ GitHub has some pretty good
+ [general documentation](http://help.github.com/) on using
+ their site. They also have documentation on
+ [creating pull requests](http://help.github.com/send-pull-requests/).
+
+ In general, after pushing your topic branch up to your
+ repository on GitHub, you can switch to the branch in the
+ GitHub UI and click "Pull Request" towards the top of the page
+ in order to open a pull request.
+
+
+ 4. Update the related GitHub issue.
+
+ If there is a GitHub issue associated with the change you
+ submitted, then you should update the ticket to include the
+ location of your branch, along with any other commentary you
+ may wish to make.
+
+Testing
+=======
+
+Getting Started
+---------------
+
+Our puppet modules provide [`Gemfile`](./Gemfile)s which can tell a ruby
+package manager such as [bundler](http://bundler.io/) what Ruby packages,
+or Gems, are required to build, develop, and test this software.
+
+Please make sure you have [bundler installed](http://bundler.io/#getting-started)
+on your system, then use it to install all dependencies needed for this project,
+by running
+
+```shell
+% bundle install
+Fetching gem metadata from https://rubygems.org/........
+Fetching gem metadata from https://rubygems.org/..
+Using rake (10.1.0)
+Using builder (3.2.2)
+-- 8><-- many more --><8 --
+Using rspec-system-puppet (2.2.0)
+Using serverspec (0.6.3)
+Using rspec-system-serverspec (1.0.0)
+Using bundler (1.3.5)
+Your bundle is complete!
+Use `bundle show [gemname]` to see where a bundled gem is installed.
+```
+
+NOTE some systems may require you to run this command with sudo.
+
+If you already have those gems installed, make sure they are up-to-date:
+
+```shell
+% bundle update
+```
+
+With all dependencies in place and up-to-date we can now run the tests:
+
+```shell
+% rake spec
+```
+
+This will execute all the [rspec tests](http://rspec-puppet.com/) tests
+under [spec/defines](./spec/defines), [spec/classes](./spec/classes),
+and so on. rspec tests may have the same kind of dependencies as the
+module they are testing. While the module defines in its [Modulefile](./Modulefile),
+rspec tests define them in [.fixtures.yml](./fixtures.yml).
+
+Some puppet modules also come with [beaker](https://github.com/puppetlabs/beaker)
+tests. These tests spin up a virtual machine under
+[VirtualBox](https://www.virtualbox.org/)) with, controlling it with
+[Vagrant](http://www.vagrantup.com/) to actually simulate scripted test
+scenarios. In order to run these, you will need both of those tools
+installed on your system.
+
+You can run them by issuing the following command
+
+```shell
+% rake spec_clean
+% rspec spec/acceptance
+```
+
+This will now download a pre-fabricated image configured in the [default node-set](./spec/acceptance/nodesets/default.yml),
+install puppet, copy this module and install its dependencies per [spec/spec_helper_acceptance.rb](./spec/spec_helper_acceptance.rb)
+and then run all the tests under [spec/acceptance](./spec/acceptance).
+
+Writing Tests
+-------------
+
+XXX getting started writing tests.
+
+If you have commit access to the repository
+===========================================
+
+Even if you have commit access to the repository, you will still need to
+go through the process above, and have someone else review and merge
+in your changes. The rule is that all changes must be reviewed by a
+developer on the project (that did not write the code) to ensure that
+all changes go through a code review process.
+
+Having someone other than the author of the topic branch recorded as
+performing the merge is the record that they performed the code
+review.
+
+
+Additional Resources
+====================
+
+* [Getting additional help](http://projects.puppetlabs.com/projects/puppet/wiki/Getting_Help)
+
+* [Writing tests](http://projects.puppetlabs.com/projects/puppet/wiki/Development_Writing_Tests)
+
+* [Patchwork](https://patchwork.puppetlabs.com)
+
+* [Contributor License Agreement](https://projects.puppetlabs.com/contributor_licenses/sign)
+
+* [General GitHub documentation](http://help.github.com/)
+
+* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
+
-source ENV['GEM_SOURCE'] || 'https://rubygems.org'
+source ENV['GEM_SOURCE'] || "https://rubygems.org"
group :development, :test do
- gem 'rake', '10.1.1', :require => false
- gem 'rspec', '~> 2.11', :require => false
- gem 'pry', :require => false
+ gem 'rake', :require => false
gem 'rspec-puppet', :require => false
- gem 'puppet-lint', :require => false
gem 'puppetlabs_spec_helper', :require => false
gem 'serverspec', :require => false
+ gem 'puppet-lint', :require => false
gem 'beaker', :require => false
gem 'beaker-rspec', :require => false
+ gem 'pry', :require => false
+ gem 'simplecov', :require => false
+end
+
+if facterversion = ENV['FACTER_GEM_VERSION']
+ gem 'facter', facterversion, :require => false
+else
+ gem 'facter', :require => false
end
if puppetversion = ENV['PUPPET_GEM_VERSION']
else
gem 'puppet', :require => false
end
+
+# vim:ft=ruby
purge_sources_list => false,
purge_sources_list_d => false,
purge_preferences_d => false,
- update_timeout => undef
+ update_timeout => undef,
+ fancy_progress => undef
}
Puppet will manage your system's `sources.list` file and `sources.list.d` directory but will do its best to respect existing content.
Adds an apt source to `/etc/apt/sources.list.d/`.
apt::source { 'debian_unstable':
+ comment => 'This is the iWeb Debian unstable mirror',
location => 'http://debian.mirror.iweb.ca/debian/',
release => 'unstable',
repos => 'main contrib non-free',
key_server => 'pgp.mit.edu',
}
+### Facts
+
+There are a few facts included within the apt module describing the state of the apt system:
+
+* `apt_updates` - the number of updates available on the system
+* `apt_security_updates` - the number of updates which are security updates
+* `apt_package_updates` - the package names that are available for update. On Facter 2.0 and newer this will be a list type, in earlier versions it is a comma delimitered string.
#### Hiera example
<pre>
--- /dev/null
+Facter.add("apt_package_updates") do
+ confine :osfamily => 'Debian'
+ setcode do
+ if File.executable?("/usr/lib/update-notifier/apt-check")
+ packages = Facter::Util::Resolution.exec('/usr/lib/update-notifier/apt-check -p 2>&1')
+ packages = packages.split("\n")
+ if Facter.version < '2.0.0'
+ packages = packages.join(',')
+ end
+ packages
+ end
+ end
+end
--- /dev/null
+Facter.add("apt_security_updates") do
+ confine :osfamily => 'Debian'
+ setcode do
+ if File.executable?("/usr/lib/update-notifier/apt-check")
+ updates = Facter::Util::Resolution.exec('/usr/lib/update-notifier/apt-check 2>&1')
+ Integer(updates.strip.split(';')[1])
+ end
+ end
+end
--- /dev/null
+Facter.add("apt_updates") do
+ confine :osfamily => 'Debian'
+ setcode do
+ if File.executable?("/usr/lib/update-notifier/apt-check")
+ updates = Facter::Util::Resolution.exec('/usr/lib/update-notifier/apt-check 2>&1')
+ Integer(updates.strip.split(';')[0])
+ end
+ end
+end
commands :apt_key => 'apt-key'
def self.instances
+ if RUBY_VERSION > '1.8.7'
+ key_output = apt_key('list').encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')
+ else
+ key_output = apt_key('list')
+ end
key_array = apt_key('list').split("\n").collect do |line|
line_hash = key_line_hash(line)
next unless line_hash
end
newparam(:server) do
- desc 'The key server to fetch the key from based on the ID.'
+ desc 'The key server to fetch the key from based on the ID. It can either be a domain name or url.'
defaultto :'keyserver.ubuntu.com'
- # Need to validate this, preferably through stdlib is_fqdn
- # but still working on getting to that.
+
+ newvalues(/\A((hkp|http|https):\/\/)?([a-z\d])([a-z\d-]{0,61}\.)+[a-z\d]+(:\d{2,4})?$/)
end
newparam(:keyserver_options) do
$purge_preferences_d = false,
$update_timeout = undef,
$update_tries = undef,
- $sources = undef
+ $sources = undef,
+ $fancy_progress = undef
) {
if $::osfamily != 'Debian' {
recurse => $purge_preferences_d,
}
+ case $fancy_progress {
+ true: {
+ file { '99progressbar':
+ ensure => present,
+ content => 'Dpkg::Progress-Fancy "1";',
+ path => "${apt_conf_d}/99progressbar",
+ }
+ }
+ false: {
+ file { '99progressbar':
+ ensure => absent,
+ path => "${apt_conf_d}/99progressbar",
+ }
+ }
+ undef: {} # do nothing
+ default: { fail('Valid values for fancy_progress are true or false') }
+ }
+
case $disable_keys {
true: {
file { '99unauth':
# [*key_server*]
# _default_: +undef+
#
-# The keyserver from where to fetch our GPG key. It defaults to
+# The keyserver from where to fetch our GPG key. It can either be a domain
+# name or url. It defaults to
# undef which results in apt_key's default keyserver being used,
# currently +keyserver.ubuntu.com+.
#
}
if $key_server {
- if !is_domain_name($key_server) {
- fail('$key_server must be a valid domain name')
- }
+ validate_re($key_server,['\A((hkp|http|https):\/\/)?([a-z\d])([a-z\d-]{0,61}\.)+[a-z\d]+(:\d{2,4})?$'])
}
if $key_options {
$backports_location = 'http://backports.debian.org/debian-backports'
$legacy_origin = true
$origins = ['${distro_id} oldstable',
- '${distro_id} ${distro_codename}-security']
+ '${distro_id} ${distro_codename}-security',
+ '${distro_id} ${distro_codename}-lts']
}
'wheezy': {
$backports_location = 'http://ftp.debian.org/debian/'
}
- $path = $order ? {
- '' => "${preferences_d}/${name}.pref",
- default => "${preferences_d}/${order}-${name}.pref",
- }
# According to man 5 apt_preferences:
# The files have either no or "pref" as filename extension
# be silently ignored.
$file_name = regsubst($title, '[^0-9a-z\-_\.]', '_', 'IG')
+ $path = $order ? {
+ '' => "${preferences_d}/${file_name}.pref",
+ default => "${preferences_d}/${order}-${file_name}.pref",
+ }
file { "${file_name}.pref":
ensure => $ensure,
path => $path,
# add an apt source
define apt::source(
+ $comment = $name,
$ensure = present,
$location = '',
$release = 'UNDEF',
end
end
+ context 'hkp://pgp.mit.edu:80' do
+ it 'works' do
+ pp = <<-EOS
+ apt_key { 'puppetlabs':
+ id => '#{PUPPETLABS_GPG_KEY_ID}',
+ ensure => 'present',
+ server => 'hkp://pgp.mit.edu:80',
+ }
+ EOS
+
+ apply_manifest(pp, :catch_failures => true)
+ expect(apply_manifest(pp, :catch_failures => true).exit_code).to be_zero
+ shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
+ end
+ end
+
context 'nonexistant.key.server' do
it 'fails' do
pp = <<-EOS
end
end
end
+
+ context 'key server start with dot' do
+ it 'fails' do
+ pp = <<-EOS
+ apt_key { 'puppetlabs':
+ id => '#{PUPPETLABS_GPG_KEY_ID}',
+ ensure => 'present',
+ server => '.pgp.key.server',
+ }
+ EOS
+
+ apply_manifest(pp, :expect_failures => true) do |r|
+ expect(r.stderr).to match(/Invalid value \".pgp.key.server\"/)
+ end
+ end
+ end
end
describe 'source =>' do
end
end
+ context 'fancy_progress => true' do
+ it 'should work with no errors' do
+ pp = <<-EOS
+ class { 'apt': fancy_progress => true }
+ EOS
+
+ apply_manifest(pp, :catch_failures => true)
+ end
+
+ describe file('/etc/apt/apt.conf.d/99progressbar') do
+ it { should be_file }
+ it { should contain 'Dpkg::Progress-Fancy "1";' }
+ end
+ end
+ context 'fancy_progress => false' do
+ it 'should work with no errors' do
+ pp = <<-EOS
+ class { 'apt': fancy_progress => false }
+ EOS
+
+ apply_manifest(pp, :catch_failures => true)
+ end
+
+ describe file('/etc/apt/apt.conf.d/99progressbar') do
+ it { should_not be_file }
+ end
+ end
+
context 'reset' do
it 'fixes the sources.list' do
shell('cp /tmp/sources.list /etc/apt')
--- /dev/null
+HOSTS:
+ centos-59-x64:
+ roles:
+ - master
+ platform: el-5-x86_64
+ box : centos-59-x64-vbox4210-nocm
+ box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box
+ hypervisor : vagrant
+CONFIG:
+ type: git
--- /dev/null
+HOSTS:
+ centos-64-x64:
+ roles:
+ - master
+ - database
+ - dashboard
+ platform: el-6-x86_64
+ box : centos-64-x64-vbox4210-nocm
+ box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box
+ hypervisor : vagrant
+CONFIG:
+ type: pe
--- /dev/null
+HOSTS:
+ centos-65-x64:
+ roles:
+ - master
+ platform: el-6-x86_64
+ box : centos-65-x64-vbox436-nocm
+ box_url : http://puppet-vagrant-boxes.puppetlabs.com/centos-65-x64-virtualbox-nocm.box
+ hypervisor : vagrant
+CONFIG:
+ type: foss
box_url : http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-10044-x64-vbox4210-nocm.box
hypervisor : vagrant
CONFIG:
- log_level: debug
- type: git
+ type: foss
ubuntu-server-12042-x64:
roles:
- master
- platform: ubuntu-server-12.04-amd64
+ platform: ubuntu-12.04-amd64
box : ubuntu-server-12042-x64-vbox4210-nocm
box_url : http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box
hypervisor : vagrant
it {
should contain_file(file_unattended).with_content(
/^Unattended-Upgrade::Allowed-Origins/
+ ).with_content(
+ /"\${distro_id} \${distro_codename}-lts";/
).with_content(
/"\${distro_id} \${distro_codename}-security";/
).with_content(
end
describe 'key_server =>' do
- let :params do {
- :key_server => 'pgp.mit.edu',
- } end
+ context 'domain name' do
+ let :params do {
+ :key_server => 'pgp.mit.edu',
+ } end
- it 'contains the apt::key' do
- should contain_apt__key(title).with({
- :key => title,
- :ensure => 'present',
- :key_server => 'pgp.mit.edu',
- })
+ it 'contains the apt::key' do
+ should contain_apt__key(title).with({
+ :key => title,
+ :ensure => 'present',
+ :key_server => 'pgp.mit.edu',
+ })
+ end
+ it 'contains the apt_key' do
+ should contain_apt_key(title).with({
+ :id => title,
+ :ensure => 'present',
+ :source => nil,
+ :server => params[:key_server],
+ :content => nil,
+ :keyserver_options => nil,
+ })
+ end
+ it 'contains the apt_key present anchor' do
+ should contain_anchor("apt_key #{title} present")
+ end
+ end
+
+ context "domain with dash" do
+ let(:params) do{
+ :key_server => 'p-gp.m-it.edu',
+ } end
+ it "should contain apt::key" do
+ should contain_apt__key(title).with({
+ :key => title,
+ :ensure => 'present',
+ :key_server => 'p-gp.m-it.edu',
+ })
+ end
end
- it 'contains the apt_key' do
- should contain_apt_key(title).with({
- :id => title,
- :ensure => 'present',
- :source => nil,
- :server => params[:key_server],
- :content => nil,
- :keyserver_options => nil,
- })
+
+ context "domain begin with dash" do
+ let(:params) do{
+ :key_server => '-pgp.mit.edu',
+ } end
+ it 'fails' do
+ expect { subject } .to raise_error(/does not match/)
+ end
end
- it 'contains the apt_key present anchor' do
- should contain_anchor("apt_key #{title} present")
+
+ context "domain begin with dot" do
+ let(:params) do{
+ :key_server => '.pgp.mit.edu',
+ } end
+ it 'fails' do
+ expect { subject } .to raise_error(/does not match/)
+ end
end
- end
+
+ context "domain end with dot" do
+ let(:params) do{
+ :key_server => "pgp.mit.edu.",
+ } end
+ it 'fails' do
+ expect { subject } .to raise_error(/does not match/)
+ end
+ end
+
+ context "url" do
+ let (:params) do{
+ :key_server => 'hkp://pgp.mit.edu',
+ } end
+ it "should contain apt::key" do
+ should contain_apt__key(title).with({
+ :key => title,
+ :ensure => 'present',
+ :key_server => 'hkp://pgp.mit.edu',
+ })
+ end
+ end
+ context "url with port number" do
+ let (:params) do{
+ :key_server => 'hkp://pgp.mit.edu:80',
+ } end
+ it "should contain apt::key" do
+ should contain_apt__key(title).with({
+ :key => title,
+ :ensure => 'present',
+ :key_server => 'hkp://pgp.mit.edu:80',
+ })
+ end
+ end
+
+ context "incorrect port number url" do
+ let (:params) do{
+ :key_server => 'hkp://pgp.mit.edu:8008080'
+ } end
+ it 'fails' do
+ expect { subject }.to raise_error(/does not match/)
+ end
+ end
+ context "incorrect protocol for url" do
+ let (:params) do{
+ :key_server => 'abc://pgp.mit.edu:80'
+ } end
+ it 'fails' do
+ expect { subject }.to raise_error(/does not match/)
+ end
+ end
+ context "missing port number url" do
+ let (:params) do{
+ :key_server => 'hkp://pgp.mit.edu:'
+ } end
+ it 'fails' do
+ expect { subject }.to raise_error(/does not match/)
+ end
+ end
+ context "url ending with a dot" do
+ let (:params) do{
+ :key_server => 'hkp://pgp.mit.edu.'
+ } end
+ it 'fails' do
+ expect { subject }.to raise_error(/does not match/)
+ end
+ end
+ context "url begin with a dash" do
+ let(:params) do{
+ :key_server => "hkp://-pgp.mit.edu",
+ } end
+ it 'fails' do
+ expect { subject }.to raise_error(/does not match/)
+ end
+ end
+ context "url with dash" do
+ let(:params) do{
+ :key_server => 'hkp://p-gp.m-it.edu',
+ } end
+ it "should contain apt::key" do
+ should contain_apt__key(title).with({
+ :key => title,
+ :ensure => 'present',
+ :key_server => 'hkp://p-gp.m-it.edu',
+ })
+ end
+ end
+ context "exceed characher url" do
+ let (:params) do{
+ :key_server => 'hkp://pgpiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.mit.edu'
+ } end
+ it 'fails' do
+ expect { subject }.to raise_error(/does not match/)
+ end
+ end
+ end
describe 'key_options =>' do
let :params do {
:key_server => 'two bottles of rum',
} end
it 'fails' do
- expect { subject }.to raise_error(/must be a valid domain name/)
+ expect { subject }.to raise_error(/does not match/)
end
end
end
let :content do
- content = "# #{title}"
+ content = "#file generated by puppet\n"
+ if param_hash[:comment]
+ content << "# #{comment}"
+ else
+ content << "# #{title}"
+ end
if param_hash[:architecture]
arch = "[arch=#{param_hash[:architecture]}] "
end
--- /dev/null
+--format
+s
+--colour
+--loadby
+mtime
+--backtrace
--- /dev/null
+require 'spec_helper'
+
+describe 'apt_package_updates fact' do
+ subject { Facter.fact(:apt_package_updates).value }
+ after(:each) { Facter.clear }
+
+ describe 'on Debian based distro missing update-notifier-common' do
+ before {
+ Facter.fact(:osfamily).stubs(:value).returns 'Debian'
+ File.stubs(:executable?).returns false
+ }
+ it { should == nil }
+ end
+
+ describe 'on Debian based distro' do
+ before {
+ Facter.fact(:osfamily).stubs(:value).returns 'Debian'
+ File.stubs(:executable?).returns true
+ Facter::Util::Resolution.stubs(:exec).returns "puppet-common\nlinux-generic\nlinux-image-generic"
+ }
+ it {
+ if Facter.version < '2.0.0'
+ should == 'puppet-common,linux-generic,linux-image-generic'
+ else
+ should == ['puppet-common', 'linux-generic', 'linux-image-generic']
+ end
+ }
+ end
+end
--- /dev/null
+require 'spec_helper'
+
+describe 'apt_security_updates fact' do
+ subject { Facter.fact(:apt_security_updates).value }
+ after(:each) { Facter.clear }
+
+ describe 'on Debian based distro missing update-notifier-common' do
+ before {
+ Facter.fact(:osfamily).stubs(:value).returns 'Debian'
+ File.stubs(:executable?).returns false
+ }
+ it { should == nil }
+ end
+
+ describe 'on Debian based distro' do
+ before {
+ Facter.fact(:osfamily).stubs(:value).returns 'Debian'
+ File.stubs(:executable?).returns true
+ Facter::Util::Resolution.stubs(:exec).returns '14;7'
+ }
+ it { should == 7 }
+ end
+
+end
--- /dev/null
+require 'spec_helper'
+
+describe 'apt_updates fact' do
+ subject { Facter.fact(:apt_updates).value }
+ after(:each) { Facter.clear }
+
+ describe 'on Debian based distro missing update-notifier-common' do
+ before {
+ Facter.fact(:osfamily).stubs(:value).returns 'Debian'
+ File.stubs(:executable?).returns false
+ }
+ it { should == nil }
+ end
+
+ describe 'on Debian based distro' do
+ before {
+ Facter.fact(:osfamily).stubs(:value).returns 'Debian'
+ File.stubs(:executable?).returns true
+ Facter::Util::Resolution.stubs(:exec).returns '14;7'
+ }
+ it { should == 14 }
+ end
+
+end
-# <%= @name %>
+#file generated by puppet
+# <%= @comment %>
deb <% if @architecture %>[arch=<%= @architecture %>] <% end %><%= @location %> <%= @release_real %> <%= @repos %>
<%- if @include_src then -%>
deb-src <% if @architecture %>[arch=<%= @architecture %>] <% end %><%= @location %> <%= @release_real %> <%= @repos %>