Issue
Description of problem:
Customer tried to comment out XML lines with #, leading to a wrongly formatted file in /etc/firewalld/direct.xml. They disabled the service afterwards. Leapp tries to parse that file but should ignore the ParseError like it is done if the file is missing (IOError).
Version-Release number of selected component (if applicable):
leapp-upgrade-el7toel8-0.17.0-1.el7_9
How reproducible:
Always
Steps to Reproduce:
1. cat /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
#<direct>
<rule priority="1" table="filter" ipv="ipv4" chain="OUTPUT">-j DROP</rule>
#</direct>
2. leapp preupgrade
Actual results:
Process Process-234:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python2.7/site-packages/leapp/repository/actor_definition.py", line 72, in _do_run
actor_instance.run(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/leapp/actors/_init_.py", line 289, in run
self.process(*args)
File "/usr/share/leapp-repository/repositories/system_upgrade/el7toel8/actors/firewalldfactsactor/actor.py", line 33, in process
tree = ElementTree.parse('/etc/firewalld/direct.xml')
File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1182, in parse
tree.parse(source, parser)
File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 656, in parse
parser.feed(data)
File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1642, in feed
self._raiseerror(v)
File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1506, in _raiseerror
raise err
ParseError: not well-formed (invalid token): line 2, column 1
======================================================================================================
Actor firewalld_facts_actor unexpectedly terminated with exit code: 1 - Please check the above details
======================================================================================================
Expected results:
Ignore that ParseError, possibly with a warning.
Additional info:
32
try:
33
tree = ElementTree.parse('/etc/firewalld/direct.xml')
34
root = tree.getroot()
35
facts.ebtablesTablesInUse = firewalldfactsactor.getEbtablesTablesInUse(root)
36
except IOError:
37
pass