From: Daniele Sluijters Date: Sat, 28 Feb 2015 17:02:23 +0000 (+0100) Subject: apt::source: Allow passing in a complex key. X-Git-Tag: 2.0.0~26^2~2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=ea4f615735d5fb6bb6b0fcbd735da76e0bb45c06;hp=0f3bdcdf5a44315197ded803401b52dfcce38ebe;p=puppet-modules%2Fpuppetlabs-apt.git apt::source: Allow passing in a complex key. Turn `$key` into something that accepts a string or a hash of four keys representing the different options that can be passed on to `apt::key`. --- diff --git a/manifests/params.pp b/manifests/params.pp index 2a29b6d..8799f7b 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -51,6 +51,13 @@ class apt::params { 'preferences.d' => true, } + $source_key_defaults = { + 'server' => $default_keyserver, + 'options' => undef, + 'content' => undef, + 'source' => undef, + } + $file_defaults = { 'owner' => 'root', 'group' => 'root', diff --git a/manifests/source.pp b/manifests/source.pp index 215e4c4..ea24cbf 100644 --- a/manifests/source.pp +++ b/manifests/source.pp @@ -9,20 +9,30 @@ define apt::source( $include_src = false, $include_deb = true, $key = undef, - $key_server = 'keyserver.ubuntu.com', - $key_content = undef, - $key_source = undef, $pin = false, $architecture = undef, $trusted_source = false, ) { - validate_string($architecture, $comment, $location, $release, $repos, $key_server) + validate_string($architecture, $comment, $location, $release, $repos) validate_bool($trusted_source, $include_src, $include_deb) if ! $release { fail('lsbdistcodename fact not available: release parameter required') } + $_before = Apt::Setting["list-${title}"] + + if $key { + if is_hash($key) { + unless $key['id'] { + fail('key hash must contain at least an id entry') + } + $_key = merge($::apt::source_key_defaults, $key) + } else { + validate_string($key) + } + } + apt::setting { "list-${name}": ensure => $ensure, content => template('apt/_header.erb', 'apt/source.list.erb'), @@ -36,20 +46,29 @@ define apt::source( apt::pin { $name: ensure => $ensure, priority => $pin, - before => Apt::Setting["list-${name}"], + before => $_before, origin => $host, } } # We do not want to remove keys when the source is absent. if $key and ($ensure == 'present') { - apt::key { "Add key: ${key} from Apt::Source ${title}": - ensure => present, - key => $key, - server => $key_server, - content => $key_content, - source => $key_source, - before => Apt::Setting["list-${name}"], + if is_hash($_key) { + apt::key { "Add key: ${_key['id']} from Apt::Source ${title}": + ensure => present, + id => $_key['id'], + server => $_key['server'], + content => $_key['content'], + source => $_key['source'], + options => $_key['options'], + before => $_before, + } + } else { + apt::key { "Add key: ${key} from Apt::Source ${title}": + ensure => present, + id => $key, + before => $_before, + } } } } diff --git a/spec/classes/apt_spec.rb b/spec/classes/apt_spec.rb index 2de1965..9e05985 100644 --- a/spec/classes/apt_spec.rb +++ b/spec/classes/apt_spec.rb @@ -140,16 +140,14 @@ describe 'apt' do 'location' => 'http://debian.mirror.iweb.ca/debian/', 'release' => 'unstable', 'repos' => 'main contrib non-free', - 'key' => '55BE302B', - 'key_server' => 'subkeys.pgp.net', + 'key' => { 'id' => '55BE302B', 'server' => 'subkeys.pgp.net' }, 'pin' => '-10', 'include_src' => true, }, 'puppetlabs' => { 'location' => 'http://apt.puppetlabs.com', 'repos' => 'main', - 'key' => '4BD6EC30', - 'key_server' => 'pgp.mit.edu', + 'key' => { 'id' => '4BD6EC30', 'server' => 'pgp.mit.edu' }, } } } } diff --git a/spec/defines/source_spec.rb b/spec/defines/source_spec.rb index f55921b..06363e6 100644 --- a/spec/defines/source_spec.rb +++ b/spec/defines/source_spec.rb @@ -22,18 +22,19 @@ describe 'apt::source' do let :params do { - 'include_deb' => false, - 'include_src' => true, + :include_deb => false, + :include_src => true, } end it { is_expected.to contain_apt__setting('list-my_source').with({ - 'ensure' => 'present', + :ensure => 'present', }).with_content(/# my_source\ndeb-src wheezy main\n/) + } end - context 'no defaults' do + describe 'no defaults' do let :facts do { :lsbdistid => 'Debian', @@ -41,43 +42,112 @@ describe 'apt::source' do :osfamily => 'Debian' } end - let :params do - { - 'comment' => 'foo', - 'location' => 'http://debian.mirror.iweb.ca/debian/', - 'release' => 'sid', - 'repos' => 'testing', - 'include_src' => false, - 'key' => GPG_KEY_ID, - 'key_server' => 'pgp.mit.edu', - 'key_content' => 'GPG key content', - 'key_source' => 'http://apt.puppetlabs.com/pubkey.gpg', - 'pin' => '10', - 'architecture' => 'x86_64', - 'trusted_source' => true, + context 'with simple key' do + let :params do + { + :comment => 'foo', + :location => 'http://debian.mirror.iweb.ca/debian/', + :release => 'sid', + :repos => 'testing', + :include_src => false, + :key => GPG_KEY_ID, + :pin => '10', + :architecture => 'x86_64', + :trusted_source => true, + } + end + + it { is_expected.to contain_apt__setting('list-my_source').with({ + :ensure => 'present', + }).with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(/deb-src/) + } + + it { is_expected.to contain_apt__pin('my_source').that_comes_before('Apt::Setting[list-my_source]').with({ + :ensure => 'present', + :priority => '10', + :origin => 'debian.mirror.iweb.ca', + }) + } + + it { is_expected.to contain_apt__key("Add key: #{GPG_KEY_ID} from Apt::Source my_source").that_comes_before('Apt::Setting[list-my_source]').with({ + :ensure => 'present', + :key => GPG_KEY_ID, + }) } end - it { is_expected.to contain_apt__setting('list-my_source').with({ - 'ensure' => 'present', - }).with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(/deb-src/) - } + context 'with complex key' do + let :params do + { + :comment => 'foo', + :location => 'http://debian.mirror.iweb.ca/debian/', + :release => 'sid', + :repos => 'testing', + :include_src => false, + :key => { 'id' => GPG_KEY_ID, 'server' => 'pgp.mit.edu', + 'content' => 'GPG key content', + 'source' => 'http://apt.puppetlabs.com/pubkey.gpg',}, + :pin => '10', + :architecture => 'x86_64', + :trusted_source => true, + } + end - it { is_expected.to contain_apt__pin('my_source').that_comes_before('Apt::Setting[list-my_source]').with({ - 'ensure' => 'present', - 'priority' => '10', - 'origin' => 'debian.mirror.iweb.ca', - }) - } + it { is_expected.to contain_apt__setting('list-my_source').with({ + :ensure => 'present', + }).with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(/deb-src/) + } - it { is_expected.to contain_apt__key("Add key: #{GPG_KEY_ID} from Apt::Source my_source").that_comes_before('Apt::Setting[list-my_source]').with({ - 'ensure' => 'present', - 'key' => GPG_KEY_ID, - 'server' => 'pgp.mit.edu', - 'content' => 'GPG key content', - 'source' => 'http://apt.puppetlabs.com/pubkey.gpg', - }) - } + it { is_expected.to contain_apt__pin('my_source').that_comes_before('Apt::Setting[list-my_source]').with({ + :ensure => 'present', + :priority => '10', + :origin => 'debian.mirror.iweb.ca', + }) + } + + it { is_expected.to contain_apt__key("Add key: #{GPG_KEY_ID} from Apt::Source my_source").that_comes_before('Apt::Setting[list-my_source]').with({ + :ensure => 'present', + :key => GPG_KEY_ID, + :server => 'pgp.mit.edu', + :content => 'GPG key content', + :source => 'http://apt.puppetlabs.com/pubkey.gpg', + }) + } + end + + context 'with simple key' do + let :params do + { + :comment => 'foo', + :location => 'http://debian.mirror.iweb.ca/debian/', + :release => 'sid', + :repos => 'testing', + :include_src => false, + :key => GPG_KEY_ID, + :pin => '10', + :architecture => 'x86_64', + :trusted_source => true, + } + end + + it { is_expected.to contain_apt__setting('list-my_source').with({ + :ensure => 'present', + }).with_content(/# foo\ndeb \[arch=x86_64 trusted=yes\] http:\/\/debian\.mirror\.iweb\.ca\/debian\/ sid testing\n/).without_content(/deb-src/) + } + + it { is_expected.to contain_apt__pin('my_source').that_comes_before('Apt::Setting[list-my_source]').with({ + :ensure => 'present', + :priority => '10', + :origin => 'debian.mirror.iweb.ca', + }) + } + + it { is_expected.to contain_apt__key("Add key: #{GPG_KEY_ID} from Apt::Source my_source").that_comes_before('Apt::Setting[list-my_source]').with({ + :ensure => 'present', + :id => GPG_KEY_ID, + }) + } + end end context 'trusted_source true' do @@ -90,13 +160,13 @@ describe 'apt::source' do end let :params do { - 'include_src' => false, - 'trusted_source' => true, + :include_src => false, + :trusted_source => true, } end it { is_expected.to contain_apt__setting('list-my_source').with({ - 'ensure' => 'present', + :ensure => 'present', }).with_content(/# my_source\ndeb \[trusted=yes\] wheezy main\n/) } end @@ -111,14 +181,14 @@ describe 'apt::source' do end let :params do { - 'include_deb' => false, - 'include_src' => true, - 'architecture' => 'x86_64', + :include_deb => false, + :include_src => true, + :architecture => 'x86_64', } end it { is_expected.to contain_apt__setting('list-my_source').with({ - 'ensure' => 'present', + :ensure => 'present', }).with_content(/# my_source\ndeb-src \[arch=x86_64 \] wheezy main\n/) } end @@ -133,12 +203,12 @@ describe 'apt::source' do end let :params do { - 'ensure' => 'absent', + :ensure => 'absent', } end it { is_expected.to contain_apt__setting('list-my_source').with({ - 'ensure' => 'absent' + :ensure => 'absent' }) } end