apt: update cache until corrupt package lists are fixed (#5448)
* apt: If the cache object fails to lost due to a corrupt file, try to update the cache until it is fixed. * Append -q to the update parameters * Remove unused variable * Use a string that doesn't rely on internationalization * Use py24 exception style * Use get_exception Fixes #2951
This commit is contained in:
parent
ba6bc5382d
commit
60dd2f1fff
1 changed files with 28 additions and 1 deletions
|
@ -755,6 +755,31 @@ def get_updated_cache_time():
|
||||||
return mtimestamp, updated_cache_time
|
return mtimestamp, updated_cache_time
|
||||||
|
|
||||||
|
|
||||||
|
# https://github.com/ansible/ansible-modules-core/issues/2951
|
||||||
|
def get_cache(module):
|
||||||
|
'''Attempt to get the cache object and update till it works'''
|
||||||
|
cache = None
|
||||||
|
try:
|
||||||
|
cache = apt.Cache()
|
||||||
|
except SystemError:
|
||||||
|
e = get_exception()
|
||||||
|
if '/var/lib/apt/lists/' in str(e).lower():
|
||||||
|
# update cache until files are fixed or retries exceeded
|
||||||
|
retries = 0
|
||||||
|
while retries < 2:
|
||||||
|
(rc, so, se) = module.run_command(['apt-get', 'update', '-q'])
|
||||||
|
retries += 1
|
||||||
|
if rc == 0:
|
||||||
|
break
|
||||||
|
if rc != 0:
|
||||||
|
module.fail_json(msg='Updating the cache to correct corrupt package lists failed:\n%s\n%s' % (str(e), str(so) + str(se)))
|
||||||
|
# try again
|
||||||
|
cache = apt.Cache()
|
||||||
|
else:
|
||||||
|
module.fail_json(msg=str(e))
|
||||||
|
return cache
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
|
@ -821,8 +846,10 @@ def main():
|
||||||
if p['state'] == 'removed':
|
if p['state'] == 'removed':
|
||||||
p['state'] = 'absent'
|
p['state'] = 'absent'
|
||||||
|
|
||||||
|
# Get the cache object
|
||||||
|
cache = get_cache(module)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cache = apt.Cache()
|
|
||||||
if p['default_release']:
|
if p['default_release']:
|
||||||
try:
|
try:
|
||||||
apt_pkg.config['APT::Default-Release'] = p['default_release']
|
apt_pkg.config['APT::Default-Release'] = p['default_release']
|
||||||
|
|
Loading…
Reference in a new issue