Merge pull request #404 from WolverineFan/support_40char_fingerprints
Allow full length GPG key fingerprints.
This commit is contained in:
commit
1a7d0790d5
6 changed files with 159 additions and 119 deletions
|
@ -13,27 +13,35 @@ end
|
||||||
|
|
||||||
Puppet::Type.type(:apt_key).provide(:apt_key) do
|
Puppet::Type.type(:apt_key).provide(:apt_key) do
|
||||||
|
|
||||||
KEY_LINE = {
|
|
||||||
:date => '[0-9]{4}-[0-9]{2}-[0-9]{2}',
|
|
||||||
:key_type => '(R|D)',
|
|
||||||
:key_size => '\d{4}',
|
|
||||||
:key_id => '[0-9a-fA-F]+',
|
|
||||||
:expires => 'expire(d|s)',
|
|
||||||
}
|
|
||||||
|
|
||||||
confine :osfamily => :debian
|
confine :osfamily => :debian
|
||||||
defaultfor :osfamily => :debian
|
defaultfor :osfamily => :debian
|
||||||
commands :apt_key => 'apt-key'
|
commands :apt_key => 'apt-key'
|
||||||
|
|
||||||
def self.instances
|
def self.instances
|
||||||
|
cli_args = ['adv','--list-keys', '--with-colons', '--fingerprint']
|
||||||
|
|
||||||
if RUBY_VERSION > '1.8.7'
|
if RUBY_VERSION > '1.8.7'
|
||||||
key_output = apt_key('list').encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')
|
key_output = apt_key(cli_args).encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')
|
||||||
else
|
else
|
||||||
key_output = apt_key('list')
|
key_output = apt_key(cli_args)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
pub_line, fpr_line = nil
|
||||||
|
|
||||||
key_array = key_output.split("\n").collect do |line|
|
key_array = key_output.split("\n").collect do |line|
|
||||||
line_hash = key_line_hash(line)
|
if line.start_with?('pub')
|
||||||
next unless line_hash
|
pub_line = line
|
||||||
|
elsif line.start_with?('fpr')
|
||||||
|
fpr_line = line
|
||||||
|
end
|
||||||
|
|
||||||
|
next unless (pub_line and fpr_line)
|
||||||
|
|
||||||
|
line_hash = key_line_hash(pub_line, fpr_line)
|
||||||
|
|
||||||
|
# reset everything
|
||||||
|
pub_line, fpr_line = nil
|
||||||
|
|
||||||
expired = false
|
expired = false
|
||||||
|
|
||||||
if line_hash[:key_expiry]
|
if line_hash[:key_expiry]
|
||||||
|
@ -41,14 +49,17 @@ Puppet::Type.type(:apt_key).provide(:apt_key) do
|
||||||
end
|
end
|
||||||
|
|
||||||
new(
|
new(
|
||||||
:name => line_hash[:key_id],
|
:name => line_hash[:key_fingerprint],
|
||||||
:id => line_hash[:key_id],
|
:id => line_hash[:key_fingerprint],
|
||||||
:ensure => :present,
|
:fingerprint => line_hash[:key_fingerprint],
|
||||||
:expired => expired,
|
:short => line_hash[:key_short],
|
||||||
:expiry => line_hash[:key_expiry],
|
:long => line_hash[:key_long],
|
||||||
:size => line_hash[:key_size],
|
:ensure => :present,
|
||||||
:type => line_hash[:key_type] == 'R' ? :rsa : :dsa,
|
:expired => expired,
|
||||||
:created => line_hash[:key_created]
|
:expiry => line_hash[:key_expiry],
|
||||||
|
:size => line_hash[:key_size],
|
||||||
|
:type => line_hash[:key_type],
|
||||||
|
:created => line_hash[:key_created]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
key_array.compact!
|
key_array.compact!
|
||||||
|
@ -57,59 +68,50 @@ Puppet::Type.type(:apt_key).provide(:apt_key) do
|
||||||
def self.prefetch(resources)
|
def self.prefetch(resources)
|
||||||
apt_keys = instances
|
apt_keys = instances
|
||||||
resources.keys.each do |name|
|
resources.keys.each do |name|
|
||||||
if name.length == 16
|
if name.length == 40
|
||||||
shortname=name[8..-1]
|
if provider = apt_keys.find{ |key| key.fingerprint == name }
|
||||||
else
|
resources[name].provider = provider
|
||||||
shortname=name
|
end
|
||||||
end
|
elsif name.length == 16
|
||||||
if provider = apt_keys.find{ |key| key.name == shortname }
|
if provider = apt_keys.find{ |key| key.long == name }
|
||||||
resources[name].provider = provider
|
resources[name].provider = provider
|
||||||
|
end
|
||||||
|
elsif name.length == 8
|
||||||
|
if provider = apt_keys.find{ |key| key.short == name }
|
||||||
|
resources[name].provider = provider
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.key_line_hash(line)
|
def self.key_line_hash(pub_line, fpr_line)
|
||||||
line_array = line.match(key_line_regexp).to_a
|
pub_split = pub_line.split(':')
|
||||||
return nil if line_array.length < 5
|
fpr_split = fpr_line.split(':')
|
||||||
|
|
||||||
|
fingerprint = fpr_split.last
|
||||||
return_hash = {
|
return_hash = {
|
||||||
:key_id => line_array[3],
|
:key_fingerprint => fingerprint,
|
||||||
:key_size => line_array[1],
|
:key_long => fingerprint[-16..-1], # last 16 characters of fingerprint
|
||||||
:key_type => line_array[2],
|
:key_short => fingerprint[-8..-1], # last 8 characters of fingerprint
|
||||||
:key_created => line_array[4],
|
:key_size => pub_split[2],
|
||||||
:key_expiry => nil,
|
:key_type => nil,
|
||||||
|
:key_created => pub_split[5],
|
||||||
|
:key_expiry => pub_split[6].empty? ? nil : pub_split[6],
|
||||||
}
|
}
|
||||||
|
|
||||||
return_hash[:key_expiry] = line_array[7] if line_array.length == 8
|
# set key type based on types defined in /usr/share/doc/gnupg/DETAILS.gz
|
||||||
return return_hash
|
case pub_split[3]
|
||||||
end
|
when "1"
|
||||||
|
return_hash[:key_type] = :rsa
|
||||||
|
when "17"
|
||||||
|
return_hash[:key_type] = :dsa
|
||||||
|
when "18"
|
||||||
|
return_hash[:key_type] = :ecc
|
||||||
|
when "19"
|
||||||
|
return_hash[:key_type] = :ecdsa
|
||||||
|
end
|
||||||
|
|
||||||
def self.key_line_regexp
|
return return_hash
|
||||||
# This regexp is trying to match the following output
|
|
||||||
# pub 4096R/4BD6EC30 2010-07-10 [expires: 2016-07-08]
|
|
||||||
# pub 1024D/CD2EFD2A 2009-12-15
|
|
||||||
regexp = /\A
|
|
||||||
pub # match only the public key, not signatures
|
|
||||||
\s+ # bunch of spaces after that
|
|
||||||
(#{KEY_LINE[:key_size]}) # size of the key, usually a multiple of 1024
|
|
||||||
#{KEY_LINE[:key_type]} # type of the key, usually R or D
|
|
||||||
\/ # separator between key_type and key_id
|
|
||||||
(#{KEY_LINE[:key_id]}) # hex id of the key
|
|
||||||
\s+ # bunch of spaces after that
|
|
||||||
(#{KEY_LINE[:date]}) # date the key was added to the keyring
|
|
||||||
# following an optional block which indicates if the key has an expiration
|
|
||||||
# date and if it has expired yet
|
|
||||||
(
|
|
||||||
\s+ # again with thes paces
|
|
||||||
\[ # we open with a square bracket
|
|
||||||
#{KEY_LINE[:expires]} # expires or expired
|
|
||||||
\: # a colon
|
|
||||||
\s+ # more spaces
|
|
||||||
(#{KEY_LINE[:date]}) # date indicating key expiry
|
|
||||||
\] # we close with a square bracket
|
|
||||||
)? # end of the optional block
|
|
||||||
\Z/x
|
|
||||||
regexp
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def source_to_file(value)
|
def source_to_file(value)
|
||||||
|
|
|
@ -28,8 +28,8 @@ Puppet::Type.newtype(:apt_key) do
|
||||||
newparam(:id, :namevar => true) do
|
newparam(:id, :namevar => true) do
|
||||||
desc 'The ID of the key you want to manage.'
|
desc 'The ID of the key you want to manage.'
|
||||||
# GPG key ID's should be either 32-bit (short) or 64-bit (long) key ID's
|
# GPG key ID's should be either 32-bit (short) or 64-bit (long) key ID's
|
||||||
# and may start with the optional 0x
|
# and may start with the optional 0x, or they can be 40-digit key fingerprints
|
||||||
newvalues(/\A(0x)?[0-9a-fA-F]{8}\Z/, /\A(0x)?[0-9a-fA-F]{16}\Z/)
|
newvalues(/\A(0x)?[0-9a-fA-F]{8}\Z/, /\A(0x)?[0-9a-fA-F]{16}\Z/, /\A(0x)?[0-9a-fA-F]{40}\Z/)
|
||||||
munge do |value|
|
munge do |value|
|
||||||
if value.start_with?('0x')
|
if value.start_with?('0x')
|
||||||
id = value.partition('0x').last.upcase
|
id = value.partition('0x').last.upcase
|
||||||
|
@ -66,6 +66,30 @@ Puppet::Type.newtype(:apt_key) do
|
||||||
desc 'Additional options to pass to apt-key\'s --keyserver-options.'
|
desc 'Additional options to pass to apt-key\'s --keyserver-options.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
newproperty(:fingerprint) do
|
||||||
|
desc <<-EOS
|
||||||
|
The 40-digit hexadecimal fingerprint of the specified GPG key.
|
||||||
|
|
||||||
|
This property is read-only.
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
newproperty(:long) do
|
||||||
|
desc <<-EOS
|
||||||
|
The 16-digit hexadecimal id of the specified GPG key.
|
||||||
|
|
||||||
|
This property is read-only.
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
newproperty(:short) do
|
||||||
|
desc <<-EOS
|
||||||
|
The 8-digit hexadecimal id of the specified GPG key.
|
||||||
|
|
||||||
|
This property is read-only.
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
newproperty(:expired) do
|
newproperty(:expired) do
|
||||||
desc <<-EOS
|
desc <<-EOS
|
||||||
Indicates if the key has expired.
|
Indicates if the key has expired.
|
||||||
|
@ -92,7 +116,7 @@ Puppet::Type.newtype(:apt_key) do
|
||||||
|
|
||||||
newproperty(:type) do
|
newproperty(:type) do
|
||||||
desc <<-EOS
|
desc <<-EOS
|
||||||
The key type, either RSA or DSA.
|
The key type, one of: rsa, dsa, ecc, ecdsa
|
||||||
|
|
||||||
This property is read-only.
|
This property is read-only.
|
||||||
EOS
|
EOS
|
||||||
|
|
|
@ -10,9 +10,11 @@
|
||||||
# [*key*]
|
# [*key*]
|
||||||
# _default_: +$title+, the title/name of the resource
|
# _default_: +$title+, the title/name of the resource
|
||||||
#
|
#
|
||||||
# Is a GPG key ID. This key ID is validated with a regex enforcing it
|
# Is a GPG key ID or full key fingerprint. This value is validated with
|
||||||
# to only contain valid hexadecimal characters, be precisely 8 or 16
|
# a regex enforcing it to only contain valid hexadecimal characters, be
|
||||||
# characters long and optionally prefixed with 0x.
|
# precisely 8 or 16 hexadecimal characters long and optionally prefixed
|
||||||
|
# with 0x for key IDs, or 40 hexadecimal characters long for key
|
||||||
|
# fingerprints.
|
||||||
#
|
#
|
||||||
# [*ensure*]
|
# [*ensure*]
|
||||||
# _default_: +present+
|
# _default_: +present+
|
||||||
|
@ -57,7 +59,7 @@ define apt::key (
|
||||||
$key_options = undef,
|
$key_options = undef,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
validate_re($key, ['\A(0x)?[0-9a-fA-F]{8}\Z', '\A(0x)?[0-9a-fA-F]{16}\Z'])
|
validate_re($key, ['\A(0x)?[0-9a-fA-F]{8}\Z', '\A(0x)?[0-9a-fA-F]{16}\Z', '\A(0x)?[0-9a-fA-F]{40}\Z'])
|
||||||
validate_re($ensure, ['\Aabsent|present\Z',])
|
validate_re($ensure, ['\Aabsent|present\Z',])
|
||||||
|
|
||||||
if $key_content {
|
if $key_content {
|
||||||
|
|
|
@ -1,20 +1,27 @@
|
||||||
require 'spec_helper_acceptance'
|
require 'spec_helper_acceptance'
|
||||||
|
|
||||||
PUPPETLABS_GPG_KEY_ID = '4BD6EC30'
|
PUPPETLABS_GPG_KEY_SHORT_ID = '4BD6EC30'
|
||||||
PUPPETLABS_GPG_LONG_KEY_ID = '1054B7A24BD6EC30'
|
PUPPETLABS_GPG_KEY_LONG_ID = '1054B7A24BD6EC30'
|
||||||
PUPPETLABS_APT_URL = 'apt.puppetlabs.com'
|
PUPPETLABS_GPG_KEY_FINGERPRINT = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
|
||||||
PUPPETLABS_GPG_KEY_FILE = 'pubkey.gpg'
|
PUPPETLABS_APT_URL = 'apt.puppetlabs.com'
|
||||||
CENTOS_GPG_KEY_ID = 'C105B9DE'
|
PUPPETLABS_GPG_KEY_FILE = 'pubkey.gpg'
|
||||||
CENTOS_REPO_URL = 'ftp.cvut.cz/centos'
|
CENTOS_GPG_KEY_SHORT_ID = 'C105B9DE'
|
||||||
CENTOS_GPG_KEY_FILE = 'RPM-GPG-KEY-CentOS-6'
|
CENTOS_GPG_KEY_LONG_ID = '0946FCA2C105B9DE'
|
||||||
|
CENTOS_GPG_KEY_FINGERPRINT = 'C1DAC52D1664E8A4386DBA430946FCA2C105B9DE'
|
||||||
|
CENTOS_REPO_URL = 'ftp.cvut.cz/centos'
|
||||||
|
CENTOS_GPG_KEY_FILE = 'RPM-GPG-KEY-CentOS-6'
|
||||||
|
|
||||||
|
KEY_CHECK_COMMAND = "apt-key adv --list-keys --with-colons --fingerprint | grep "
|
||||||
|
PUPPETLABS_KEY_CHECK_COMMAND = "#{KEY_CHECK_COMMAND} #{PUPPETLABS_GPG_KEY_FINGERPRINT}"
|
||||||
|
CENTOS_KEY_CHECK_COMMAND = "#{KEY_CHECK_COMMAND} #{CENTOS_GPG_KEY_FINGERPRINT}"
|
||||||
|
|
||||||
describe 'apt_key' do
|
describe 'apt_key' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
# Delete twice to make sure everything is cleaned
|
# Delete twice to make sure everything is cleaned
|
||||||
# up after the short key collision
|
# up after the short key collision
|
||||||
shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}",
|
shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}",
|
||||||
:acceptable_exit_codes => [0,1,2])
|
:acceptable_exit_codes => [0,1,2])
|
||||||
shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}",
|
shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}",
|
||||||
:acceptable_exit_codes => [0,1,2])
|
:acceptable_exit_codes => [0,1,2])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,12 +29,16 @@ describe 'apt_key' do
|
||||||
key_versions = {
|
key_versions = {
|
||||||
'32bit key id' => '4BD6EC30',
|
'32bit key id' => '4BD6EC30',
|
||||||
'64bit key id' => '1054B7A24BD6EC30',
|
'64bit key id' => '1054B7A24BD6EC30',
|
||||||
|
'160bit key fingerprint' => '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
|
||||||
'32bit lowercase key id' => '4bd6ec30',
|
'32bit lowercase key id' => '4bd6ec30',
|
||||||
'64bit lowercase key id' => '1054b7a24bd6ec30',
|
'64bit lowercase key id' => '1054b7a24bd6ec30',
|
||||||
|
'160bit lowercase key fingerprint' => '47b320eb4c7c375aa9dae1a01054b7a24bd6ec30',
|
||||||
'0x formatted 32bit key id' => '0x4BD6EC30',
|
'0x formatted 32bit key id' => '0x4BD6EC30',
|
||||||
'0x formatted 64bit key id' => '0x1054B7A24BD6EC30',
|
'0x formatted 64bit key id' => '0x1054B7A24BD6EC30',
|
||||||
|
'0x formatted 160bit key fingerprint' => '0x47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
|
||||||
'0x formatted 32bit lowercase key id' => '0x4bd6ec30',
|
'0x formatted 32bit lowercase key id' => '0x4bd6ec30',
|
||||||
'0x formatted 64bit lowercase key id' => '0x1054b7a24bd6ec30',
|
'0x formatted 64bit lowercase key id' => '0x1054b7a24bd6ec30',
|
||||||
|
'0x formatted 160bit lowercase key fingerprint' => '0x47b320eb4c7c375aa9dae1a01054b7a24bd6ec30',
|
||||||
}
|
}
|
||||||
|
|
||||||
key_versions.each do |key, value|
|
key_versions.each do |key, value|
|
||||||
|
@ -42,7 +53,7 @@ describe 'apt_key' do
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_changes => true)
|
apply_manifest(pp, :catch_changes => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -67,25 +78,25 @@ describe 'apt_key' do
|
||||||
it 'is removed' do
|
it 'is removed' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'centos':
|
apt_key { 'centos':
|
||||||
id => '#{CENTOS_GPG_KEY_ID}',
|
id => '#{CENTOS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'absent',
|
ensure => 'absent',
|
||||||
}
|
}
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
# Install the key first
|
# Install the key first
|
||||||
shell("apt-key adv --keyserver keyserver.ubuntu.com \
|
shell("apt-key adv --keyserver keyserver.ubuntu.com \
|
||||||
--recv-keys #{CENTOS_GPG_KEY_ID}")
|
--recv-keys #{CENTOS_GPG_KEY_FINGERPRINT}")
|
||||||
shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}")
|
shell(CENTOS_KEY_CHECK_COMMAND)
|
||||||
|
|
||||||
# Time to remove it using Puppet
|
# Time to remove it using Puppet
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
|
|
||||||
shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}",
|
shell(CENTOS_KEY_CHECK_COMMAND,
|
||||||
:acceptable_exit_codes => [1])
|
:acceptable_exit_codes => [1])
|
||||||
|
|
||||||
shell("apt-key adv --keyserver keyserver.ubuntu.com \
|
shell("apt-key adv --keyserver keyserver.ubuntu.com \
|
||||||
--recv-keys #{CENTOS_GPG_KEY_ID}")
|
--recv-keys #{CENTOS_GPG_KEY_FINGERPRINT}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -93,21 +104,21 @@ describe 'apt_key' do
|
||||||
it 'is removed' do
|
it 'is removed' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'absent',
|
ensure => 'absent',
|
||||||
}
|
}
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
# Install the key first
|
# Install the key first
|
||||||
shell("apt-key adv --keyserver keyserver.ubuntu.com \
|
shell("apt-key adv --keyserver keyserver.ubuntu.com \
|
||||||
--recv-keys #{PUPPETLABS_GPG_LONG_KEY_ID}")
|
--recv-keys #{PUPPETLABS_GPG_KEY_LONG_ID}")
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
|
|
||||||
# Time to remove it using Puppet
|
# Time to remove it using Puppet
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
|
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}",
|
shell(PUPPETLABS_KEY_CHECK_COMMAND,
|
||||||
:acceptable_exit_codes => [1])
|
:acceptable_exit_codes => [1])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -118,7 +129,7 @@ describe 'apt_key' do
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
|
content => "-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
Version: GnuPG v1.4.12 (GNU/Linux)
|
Version: GnuPG v1.4.12 (GNU/Linux)
|
||||||
|
@ -185,7 +196,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -193,7 +204,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails' do
|
it 'fails' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
content => 'For posterity: such content, much bogus, wow',
|
content => 'For posterity: such content, much bogus, wow',
|
||||||
}
|
}
|
||||||
|
@ -211,7 +222,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
server => 'pgp.mit.edu',
|
server => 'pgp.mit.edu',
|
||||||
}
|
}
|
||||||
|
@ -219,7 +230,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -227,7 +238,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_FINGERPRINT}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
server => 'hkp://pgp.mit.edu:80',
|
server => 'hkp://pgp.mit.edu:80',
|
||||||
}
|
}
|
||||||
|
@ -235,7 +246,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -243,7 +254,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails' do
|
it 'fails' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
server => 'nonexistant.key.server',
|
server => 'nonexistant.key.server',
|
||||||
}
|
}
|
||||||
|
@ -259,7 +270,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails' do
|
it 'fails' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
server => '.pgp.key.server',
|
server => '.pgp.key.server',
|
||||||
}
|
}
|
||||||
|
@ -277,7 +288,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
|
source => 'http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
|
||||||
}
|
}
|
||||||
|
@ -285,13 +296,13 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails with a 404' do
|
it 'fails with a 404' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
|
source => 'http://#{PUPPETLABS_APT_URL}/herpderp.gpg',
|
||||||
}
|
}
|
||||||
|
@ -305,7 +316,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails with a socket error' do
|
it 'fails with a socket error' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'http://apt.puppetlabss.com/herpderp.gpg',
|
source => 'http://apt.puppetlabss.com/herpderp.gpg',
|
||||||
}
|
}
|
||||||
|
@ -319,14 +330,14 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
context 'ftp://' do
|
context 'ftp://' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
shell("apt-key del #{CENTOS_GPG_KEY_ID}",
|
shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}",
|
||||||
:acceptable_exit_codes => [0,1,2])
|
:acceptable_exit_codes => [0,1,2])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'CentOS 6':
|
apt_key { 'CentOS 6':
|
||||||
id => '#{CENTOS_GPG_KEY_ID}',
|
id => '#{CENTOS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
|
source => 'ftp://#{CENTOS_REPO_URL}/#{CENTOS_GPG_KEY_FILE}',
|
||||||
}
|
}
|
||||||
|
@ -334,13 +345,13 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{CENTOS_GPG_KEY_ID}")
|
shell(CENTOS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails with a 550' do
|
it 'fails with a 550' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'CentOS 6':
|
apt_key { 'CentOS 6':
|
||||||
id => '#{CENTOS_GPG_KEY_ID}',
|
id => '#{CENTOS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
|
source => 'ftp://#{CENTOS_REPO_URL}/herpderp.gpg',
|
||||||
}
|
}
|
||||||
|
@ -354,7 +365,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails with a socket error' do
|
it 'fails with a socket error' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
|
source => 'ftp://apt.puppetlabss.com/herpderp.gpg',
|
||||||
}
|
}
|
||||||
|
@ -370,7 +381,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
|
source => 'https://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}',
|
||||||
}
|
}
|
||||||
|
@ -378,7 +389,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails with a 404' do
|
it 'fails with a 404' do
|
||||||
|
@ -431,7 +442,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -439,7 +450,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails' do
|
it 'fails' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => '/tmp/totally_bogus.file',
|
source => '/tmp/totally_bogus.file',
|
||||||
}
|
}
|
||||||
|
@ -462,7 +473,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'fails' do
|
it 'fails' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
source => '/tmp/fake-key.gpg',
|
source => '/tmp/fake-key.gpg',
|
||||||
}
|
}
|
||||||
|
@ -480,7 +491,7 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
it 'works' do
|
it 'works' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
keyserver_options => 'debug',
|
keyserver_options => 'debug',
|
||||||
}
|
}
|
||||||
|
@ -488,19 +499,19 @@ ugVIB2pi+8u84f+an4Hml4xlyijgYu05pqNvnLRyJDLd61hviLC8GYU=
|
||||||
|
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
apply_manifest(pp, :catch_failures => true)
|
apply_manifest(pp, :catch_failures => true)
|
||||||
shell("apt-key list | grep #{PUPPETLABS_GPG_KEY_ID}")
|
shell(PUPPETLABS_KEY_CHECK_COMMAND)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'fails on invalid options' do
|
it 'fails on invalid options' do
|
||||||
pp = <<-EOS
|
pp = <<-EOS
|
||||||
apt_key { 'puppetlabs':
|
apt_key { 'puppetlabs':
|
||||||
id => '#{PUPPETLABS_GPG_KEY_ID}',
|
id => '#{PUPPETLABS_GPG_KEY_LONG_ID}',
|
||||||
ensure => 'present',
|
ensure => 'present',
|
||||||
keyserver_options => 'this is totally bonkers',
|
keyserver_options => 'this is totally bonkers',
|
||||||
}
|
}
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
shell("apt-key del #{PUPPETLABS_GPG_KEY_ID}", :acceptable_exit_codes => [0,1,2])
|
shell("apt-key del #{PUPPETLABS_GPG_KEY_FINGERPRINT}", :acceptable_exit_codes => [0,1,2])
|
||||||
apply_manifest(pp, :expect_failures => true) do |r|
|
apply_manifest(pp, :expect_failures => true) do |r|
|
||||||
expect(r.stderr).to match(/--keyserver-options this is totally/)
|
expect(r.stderr).to match(/--keyserver-options this is totally/)
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe 'apt::key', :type => :define do
|
describe 'apt::key', :type => :define do
|
||||||
let(:facts) { { :lsbdistid => 'Debian' } }
|
let(:facts) { { :lsbdistid => 'Debian' } }
|
||||||
GPG_KEY_ID = '4BD6EC30'
|
GPG_KEY_ID = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
|
||||||
|
|
||||||
let :title do
|
let :title do
|
||||||
GPG_KEY_ID
|
GPG_KEY_ID
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe 'apt::source', :type => :define do
|
describe 'apt::source', :type => :define do
|
||||||
GPG_KEY_ID = '4BD6EC30'
|
GPG_KEY_ID = '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30'
|
||||||
|
|
||||||
|
|
||||||
let :title do
|
let :title do
|
||||||
'my_source'
|
'my_source'
|
||||||
|
|
Loading…
Reference in a new issue