add apt_key module

Pretty straightforward.  Give it a URL with an exported GPG key for signing an
Apt repository.  It downloads it and will install it using apt-key.  It's even
smart enough to tell if it's already there (i.e. actually tells you if it
changed or not).
This commit is contained in:
Jayson Vantuyl 2013-01-03 14:09:29 -08:00
commit ad6373430b
3 changed files with 408 additions and 0 deletions

View file

@ -10,6 +10,7 @@ import os
import shutil
import time
import tempfile
import urllib2
from nose.plugins.skip import SkipTest
@ -288,3 +289,64 @@ class TestRunner(unittest.TestCase):
])
print result
assert result['changed'] == False
def test_apt_key(self):
try:
key_file = self._get_test_file("apt_key.gpg")
key_file_url = 'file://' + urllib2.quote(key_file)
key_id = '473041FA'
os.environ['ANSIBLE_TEST_APT_KEY'] = 'none'
# key missing, should download and add
result = self._run('apt_key', ['state=present', 'url=' + key_file_url])
assert 'failed' not in result
assert result['added'] == 1
assert result['downloaded'] == 1
assert result['removed'] == 0
assert result['changed']
os.environ["ANSIBLE_TEST_APT_KEY"] = key_id
# key missing, shouldn't download, no changes
result = self._run('apt_key', ['id=12345678', 'state=absent', 'url=' + key_file_url])
assert 'failed' not in result
assert result['added'] == 0
assert result['downloaded'] == 0
assert result['removed'] == 0
assert not result['changed']
# key missing, should download and fail sanity check, no changes
result = self._run('apt_key', ['id=12345678', 'state=present', 'url=' + key_file_url])
assert 'failed' in result
assert result['added'] == 0
assert result['downloaded'] == 1
assert result['removed'] == 0
# key present, shouldn't download, no changes
result = self._run('apt_key', ['id=' + key_id, 'state=present', 'url=' + key_file_url])
assert 'failed' not in result
assert result['added'] == 0
assert result['downloaded'] == 0
assert result['removed'] == 0
assert not result['changed']
# key present, should download to get key id
result = self._run('apt_key', ['state=present', 'url=' + key_file_url])
assert 'failed' not in result
assert result['added'] == 0
assert result['downloaded'] == 1
assert result['removed'] == 0
assert not result['changed']
# key present, should download to get key id and remove
result = self._run('apt_key', ['state=absent', 'url=' + key_file_url])
assert 'failed' not in result
assert result['added'] == 0
assert result['downloaded'] == 1
assert result['removed'] == 1
assert result['changed']
# key present, should remove but not download
result = self._run('apt_key', ['id=' + key_id, 'state=absent', 'url=' + key_file_url])
assert 'failed' not in result
assert result['added'] == 0
assert result['downloaded'] == 0
assert result['removed'] == 1
assert result['changed']
finally:
# always clean up the environment
os.environ.pop('ANSIBLE_TEST_APT_KEY', None)