Version information
Start using this module
Add this module to your Puppetfile:
mod 'puppetlabs-apt', '1.1.1'
Learn more about managing modules with a PuppetfileDocumentation
apt
Description
Provides helpful definitions for dealing with Apt.
Overview
The APT module provides a simple interface for managing APT source, key, and definitions with Puppet.
Module Description
APT automates obtaining and installing software packages on *nix systems.
Setup
What APT affects:
- package/service/configuration files for APT
- your system's
sources.list
file andsources.list.d
directory- NOTE: Setting the
purge_sources_list
andpurge_sources_list_d
parameters to 'true' will destroy any existing content that was not declared with Puppet. The default for these parameters is 'false'.
- NOTE: Setting the
- system repositories
- authentication keys
- wget (optional)
###Beginning with APT
To begin using the APT module with default parameters, declare the class
class { 'apt': }
Puppet code that uses anything from the APT module requires that the core apt class be declared.
Usage
Using the APT module consists predominantly in declaring classes that provide desired functionality and features.
###apt
apt
provides a number of common resources and options that are shared by the various defined types in this module, so you MUST always include this class in your manifests.
The parameters for apt
are not required in general and are predominantly for development environment use-cases.
class { 'apt':
always_apt_update => false,
disable_keys => undef,
proxy_host => false,
proxy_port => '8080',
purge_sources_list => false,
purge_sources_list_d => false,
purge_preferences_d => false
}
Puppet will manage your system's sources.list
file and sources.list.d
directory but will do its best to respect existing content.
If you declare your apt class with purge_sources_list
and purge_sources_list_d
set to 'true', Puppet will unapologetically purge any existing content it finds that wasn't declared with Puppet.
###apt::builddep
Installs the build depends of a specified package.
apt::builddep { 'glusterfs-server': }
###apt::force
Forces a package to be installed from a specific release. This class is particularly useful when using repositories, like Debian, that are unstable in Ubuntu.
apt::force { 'glusterfs-server':
release => 'unstable',
version => '3.0.3',
require => Apt::Source['debian_unstable'],
}
###apt::key
Adds a key to the list of keys used by APT to authenticate packages.
apt::key { 'puppetlabs':
key => '4BD6EC30',
key_server => 'pgp.mit.edu',
}
apt::key { 'jenkins':
key => 'D50582E6',
key_source => 'http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key',
}
Note that use of key_source
requires wget to be installed and working.
###apt::pin
Adds an apt pin for a certain release.
apt::pin { 'karmic': priority => 700 }
apt::pin { 'karmic-updates': priority => 700 }
apt::pin { 'karmic-security': priority => 700 }
###apt::ppa
Adds a ppa repository using add-apt-repository
.
apt::ppa { 'ppa:drizzle-developers/ppa': }
###apt::release
Sets the default apt release. This class is particularly useful when using repositories, like Debian, that are unstable in Ubuntu.
class { 'apt::release':
release_id => 'precise',
}
###apt::source
Adds an apt source to /etc/apt/sources.list.d/
.
apt::source { 'debian_unstable':
location => 'http://debian.mirror.iweb.ca/debian/',
release => 'unstable',
repos => 'main contrib non-free',
required_packages => 'debian-keyring debian-archive-keyring',
key => '55BE302B',
key_server => 'subkeys.pgp.net',
pin => '-10',
include_src => true
}
If you would like to configure your system so the source is the Puppet Labs APT repository
apt::source { 'puppetlabs':
location => 'http://apt.puppetlabs.com',
repos => 'main',
key => '4BD6EC30',
key_server => 'pgp.mit.edu',
}
###Testing
The APT module is mostly a collection of defined resource types, which provide reusable logic that can be leveraged to manage APT. It does provide smoke tests for testing functionality on a target system, as well as spec tests for checking a compiled catalog against an expected set of resources.
####Example Test
This test will set up a Puppet Labs apt repository. Start by creating a new smoke test in the apt module's test folder. Call it puppetlabs-apt.pp. Inside, declare a single resource representing the Puppet Labs APT source and gpg key
apt::source { 'puppetlabs':
location => 'http://apt.puppetlabs.com',
repos => 'main',
key => '4BD6EC30',
key_server => 'pgp.mit.edu',
}
This resource creates an apt source named puppetlabs and gives Puppet information about the repository's location and key used to sign its packages. Puppet leverages Facter to determine the appropriate release, but you can set it directly by adding the release type.
Check your smoke test for syntax errors
$ puppet parser validate tests/puppetlabs-apt.pp
If you receive no output from that command, it means nothing is wrong. Then apply the code
$ puppet apply --verbose tests/puppetlabs-apt.pp
notice: /Stage[main]//Apt::Source[puppetlabs]/File[puppetlabs.list]/ensure: defined content as '{md5}3be1da4923fb910f1102a233b77e982e'
info: /Stage[main]//Apt::Source[puppetlabs]/File[puppetlabs.list]: Scheduling refresh of Exec[puppetlabs apt update]
notice: /Stage[main]//Apt::Source[puppetlabs]/Exec[puppetlabs apt update]: Triggered 'refresh' from 1 events>
The above example used a smoke test to easily lay out a resource declaration and apply it on your system. In production, you may want to declare your APT sources inside the classes where theyâre needed.
Implementation
###apt::backports
Adds the necessary components to get backports for Ubuntu and Debian. The release name defaults to $lsbdistcodename
. Setting this manually can cause undefined behavior (read: universe exploding).
Limitations
This module should work across all versions of Debian/Ubuntu and support all major APT repository management features.
Development
Puppet Labs modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We canât access the huge number of platforms and myriad of hardware, software, and deployment configurations that Puppet is intended to serve.
We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
You can read the complete module contribution guide on the Puppet Labs wiki.
Contributors
A lot of great people have contributed to this module. A somewhat current list follows:
- Ben Godfrey ben.godfrey@wonga.com
- Branan Purvine-Riley branan@puppetlabs.com
- Christian G. Warden cwarden@xerus.org
- Dan Bode bodepd@gmail.com dan@puppetlabs.com
- Garrett Honeycutt github@garretthoneycutt.com
- Jeff Wallace jeff@evolvingweb.ca jeff@tjwallace.ca
- Ken Barber ken@bob.sh
- Matthaus Litteken matthaus@puppetlabs.com mlitteken@gmail.com
- Matthias Pigulla mp@webfactory.de
- Monty Taylor mordred@inaugust.com
- Peter Drake pdrake@allplayers.com
- Reid Vandewiele marut@cat.pdx.edu
- Robert Navarro rnavarro@phiivo.com
- Ryan Coleman ryan@puppetlabs.com
- Scott McLeod scott.mcleod@theice.com
- Spencer Krum spencer@puppetlabs.com
- William Van Hevelingen blkperl@cat.pdx.edu wvan13@gmail.com
- Zach Leslie zach@puppetlabs.com
puppetlabs-apt changelog
Release notes for the puppetlabs-apt module.
1.1.1
This is a bug fix release that resolves a number of issues:
- By changing template variable usage, we remove the deprecation warnings for Puppet 3.2.x
- Fixed proxy file removal, when proxy absent
Some documentation, style and whitespaces changes were also merged. This release also introduced proper rspec-puppet unit testing on Travis-CI to help reduce regression.
Thanks to all the community contributors below that made this patch possible.
Detail Changes
- fix minor comment type (Chris Rutter)
- whitespace fixes (Michael Moll)
- Update travis config file (William Van Hevelingen)
- Build all branches on travis (William Van Hevelingen)
- Standardize travis.yml on pattern introduced in stdlib (William Van Hevelingen)
- Updated content to conform to README best practices template (Lauren Rother)
- Fix apt::release example in readme (Brian Galey)
- add @ to variables in template (Peter Hoeg)
- Remove deprecation warnings for pin.pref.erb as well (Ken Barber)
- Update travis.yml to latest versions of puppet (Ken Barber)
- Fix proxy file removal (Scott Barber)
- Add spec test for removing proxy configuration (Dean Reilly)
- Fix apt::key listing longer than 8 chars (Benjamin Knofe)
1.1.0
This release includes Ubuntu 12.10 (Quantal) support for PPAs.
2012-05-25 Puppet Labs info@puppetlabs.com - 0.0.4
- Fix ppa list filename when there is a period in the PPA name
- Add .pref extension to apt preferences files
- Allow preferences to be purged
- Extend pin support
2012-05-04 Puppet Labs info@puppetlabs.com - 0.0.3
- only invoke apt-get update once
- only install python-software-properties if a ppa is added
- support 'ensure => absent' for all defined types
- add apt::conf
- add apt::backports
- fixed Modulefile for module tool dependency resolution
- configure proxy before doing apt-get update
- use apt-get update instead of aptitude for apt::ppa
- add support to pin release
2012-03-26 Puppet Labs info@puppetlabs.com - 0.0.2 41cedbb (#13261) Add real examples to smoke tests. d159a78 (#13261) Add key.pp smoke test 7116c7a (#13261) Replace foo source with puppetlabs source 1ead0bf Ignore pkg directory. 9c13872 (#13289) Fix some more style violations 0ea4ffa (#13289) Change test scaffolding to use a module & manifest dir fixture path a758247 (#13289) Clean up style violations and fix corresponding tests 99c3fd3 (#13289) Add puppet lint tests to Rakefile 5148cbf (#13125) Apt keys should be case insensitive b9607a4 Convert apt::key to use anchors
2012-03-07 Puppet Labs info@puppetlabs.com - 0.0.1 d4fec56 Modify apt::source release parameter test 1132a07 (#12917) Add contributors to README 8cdaf85 (#12823) Add apt::key defined type and modify apt::source to use it 7c0d10b (#12809) $release should use $lsbdistcodename and fall back to manual input be2cc3e (#12522) Adjust spec test for splitting purge 7dc60ae (#12522) Split purge option to spare sources.list 9059c4e Fix source specs to test all key permutations 8acb202 Add test for python-software-properties package a4af11f Check if python-software-properties is defined before attempting to define it. 1dcbf3d Add tests for requiredpackages change f3735d2 Allow duplicate $required_packages 74c8371 (#12430) Add tests for changes to apt module 97ebb2d Test two sources with the same key 1160bcd (#12526) Add ability to reverse apt { disable_keys => true } 2842d73 Add Modulefile to puppet-apt c657742 Allow the use of the same key in multiple sources 8c27963 (#12522) Adding purge option to apt class 997c9fd (#12529) Add unit test for apt proxy settings 50f3cca (#12529) Add parameter to support setting a proxy for apt d522877 (#12094) Replace chained .with* with a hash 8cf1bd0 (#12094) Remove deprecated spec.opts file 2d688f4 (#12094) Add rspec-puppet tests for apt 0fb5f78 (#12094) Replace name with path in file resources f759bc0 (#11953) Apt::force passes $version to aptitude f71db53 (#11413) Add spec test for apt::force to verify changes to unless 2f5d317 (#11413) Update dpkg query used by apt::force cf6caa1 (#10451) Add test coverage to apt::ppa 0dd697d include_src parameter in example; Whitespace cleanup b662eb8 fix typos in "repositories" 1be7457 Fix (#10451) - apt::ppa fails to "apt-get update" when new PPA source is added 864302a Set the pin priority before adding the source (Fix #10449) 1de4e0a Refactored as per mlitteken 1af9a13 Added some crazy bash madness to check if the ppa is installed already. Otherwise the manifest tries to add it on every run! 52ca73e (#8720) Replace Apt::Ppa with Apt::Builddep 5c05fa0 added builddep command. a11af50 added the ability to specify the content of a key c42db0f Fixes ppa test. 77d2b0d reformatted whitespace to match recommended style of 2 space indentation. 27ebdfc ignore swap files. 377d58a added smoke tests for module. 18f614b reformatted apt::ppa according to recommended style. d8a1e4e Created a params class to hold global data. 636ae85 Added two params for apt class 148fc73 Update LICENSE. ed2d19e Support ability to add more than one PPA 420d537 Add call to apt-update after add-apt-repository in apt::ppa 945be77 Add package definition for python-software-properties 71fc425 Abs paths for all commands 9d51cd1 Adding LICENSE 71796e3 Heading fix in README 87777d8 Typo in README f848bac First commit
Dependencies
- puppetlabs/stdlib (>= 2.2.1)
Copyright (c) 2011 Evolving Web Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.