First commit
authorJeff Wallace <jeff@evolvingweb.ca>
Tue, 27 Apr 2010 20:38:28 +0000 (16:38 -0400)
committerJeff Wallace <jeff@evolvingweb.ca>
Tue, 27 Apr 2010 20:38:28 +0000 (16:38 -0400)
README.md [new file with mode: 0644]
manifests/debian/testing.pp [new file with mode: 0644]
manifests/debian/unstable.pp [new file with mode: 0644]
manifests/force.pp [new file with mode: 0644]
manifests/init.pp [new file with mode: 0644]
manifests/pin.pp [new file with mode: 0644]
manifests/ppa.pp [new file with mode: 0644]
manifests/release.pp [new file with mode: 0644]
manifests/source.pp [new file with mode: 0644]
templates/source.list.erb [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..d5aef2d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,50 @@
+# Apt module for Puppet
+
+## Description
+Provides helpful definitions for dealing with Apt.
+
+## Usage
+
+### apt::force
+Force a package to be installed from a specific release.  Useful when using repositoires like Debian unstable in Ubuntu.
+<pre>
+apt::force { "glusterfs-server":
+       release => "unstable",
+       version => '3.0.3',
+       require => Apt::Source["debian_unstable"],
+}
+</pre>
+
+### apt::pin
+Add an apt pin for a certain release.
+<pre>
+apt::pin { "karmic": priority => 700 }
+apt::pin { "karmic-updates": priority => 700 }
+apt::pin { "karmic-security": priority => 700 }
+</pre>
+
+### apt::ppa
+Add a ppa repository using `add-apt-repository`.  Somewhat experimental.
+<pre>
+apt::ppa { "ppa:drizzle-developers/ppa" }
+</pre>
+
+### apt::release
+Set the default apt release.  Useful when using repositoires like Debian unstable in Ubuntu.
+<pre>
+apt::release { "karmic": }
+</pre>
+
+## apt::source
+Add an apt source to `/etc/apt/sources.list.d/`.
+<pre>
+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"
+}
+</pre>
diff --git a/manifests/debian/testing.pp b/manifests/debian/testing.pp
new file mode 100644 (file)
index 0000000..8f37bd5
--- /dev/null
@@ -0,0 +1,21 @@
+# testing.pp
+
+class apt::debian::testing {
+
+       # 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
+       # Key: 55BE302B  Server: subkeys.pgp.net
+       # debian-keyring
+       # debian-archive-keyring
+       
+       apt::source { "debian_testing":
+               location => "http://debian.mirror.iweb.ca/debian/",
+               release => "testing",
+               repos => "main contrib non-free",
+               required_packages => "debian-keyring debian-archive-keyring",
+               key => "55BE302B",
+               key_server => "subkeys.pgp.net",
+               pin => "-10"
+       }
+
+}
diff --git a/manifests/debian/unstable.pp b/manifests/debian/unstable.pp
new file mode 100644 (file)
index 0000000..d0dd1ce
--- /dev/null
@@ -0,0 +1,21 @@
+# unstable.pp
+
+class apt::debian::unstable {
+
+       # 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
+       # Key: 55BE302B  Server: subkeys.pgp.net
+       # debian-keyring
+       # debian-archive-keyring
+       
+       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"
+       }
+
+}
diff --git a/manifests/force.pp b/manifests/force.pp
new file mode 100644 (file)
index 0000000..e56246b
--- /dev/null
@@ -0,0 +1,16 @@
+# force.pp
+# force a package from a specific release
+
+define apt::force(
+       $release = 'testing',
+       $version = false
+) {
+       
+       exec { "aptitude -y -t ${release} install ${name}":
+               unless => $version ? {
+                       false => "dpkg -l | grep ${name}",
+                       default => "dpkg -l | grep ${name} | grep ${version}"
+               }
+       }
+       
+}
diff --git a/manifests/init.pp b/manifests/init.pp
new file mode 100644 (file)
index 0000000..f7b7746
--- /dev/null
@@ -0,0 +1,27 @@
+# apt.pp
+
+class apt {
+       $root = '/etc/apt'
+       $provider = 'apt-get'
+       
+       file { "sources.list":
+               name => "${root}/sources.list",
+               ensure => present,
+               owner => root,
+               group => root,
+               mode => 644,
+       }
+       
+       file { "sources.list.d":
+               name => "${root}/sources.list.d",
+               ensure => directory,
+               owner => root,
+               group => root,
+       }
+       
+       exec { "apt_update":
+               command => "${provider} update",
+               subscribe => [ File["sources.list"], File["sources.list.d"] ],
+               refreshonly => true,
+       }
+}
diff --git a/manifests/pin.pp b/manifests/pin.pp
new file mode 100644 (file)
index 0000000..5a9dae6
--- /dev/null
@@ -0,0 +1,20 @@
+# pin.pp
+# pin a release in apt, useful for unstable repositories
+
+define apt::pin(
+       $packages = '*',
+       $priority = 0
+) {
+
+       include apt
+       
+       file { "${name}.pref":
+               name => "${apt::root}/preferences.d/${name}",
+               ensure => file,
+               owner => root,
+               group => root,
+               mode => 644,
+               content => "# ${name}\nPackage: ${packages}\nPin: release a=${name}\nPin-Priority: ${priority}",
+       }
+
+}
diff --git a/manifests/ppa.pp b/manifests/ppa.pp
new file mode 100644 (file)
index 0000000..e7ab361
--- /dev/null
@@ -0,0 +1,13 @@
+# ppa.pp
+
+define apt::ppa(
+       
+) {
+       include apt
+       
+       exec { "add-apt-repository ${name}":
+               require => Package["python-software-properties"],
+               # TODO: unless => 'check'
+       }
+}
+
diff --git a/manifests/release.pp b/manifests/release.pp
new file mode 100644 (file)
index 0000000..294bb78
--- /dev/null
@@ -0,0 +1,14 @@
+# release.pp
+
+define apt::release (
+
+) {
+       include apt
+       
+       file { "${apt::root}/apt.conf.d/01release":
+               owner => root,
+               group => root,
+               mode => 644,
+               content => "APT::Default-Release \"${name}\";"
+       }       
+}
diff --git a/manifests/source.pp b/manifests/source.pp
new file mode 100644 (file)
index 0000000..e9fa308
--- /dev/null
@@ -0,0 +1,50 @@
+# source.pp
+# add an apt source
+
+define apt::source(
+       $location = '',
+       $release = 'karmic',
+       $repos = 'main',
+       $include_src = true,
+       $required_packages = false,
+       $key = false,
+       $key_server = 'keyserver.ubuntu.com',
+       $pin = false
+) {
+
+       include apt
+
+       file { "${name}.list":
+               name => "${apt::root}/sources.list.d/${name}.list",
+               ensure => file,
+               owner => root,
+               group => root,
+               mode => 644,
+               content => template("apt/source.list.erb"),
+       }
+       
+       if $pin != false {
+               apt::pin { "${release}": priority => "${pin}" }
+       }
+       
+       exec { "${name} apt update":
+               command => "${apt::provider} update",
+               subscribe => File["${name}.list"],
+               refreshonly => true,
+       }
+       
+       if $required_packages != false {
+               exec { "${apt::provider} -y install ${required_packages}":
+                       subscribe => File["${name}.list"],
+                       refreshonly => true,
+               }
+       }
+       
+       if $key != false {
+               exec { "apt-key adv --keyserver ${key_server} --recv-keys ${key}":
+                       unless => "apt-key list | grep ${key}",
+                       before => File["${name}.list"],
+               }
+       }
+
+}
diff --git a/templates/source.list.erb b/templates/source.list.erb
new file mode 100644 (file)
index 0000000..3452691
--- /dev/null
@@ -0,0 +1,5 @@
+# <%= name %>
+deb <%= location %> <%= release %> <%= repos %>
+<%- if include_src then -%>
+deb-src <%= location %> <%= release %> <%= repos %>
+<%- end -%>