From 46606c9a2b1c9b2b29aabcbbfe40312f54d00757 Mon Sep 17 00:00:00 2001 From: Daniel Tremblay Date: Wed, 4 Dec 2013 18:05:26 +0000 Subject: [PATCH] Add ability to specify hash of apt sources in hiera This patch uses create_resources() to call apt::source which lets you specify your sources in hiera. --- README.md | 22 +++++++++++++++ manifests/init.pp | 9 ++++++- spec/classes/init_spec.rb | 57 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 spec/classes/init_spec.rb diff --git a/README.md b/README.md index 9c0e45cc36..5828d805ce 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,27 @@ If you would like to configure your system so the source is the Puppet Labs APT key_server => 'pgp.mit.edu', } + +#### Hiera example +
+apt::sources:
+  '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'
+
+  '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. @@ -224,6 +245,7 @@ A lot of great people have contributed to this module. A somewhat current list f * Branan Purvine-Riley * Christian G. Warden * Dan Bode +* Daniel Tremblay * Garrett Honeycutt * Jeff Wallace * Ken Barber diff --git a/manifests/init.pp b/manifests/init.pp index 12db61a6df..33bf773043 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -31,7 +31,8 @@ $purge_sources_list_d = false, $purge_preferences = false, $purge_preferences_d = false, - $update_timeout = undef + $update_timeout = undef, + $sources = undef ) { include apt::params @@ -136,4 +137,10 @@ anchor { 'apt::update': require => Class['apt::update'], } + + # manage sources if present + if $sources != undef { + validate_hash($sources) + create_resources('apt::source', $sources) + } } diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb new file mode 100644 index 0000000000..120b7e8239 --- /dev/null +++ b/spec/classes/init_spec.rb @@ -0,0 +1,57 @@ +require 'spec_helper' +describe 'apt' do + context 'with sources defined on valid osfamily' do + let :facts do + { :osfamily => 'Debian', + :lsbdistcodename => 'precise', + :lsbdistid => 'Debian', + } + end + let(:params) { { :sources => { + '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 + }, + 'puppetlabs' => { + 'location' => 'http://apt.puppetlabs.com', + 'repos' => 'main', + 'key' => '4BD6EC30', + 'key_server' => 'pgp.mit.edu', + } + } } } + + it { + should contain_file('debian_unstable.list').with({ + 'ensure' => 'present', + 'path' => '/etc/apt/sources.list.d/debian_unstable.list', + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + 'notify' => 'Exec[apt_update]', + }) + } + + it { should contain_file('debian_unstable.list').with_content(/^deb http:\/\/debian.mirror.iweb.ca\/debian\/ unstable main contrib non-free$/) } + it { should contain_file('debian_unstable.list').with_content(/^deb-src http:\/\/debian.mirror.iweb.ca\/debian\/ unstable main contrib non-free$/) } + + it { + should contain_file('puppetlabs.list').with({ + 'ensure' => 'present', + 'path' => '/etc/apt/sources.list.d/puppetlabs.list', + 'owner' => 'root', + 'group' => 'root', + 'mode' => '0644', + 'notify' => 'Exec[apt_update]', + }) + } + + it { should contain_file('puppetlabs.list').with_content(/^deb http:\/\/apt.puppetlabs.com precise main$/) } + it { should contain_file('puppetlabs.list').with_content(/^deb-src http:\/\/apt.puppetlabs.com precise main$/) } + end +end