Merge pull request #1058 from puppetlabs/issue-1057
authorCraig Gumbley <craiggumbley@gmail.com>
Wed, 31 Aug 2022 17:22:23 +0000 (18:22 +0100)
committerGitHub <noreply@github.com>
Wed, 31 Aug 2022 17:22:23 +0000 (18:22 +0100)
1  2 
manifests/ppa.pp
spec/defines/ppa_spec.rb

diff --combined manifests/ppa.pp
index f6cba8d38abff2d597797b7ac98f9627f9d5def0,7ea5c4ca1a08a6dca7d642a7c8c970193bbf99ad..ed7057c8539f0be47011e78197241a87cddefa48
@@@ -40,7 -40,7 +40,7 @@@ define apt::ppa 
    }
  
    # Validate the resource name
-   if $name !~ /^ppa:([a-zA-Z0-9\-_]+)\/([a-zA-z0-9\-_]+)$/ {
+   if $name !~ /^ppa:([a-zA-Z0-9\-_]+)\/([a-zA-z0-9\-_\.]+)$/ {
      fail("Invalid PPA name: ${name}")
    }
  
@@@ -67,9 -67,8 +67,9 @@@
      $trusted_gpg_d_filename = "${dash_filename_no_specialchars}.gpg"
    }
  
 -  # This is the location of our main exec script  
 -  $script_path = "/opt/puppetlabs/puppet/cache/add-apt-repository-${dash_filename_no_specialchars}-${release}.sh"
 +  # This is the location of our main exec script.
 +  $cache_path = $facts['puppet_vardir']
 +  $script_path = "${cache_path}/add-apt-repository-${dash_filename_no_specialchars}-${release}.sh"
  
    if $ensure == 'present' {
      if $package_manage {
diff --combined spec/defines/ppa_spec.rb
index 74265cde99bbc5376ec31962f70d42cf862e3bb5,8d0c4f926342a9a320f3ebca2429e966021f48b1..b8e734d09ff294b918a5a8f25a45c8551671cca1
@@@ -30,7 -30,6 +30,7 @@@ describe 'apt::ppa' d
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache'
        }
      end
  
      }
    end
  
+   [
+     'ppa:foo/bar',
+     'ppa:foo/bar1.0',
+     'ppa:foo10/bar10',
+     'ppa:foo-/bar_',
+   ].each do |value|
+     describe 'valid resource names' do
+       let :facts do
+         {
+           os: {
+             family: 'Debian',
+             name: 'Ubuntu',
+             release: {
+               major: '18',
+               full: '18.04',
+             },
+             distro: {
+               codename: 'trusty',
+               id: 'Ubuntu',
+             },
+           },
+         }
+       end
+       let(:title) { value }
+       it { is_expected.not_to raise_error }
+       it { is_expected.to contain_exec("add-apt-repository-#{value}") }
+     end
+   end
+   [
+     'ppa:foo!/bar',
+     'ppa:foo/bar!',
+     'ppa:foo1.0/bar',
+     'ppa:foo/bar/foobar',
+     '|| ls -la ||',
+     '|| touch /tmp/foo.txt ||',
+   ].each do |value|
+     describe 'invalid resource names' do
+       let :facts do
+         {
+           os: {
+             family: 'Debian',
+             name: 'Ubuntu',
+             release: {
+               major: '18',
+               full: '18.04',
+             },
+             distro: {
+               codename: 'trusty',
+               id: 'Ubuntu',
+             },
+           },
+         }
+       end
+       let(:title) { value }
+       it { is_expected.to raise_error(Puppet::PreformattedError, %r{Invalid PPA name: #{value}}) }
+     end
+   end
    describe 'Ubuntu 15.10 sources.list filename' do
      let :facts do
        {
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end
  
              id: 'Ubuntu',
            },
          },
 +        puppet_vardir: '/opt/puppetlabs/puppet/cache',
        }
      end