apt_repository: Fix crash caused by cache.update() raising an IOError on timeout. (#51996)
* Fix crash caused by cache.update() raising an IOError on timeout. * Add changelog fragment.
This commit is contained in:
parent
c47e9d22b4
commit
79bb7bde5f
2 changed files with 14 additions and 2 deletions
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- apt_repository - Fix crash caused by ``cache.update()`` raising an ``IOError`` due to a timeout in ``apt update`` (https://github.com/ansible/ansible/issues/51995)
|
|
@ -108,6 +108,7 @@ import os
|
|||
import re
|
||||
import sys
|
||||
import tempfile
|
||||
import copy
|
||||
|
||||
try:
|
||||
import apt
|
||||
|
@ -515,6 +516,7 @@ def main():
|
|||
else:
|
||||
module.fail_json(msg='Module apt_repository is not supported on target.')
|
||||
|
||||
sourceslist_before = copy.deepcopy(sourceslist)
|
||||
sources_before = sourceslist.dump()
|
||||
|
||||
try:
|
||||
|
@ -544,8 +546,16 @@ def main():
|
|||
if update_cache:
|
||||
cache = apt.Cache()
|
||||
cache.update()
|
||||
except OSError as err:
|
||||
module.fail_json(msg=to_native(err))
|
||||
except (OSError, IOError) as err:
|
||||
# Revert the sourcelist files to their previous state.
|
||||
# First remove any new files that were created:
|
||||
for filename in set(sources_after.keys()).difference(sources_before.keys()):
|
||||
if os.path.exists(filename):
|
||||
os.remove(filename)
|
||||
# Now revert the existing files to their former state:
|
||||
sourceslist_before.save()
|
||||
# Return an error message.
|
||||
module.fail_json(msg='apt cache update failed')
|
||||
|
||||
module.exit_json(changed=changed, repo=repo, state=state, diff=diff)
|
||||
|
||||
|
|
Loading…
Reference in a new issue