From e5f2dfe294a563f5ebcec3d31949a81e1815db6e Mon Sep 17 00:00:00 2001 From: Cody Herriges Date: Wed, 11 Apr 2012 14:54:13 -0700 Subject: [PATCH] Adds apt::{conf,backports} and variable style. With the addition of this patch two new defines will be added; one to manage APT configuration files (apt::conf) and one that abstracts out the requirements needed to turn on backport repositories (apt::backports). In addition, the patch takes the opportunity to clean up variable definitions so they follow a consistent pattern of setting local variables to the fully qualified value stored in the apt::params class. Previously all variable used within a class directly addressed the apt::params namespace when ever the variable was used. In the pattern they now adhere to we can more easily switch the namespace data lives in or externalize it even more using hiera. --- manifests/backports.pp | 45 ++++++++++++++++++++++++++++++++++++ manifests/conf.pp | 17 ++++++++++++++ manifests/debian/testing.pp | 2 +- manifests/debian/unstable.pp | 2 +- manifests/force.pp | 1 - manifests/init.pp | 18 ++++++++++----- manifests/params.pp | 18 +++++++++++++++ manifests/pin.pp | 4 +++- manifests/ppa.pp | 7 +++--- manifests/release.pp | 4 +++- manifests/source.pp | 9 +++++--- 11 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 manifests/backports.pp create mode 100644 manifests/conf.pp diff --git a/manifests/backports.pp b/manifests/backports.pp new file mode 100644 index 0000000000..6734e05297 --- /dev/null +++ b/manifests/backports.pp @@ -0,0 +1,45 @@ +# This adds the necessary components to get backports for ubuntu and debian +# +# == Parameters +# +# [*release*] +# The ubuntu/debian release name. Defaults to $lsbdistcodename. Setting this +# manually can cause undefined behavior. (Read: universe exploding) +# +# == Examples +# +# include apt::backports +# +# class { 'apt::backports': +# release => 'natty', +# } +# +# == Authors +# +# Ben Hughes, I think. At least blame him if this goes wrong. I just added puppet doc. +# +# == Copyright +# +# Copyright 2011 Puppet Labs Inc, unless otherwise noted. +class apt::backports( + $release = $lsbdistcodename, + $location = $apt::params::backports_locations +) inherits apt::params { + + apt::source { 'backports.list': + location => $location, + release => "${release}-backports", + repos => $lsbdistid ? { + 'debian' => 'main contrib non-free', + 'ubuntu' => 'universe multiverse restricted', + }, + key => $lsbdistid ? { + 'debian' => '55BE302B', + 'ubuntu' => '437D05B5', + }, + key_server => 'pgp.mit.edu', + pin => '200', + notify => Exec["apt-get update"], + } +} + diff --git a/manifests/conf.pp b/manifests/conf.pp new file mode 100644 index 0000000000..6be1a67fac --- /dev/null +++ b/manifests/conf.pp @@ -0,0 +1,17 @@ +define apt::conf ( + $priority = '50', + $content + ) { + + include apt::params + + $root = "${apt::params::root}" + $apt_conf_d = "${apt::params::apt_conf_d}" + + file { "${apt_conf_d}/${priority}${name}": + content => $content, + owner => root, + group => root, + mode => 0644, + } +} diff --git a/manifests/debian/testing.pp b/manifests/debian/testing.pp index cfdeb3cf73..45133470fa 100644 --- a/manifests/debian/testing.pp +++ b/manifests/debian/testing.pp @@ -1,6 +1,7 @@ # testing.pp class apt::debian::testing { + include apt # deb http://debian.mirror.iweb.ca/debian/ testing main contrib non-free # deb-src http://debian.mirror.iweb.ca/debian/ testing main contrib non-free @@ -17,5 +18,4 @@ key_server => 'subkeys.pgp.net', pin => '-10', } - } diff --git a/manifests/debian/unstable.pp b/manifests/debian/unstable.pp index 3991023d17..401c9c5cda 100644 --- a/manifests/debian/unstable.pp +++ b/manifests/debian/unstable.pp @@ -1,6 +1,7 @@ # unstable.pp class apt::debian::unstable { + include apt # deb http://debian.mirror.iweb.ca/debian/ unstable main contrib non-free # deb-src http://debian.mirror.iweb.ca/debian/ unstable main contrib non-free @@ -17,5 +18,4 @@ key_server => 'subkeys.pgp.net', pin => '-10', } - } diff --git a/manifests/force.pp b/manifests/force.pp index 45c5679292..0089bbd753 100644 --- a/manifests/force.pp +++ b/manifests/force.pp @@ -18,5 +18,4 @@ exec { "/usr/bin/aptitude -y -t ${release} install ${name}${version_string}": unless => $install_check, } - } diff --git a/manifests/init.pp b/manifests/init.pp index 29db697c14..5668d11005 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -45,9 +45,15 @@ false => undef, true => "# Repos managed by puppet.\n", } + + $root = $apt::params::root + $apt_conf_d = $apt::params::apt_conf_d + $sources_list_d = $apt::params::sources_list_d + $provider = $apt::params::provider + file { 'sources.list': ensure => present, - path => "${apt::params::root}/sources.list", + path => "${root}/sources.list", owner => root, group => root, mode => '0644', @@ -56,7 +62,7 @@ file { 'sources.list.d': ensure => directory, - path => "${apt::params::root}/sources.list.d", + path => $sources_list_d owner => root, group => root, purge => $purge_sources_list_d, @@ -64,7 +70,7 @@ } exec { 'apt_update': - command => "${apt::params::provider} update", + command => "${provider} update", subscribe => [ File['sources.list'], File['sources.list.d'] ], refreshonly => $refresh_only_apt_update, } @@ -74,13 +80,13 @@ file { '99unauth': ensure => present, content => "APT::Get::AllowUnauthenticated 1;\n", - path => '/etc/apt/apt.conf.d/99unauth', + path => "${apt_conf_d}/99unauth", } } false: { file { '99unauth': ensure => absent, - path => '/etc/apt/apt.conf.d/99unauth', + path => "${apt_conf_d}/99unauth", } } undef: { } # do nothing @@ -89,7 +95,7 @@ if($proxy_host) { file { 'configure-apt-proxy': - path => '/etc/apt/apt.conf.d/proxy', + path => "${apt_conf_d}/proxy", content => "Acquire::http::Proxy \"http://${proxy_host}:${proxy_port}\";", } } diff --git a/manifests/params.pp b/manifests/params.pp index ca5d65521d..79989c08a4 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -2,4 +2,22 @@ $root = '/etc/apt' $provider = '/usr/bin/apt-get' $sources_list_d = "${root}/sources.list.d" + $apt_conf_d = "${root}/apt.conf.d" + $preferences_d = "${root}/preferences.d" + + case $lsbdistid { + 'debian': { + $backports_location = 'http://backports.debian.org/debian-backports' + } + 'ubuntu': { + case $lsbdistcodename { + 'hardy','lucid','maverick','natty','oneiric','precise': { + $backports_location = http://us.archive.ubuntu.com/ubuntuk + } + default: { + $backports_location = 'http://old-releases.ubuntu.com/ubuntu', + } + } + } + } } diff --git a/manifests/pin.pp b/manifests/pin.pp index 46613667eb..2899fce77a 100644 --- a/manifests/pin.pp +++ b/manifests/pin.pp @@ -8,9 +8,11 @@ include apt::params + $preferences_d = $apt::params::preferences_d + file { "${name}.pref": ensure => file, - path => "${apt::params::root}/preferences.d/${name}", + path => "${preferences_d}/${name}", owner => root, group => root, mode => '0644', diff --git a/manifests/ppa.pp b/manifests/ppa.pp index 095d8f17b2..2e4daa5d34 100644 --- a/manifests/ppa.pp +++ b/manifests/ppa.pp @@ -8,6 +8,8 @@ include apt::params + $sources_list_d = $apt::params::sources_list_d + if ! $release { fail('lsbdistcodename fact not available: release parameter required') } @@ -24,13 +26,12 @@ exec { "add-apt-repository-${name}": command => "/usr/bin/add-apt-repository ${name}", notify => Exec["apt-update-${name}"], - creates => "${apt::params::sources_list_d}/${sources_list_d_filename}", + creates => "${sources_list_d}/${sources_list_d_filename}", } - file { "${apt::params::sources_list_d}/${sources_list_d_filename}": + file { "${sources_list_d}/${sources_list_d_filename}": ensure => file, require => Exec["add-apt-repository-${name}"]; } - } diff --git a/manifests/release.pp b/manifests/release.pp index ee94e139fa..6e0a38f73f 100644 --- a/manifests/release.pp +++ b/manifests/release.pp @@ -6,7 +6,9 @@ include apt::params - file { "${apt::params::root}/apt.conf.d/01release": + $root = $apt::params::root + + file { "${root}/apt.conf.d/01release": owner => root, group => root, mode => '0644', diff --git a/manifests/source.pp b/manifests/source.pp index 95768dcfaa..3d4011e26d 100644 --- a/manifests/source.pp +++ b/manifests/source.pp @@ -16,13 +16,16 @@ include apt::params + $sources_list_d = $apt::params::sources_list_d + $provider = $apt::params::provider + if $release == undef { fail('lsbdistcodename fact not available: release parameter required') } file { "${name}.list": ensure => file, - path => "${apt::params::root}/sources.list.d/${name}.list", + path => "${apt::params::sources_list_d}/${name}.list", owner => root, group => root, mode => '0644', @@ -34,14 +37,14 @@ } exec { "${name} apt update": - command => "${apt::params::provider} update", + command => "${provider} update", subscribe => File["${name}.list"], refreshonly => true, } if $required_packages != false { exec { "Required packages: '${required_packages}' for ${name}": - command => "${apt::params::provider} -y install ${required_packages}", + command => "${provider} -y install ${required_packages}", subscribe => File["${name}.list"], refreshonly => true, }