From: Hunter Haugen Date: Tue, 2 Jul 2013 20:54:12 +0000 (-0700) Subject: Merge pull request #134 from spali/my_changes X-Git-Tag: 1.2.0~2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=9568ecf26d23a2c250c08b735c4b1841c1a1ba01;hp=7c66ab5f39a5fb7b039732f94a3dfac01cd8c81f;p=puppet-modules%2Fpuppetlabs-apt.git Merge pull request #134 from spali/my_changes replace aptitude with apt in apt::force --- diff --git a/.gitignore b/.gitignore index b77434b..0485a72 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ pkg/ Gemfile.lock spec/fixtures/manifests +metadata.json diff --git a/.project b/.project new file mode 100644 index 0000000..6523c6d --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + apt + + + + + + org.cloudsmith.geppetto.pp.dsl.ui.modulefileBuilder + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.cloudsmith.geppetto.pp.dsl.ui.puppetNature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/.travis.yml b/.travis.yml index a19074d..71054bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,26 +4,23 @@ script: "bundle exec rake spec SPEC_OPTS='--format documentation'" rvm: - 1.8.7 - 1.9.3 - - ruby-head + - 2.0.0 env: - - PUPPET_GEM_VERSION="~> 2.6.0" - PUPPET_GEM_VERSION="~> 2.7.0" - PUPPET_GEM_VERSION="~> 3.0.0" - PUPPET_GEM_VERSION="~> 3.1.0" - PUPPET_GEM_VERSION="~> 3.2.0" matrix: exclude: - - rvm: ruby-head - env: PUPPET_GEM_VERSION="~> 3.0.0" - - rvm: ruby-head - env: PUPPET_GEM_VERSION="~> 3.1.0" - rvm: 1.9.3 env: PUPPET_GEM_VERSION="~> 2.7.0" - - rvm: ruby-head + - rvm: 2.0.0 env: PUPPET_GEM_VERSION="~> 2.7.0" - - rvm: 1.9.3 - env: PUPPET_GEM_VERSION="~> 2.6.0" - - rvm: ruby-head - env: PUPPET_GEM_VERSION="~> 2.6.0" + - rvm: 2.0.0 + env: PUPPET_GEM_VERSION="~> 3.0.0" + - rvm: 2.0.0 + env: PUPPET_GEM_VERSION="~> 3.1.0" + - rvm: 1.8.7 + env: PUPPET_GEM_VERSION="~> 3.2.0" notifications: email: false diff --git a/CHANGELOG b/CHANGELOG index da4072f..44fa88a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,48 @@ +## 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 - 0.0.4 * Fix ppa list filename when there is a period in the PPA name * Add .pref extension to apt preferences files diff --git a/Gemfile b/Gemfile index 8e5e04d..881fc90 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,8 @@ -source :rubygems +source 'https://rubygems.org' group :development, :test do + gem 'rake', :require => false + gem 'rspec-puppet', :require => false gem 'puppetlabs_spec_helper', :require => false end diff --git a/Modulefile b/Modulefile index d351142..2b1b21c 100644 --- a/Modulefile +++ b/Modulefile @@ -1,5 +1,5 @@ name 'puppetlabs-apt' -version '1.1.0' +version '1.1.1' source 'https://github.com/puppetlabs/puppetlabs-apt' author 'Evolving Web / Puppet Labs' license 'Apache License 2.0' diff --git a/README.md b/README.md index 5082e34..402d7ab 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,16 @@ Adds an apt pin for a certain release. apt::pin { 'karmic-updates': priority => 700 } apt::pin { 'karmic-security': priority => 700 } +Note you can also specifying more complex pins using distribution properties. + + apt::pin { 'stable': + priority => -10, + originator => 'Debian', + release_version => '3.0', + component => 'main', + label => 'Debian' + } + ###apt::ppa Adds a ppa repository using `add-apt-repository`. @@ -213,10 +223,3 @@ A lot of great people have contributed to this module. A somewhat current list f * Spencer Krum * William Van Hevelingen * Zach Leslie - -Release Notes -------------- - -**1.1.0** - -This release includes Ubuntu 12.10 (Quantal) support for PPAs. diff --git a/manifests/key.pp b/manifests/key.pp index 98a0f3a..c78bf65 100644 --- a/manifests/key.pp +++ b/manifests/key.pp @@ -3,12 +3,15 @@ define apt::key ( $ensure = present, $key_content = false, $key_source = false, - $key_server = 'keyserver.ubuntu.com' + $key_server = 'keyserver.ubuntu.com', + $key_options = false ) { include apt::params $upkey = upcase($key) + # trim the key to the last 8 chars so we can match longer keys with apt-key list too + $trimmedkey = regsubst($upkey, '^.*(.{8})$', '\1') if $key_content { $method = 'content' @@ -39,16 +42,23 @@ define apt::key ( anchor { "apt::key ${upkey} present": } } + if $key_options{ + $options_string = "--keyserver-options ${key_options}" + } + else{ + $options_string = '' + } + if !defined(Exec[$digest]) { $digest_command = $method ? { 'content' => "echo '${key_content}' | /usr/bin/apt-key add -", 'source' => "wget -q '${key_source}' -O- | apt-key add -", - 'server' => "apt-key adv --keyserver '${key_server}' --recv-keys '${upkey}'", + 'server' => "apt-key adv --keyserver '${key_server}' ${options_string} --recv-keys '${upkey}'", } exec { $digest: command => $digest_command, path => '/bin:/usr/bin', - unless => "/usr/bin/apt-key list | /bin/grep '${upkey}'", + unless => "/usr/bin/apt-key list | /bin/grep '${trimmedkey}'", logoutput => 'on_failure', before => Anchor["apt::key ${upkey} present"], } @@ -66,7 +76,7 @@ define apt::key ( exec { "apt::key ${upkey} absent": command => "apt-key del '${upkey}'", path => '/bin:/usr/bin', - onlyif => "apt-key list | grep '${upkey}'", + onlyif => "apt-key list | grep '${trimmedkey}'", user => 'root', group => 'root', logoutput => 'on_failure', diff --git a/manifests/params.pp b/manifests/params.pp index ed698e7..aa0f80d 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -7,7 +7,14 @@ class apt::params { case $::lsbdistid { 'debian': { - $backports_location = 'http://backports.debian.org/debian-backports' + case $::lsbdistcodename { + 'squeeze': { + $backports_location = 'http://backports.debian.org/debian-backports' + } + default: { + $backports_location = 'http://ftp.debian.org/debian/' + } + } } 'ubuntu': { case $::lsbdistcodename { diff --git a/manifests/pin.pp b/manifests/pin.pp index 21cc3ff..39de3d8 100644 --- a/manifests/pin.pp +++ b/manifests/pin.pp @@ -2,15 +2,19 @@ # pin a release in apt, useful for unstable repositories define apt::pin( - $ensure = present, - $explanation = "${::caller_module_name}: ${name}", - $order = '', - $packages = '*', - $priority = 0, - $release = '', - $origin = '', - $originator = '', - $version = '' + $ensure = present, + $explanation = "${::caller_module_name}: ${name}", + $order = '', + $packages = '*', + $priority = 0, + $release = '', # a= + $origin = '', + $version = '', + $codename = '', # n= + $release_version = '', # v= + $component = '', # c= + $originator = '', # o= + $label = '' # l= ) { include apt::params @@ -21,16 +25,37 @@ define apt::pin( fail('Only integers are allowed in the apt::pin order param') } - if $release != '' { - $pin = "release a=${release}" - } elsif $origin != '' { - $pin = "origin \"${origin}\"" - } elsif $originator != '' { - $pin = "release o=${originator}" - } elsif $version != '' { - $pin = "version ${version}" - } else { - $pin = "release a=${name}" + $pin_release_array = [ + $release, + $codename, + $release_version, + $component, + $originator, + $label] + $pin_release = join($pin_release_array, '') + + # Read the manpage 'apt_preferences(5)', especially the chapter + # 'Thea Effect of APT Preferences' to understand the following logic + # and the difference between specific and general form + if $packages != '*' { # specific form + + if ( $pin_release != '' and ( $origin != '' or $version != '' )) or + ( $origin != '' and ( $pin_release != '' or $version != '' )) or + ( $version != '' and ( $pin_release != '' or $origin != '' )) { + fail('parameters release, origin, and version are mutually exclusive') + } + + } else { # general form + + if $version != '' { + fail('parameter version cannot be used in general form') + } + + if ( $pin_release != '' and $origin != '' ) or + ( $origin != '' and $pin_release != '' ) { + fail('parmeters release and origin are mutually exclusive') + } + } $path = $order ? { diff --git a/manifests/source.pp b/manifests/source.pp index a859174..713c7e9 100644 --- a/manifests/source.pp +++ b/manifests/source.pp @@ -12,7 +12,8 @@ define apt::source( $key_server = 'keyserver.ubuntu.com', $key_content = false, $key_source = false, - $pin = false + $pin = false, + $architecture = undef ) { include apt::params @@ -61,6 +62,7 @@ define apt::source( logoutput => 'on_failure', refreshonly => true, subscribe => File["${name}.list"], + before => Exec['apt_update'], } } diff --git a/spec/defines/pin_spec.rb b/spec/defines/pin_spec.rb index 3aaf49c..a4cb1e2 100644 --- a/spec/defines/pin_spec.rb +++ b/spec/defines/pin_spec.rb @@ -12,34 +12,77 @@ describe 'apt::pin', :type => :define do } end - [ {}, + [ + { :params => {}, + :content => "# my_pin\nExplanation: : my_pin\nPackage: *\nPin: release a=my_pin\nPin-Priority: 0\n" + }, { - :packages => 'apache', - :priority => '1' + :params => { + :packages => 'apache', + :priority => '1' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=my_pin\nPin-Priority: 1\n" }, { - :order => 50, - :packages => 'apache', - :priority => '1' + :params => { + :order => 50, + :packages => 'apache', + :priority => '1' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=my_pin\nPin-Priority: 1\n" }, { - :ensure => 'absent', - :packages => 'apache', - :priority => '1' + :params => { + :ensure => 'absent', + :packages => 'apache', + :priority => '1' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=my_pin\nPin-Priority: 1\n" }, { - :packages => 'apache', - :priority => '1', - :release => 'my_newpin' - } + :params => { + :packages => 'apache', + :priority => '1', + :release => 'my_newpin' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=my_newpin\nPin-Priority: 1\n" + }, + { + :params => { + :packages => 'apache', + :priority => '1', + :version => '2.2.16*' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: version 2.2.16*\nPin-Priority: 1\n" + }, + { + :params => { + :priority => '1', + :origin => 'ftp.de.debian.org' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: *\nPin: origin \"ftp.de.debian.org\"\nPin-Priority: 1\n" + }, + { + :params => { + :packages => 'apache', + :priority => '1', + :release => 'stable', + :codename => 'wheezy', + :release_version => '3.0', + :component => 'main', + :originator => 'Debian', + :label => 'Debian' + }, + :content => "# my_pin\nExplanation: : my_pin\nPackage: apache\nPin: release a=stable, n=wheezy, v=3.0, c=main, o=Debian, l=Debian\nPin-Priority: 1\n" + }, ].each do |param_set| describe "when #{param_set == {} ? "using default" : "specifying"} define parameters" do let :param_hash do - default_params.merge(param_set) + default_params.merge(param_set[:params]) end let :params do - param_set + param_set[:params] end it { should include_class("apt::params") } @@ -50,7 +93,7 @@ describe 'apt::pin', :type => :define do 'owner' => 'root', 'group' => 'root', 'mode' => '0644', - 'content' => "# #{title}\nExplanation: : #{title}\nPackage: #{param_hash[:packages]}\nPin: release a=#{param_hash[:release] || title}\nPin-Priority: #{param_hash[:priority]}\n", + 'content' => param_set[:content], }) } end diff --git a/spec/defines/source_spec.rb b/spec/defines/source_spec.rb index 0f37f63..0a8da3d 100644 --- a/spec/defines/source_spec.rb +++ b/spec/defines/source_spec.rb @@ -48,6 +48,9 @@ describe 'apt::source', :type => :define do }, { :release => 'custom', + }, + { + :architecture => 'amd64', } ].each do |param_set| describe "when #{param_set == {} ? "using default" : "specifying"} class parameters" do @@ -69,9 +72,13 @@ describe 'apt::source', :type => :define do let :content do content = "# #{title}" - content << "\ndeb #{param_hash[:location]} #{param_hash[:release]} #{param_hash[:repos]}\n" + if param_hash[:architecture] + arch = "[arch=#{param_hash[:architecture]}]" + end + content << "\ndeb #{arch} #{param_hash[:location]} #{param_hash[:release]} #{param_hash[:repos]}\n" + if param_hash[:include_src] - content << "deb-src #{param_hash[:location]} #{param_hash[:release]} #{param_hash[:repos]}\n" + content << "deb-src #{arch} #{param_hash[:location]} #{param_hash[:release]} #{param_hash[:repos]}\n" end content end @@ -114,7 +121,8 @@ describe 'apt::source', :type => :define do should contain_exec("Required packages: '#{param_hash[:required_packages]}' for #{title}").with({ "command" => "/usr/bin/apt-get -y install #{param_hash[:required_packages]}", "subscribe" => "File[#{title}.list]", - "refreshonly" => true + "refreshonly" => true, + "before" => 'Exec[apt_update]', }) else should_not contain_exec("Required packages: '#{param_hash[:required_packages]}' for #{title}").with({ diff --git a/templates/pin.pref.erb b/templates/pin.pref.erb index 74df8b7..62c44c7 100644 --- a/templates/pin.pref.erb +++ b/templates/pin.pref.erb @@ -1,3 +1,20 @@ +<%- +@pin = "release a=#{@name}" # default value +if @pin_release.length > 0 + options = [] + options.push("a=#{@release}") if @release.length > 0 + options.push("n=#{@codename}") if @codename.length > 0 + options.push("v=#{@release_version}") if @release_version.length > 0 + options.push("c=#{@component}") if @component.length > 0 + options.push("o=#{@originator}") if @originator.length > 0 + options.push("l=#{@label}") if @label.length > 0 + @pin = "release #{options.join(', ')}" +elsif @version.length > 0 + @pin = "version #{@version}" +elsif @origin.length > 0 + @pin = "origin \"#{@origin}\"" +end +-%> # <%= @name %> Explanation: <%= @explanation %> Package: <%= @packages %> diff --git a/templates/source.list.erb b/templates/source.list.erb index 65764b2..845b8ae 100644 --- a/templates/source.list.erb +++ b/templates/source.list.erb @@ -1,5 +1,5 @@ # <%= @name %> -deb <%= @location %> <%= @release_real %> <%= @repos %> +deb <% if @architecture %>[arch=<%= @architecture %>]<% end %> <%= @location %> <%= @release_real %> <%= @repos %> <%- if @include_src then -%> -deb-src <%= @location %> <%= @release_real %> <%= @repos %> +deb-src <% if @architecture %>[arch=<%= @architecture %>]<% end %> <%= @location %> <%= @release_real %> <%= @repos %> <%- end -%> diff --git a/tests/key.pp b/tests/key.pp index 92679cf..cc90f90 100644 --- a/tests/key.pp +++ b/tests/key.pp @@ -2,4 +2,5 @@ apt::key { 'puppetlabs': key => '4BD6EC30', key_server => 'pgp.mit.edu', + key_options => "http-proxy=\"http://proxyuser:proxypass@example.org:3128\"", }