Handle PPA names that contain a plus character.
authorTim Bishop <tim@bishnet.net>
Mon, 18 Jan 2016 21:47:32 +0000 (21:47 +0000)
committerTim Bishop <tim@bishnet.net>
Tue, 19 Jan 2016 10:38:47 +0000 (10:38 +0000)
It looks like add-apt-repository changes pluses to underscores when
creating the sources.list.d file. So the name it creates doesn't match
what Puppet expects, and the resource keeps applying on every Puppet
run.

This works around that problem.

manifests/ppa.pp
spec/defines/ppa_spec.rb

index 6352352c8d54711baeffecb0871c0dfa17bfc4eb..d6b49007608c2f6811d3d4d812b017a200727173 100644 (file)
@@ -16,7 +16,8 @@ define apt::ppa(
 
   $filename_without_slashes = regsubst($name, '/', '-', 'G')
   $filename_without_dots    = regsubst($filename_without_slashes, '\.', '_', 'G')
-  $filename_without_ppa     = regsubst($filename_without_dots, '^ppa:', '', 'G')
+  $filename_without_pluses  = regsubst($filename_without_dots, '\+', '_', 'G')
+  $filename_without_ppa     = regsubst($filename_without_pluses, '^ppa:', '', 'G')
   $sources_list_d_filename  = "${filename_without_ppa}-${release}.list"
 
   if $ensure == 'present' {
index b7a2f6c0046cba98a205f2b6dd5ba004e8986cc1..fe259782550fe7548713409b9936ac054951f76a 100644 (file)
@@ -16,12 +16,12 @@ describe 'apt::ppa' do
       }
     end
 
-    let(:title) { 'ppa:needs/such.substitution/wow' }
+    let(:title) { 'ppa:needs/such.substitution/wow+type' }
     it { is_expected.to_not contain_package('python-software-properties') }
-    it { is_expected.to contain_exec('add-apt-repository-ppa:needs/such.substitution/wow').that_notifies('Class[Apt::Update]').with({
+    it { is_expected.to contain_exec('add-apt-repository-ppa:needs/such.substitution/wow+type').that_notifies('Class[Apt::Update]').with({
       :environment => [],
-      :command     => '/usr/bin/add-apt-repository -y ppa:needs/such.substitution/wow',
-      :unless      => '/usr/bin/test -s /etc/apt/sources.list.d/needs-such_substitution-wow-natty.list',
+      :command     => '/usr/bin/add-apt-repository -y ppa:needs/such.substitution/wow+type',
+      :unless      => '/usr/bin/test -s /etc/apt/sources.list.d/needs-such_substitution-wow_type-natty.list',
       :user        => 'root',
       :logoutput   => 'on_failure',
     })