mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Emit warnings when safe_eval() raises a SyntaxError or other Exception (#14304)
This change is related to reported issue #14291 and pull request #14293. Without the fix from #14293, this change will emit a warning as shown below, on the following playbook: ``yaml --- - hosts: localhost gather_facts: no vars: works: key1: 'string' key2: 1234 fails: key1: 'string' key2: 1234 key3: false tasks: - debug: msg={{ works | to_json }} - debug: msg={{ fails | to_json }} ``` On error, this results in a proper warning: ``` [dag@moria ansible.dag]$ ansible-playbook test49.yml PLAY *************************************************************************** TASK [debug] ******************************************************************* ok: [localhost] => { "msg": { "key1": "string", "key2": 1234 } } TASK [debug] ******************************************************************* [WARNING]: Error in expression "{"key3": false, "key2": 1234, "key1": "string"}". (name 'false' is not defined) ok: [localhost] => { "msg": "{\"key3\": false, \"key2\": 1234, \"key1\": \"string\"}" } PLAY RECAP ********************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0 ```
This commit is contained in:
parent
1268f4778d
commit
56148291e9
1 changed files with 8 additions and 1 deletions
|
@ -26,6 +26,12 @@ from ansible.compat.six.moves import builtins
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
from ansible.plugins import filter_loader, test_loader
|
from ansible.plugins import filter_loader, test_loader
|
||||||
|
|
||||||
|
try:
|
||||||
|
from __main__ import display
|
||||||
|
except ImportError:
|
||||||
|
from ansible.utils.display import Display
|
||||||
|
display = Display()
|
||||||
|
|
||||||
def safe_eval(expr, locals={}, include_exceptions=False):
|
def safe_eval(expr, locals={}, include_exceptions=False):
|
||||||
'''
|
'''
|
||||||
This is intended for allowing things like:
|
This is intended for allowing things like:
|
||||||
|
@ -131,13 +137,14 @@ def safe_eval(expr, locals={}, include_exceptions=False):
|
||||||
else:
|
else:
|
||||||
return result
|
return result
|
||||||
except SyntaxError as e:
|
except SyntaxError as e:
|
||||||
|
display.warning('SyntaxError in safe_eval() on expr: %s (%s)' % (expr, e))
|
||||||
# special handling for syntax errors, we just return
|
# special handling for syntax errors, we just return
|
||||||
# the expression string back as-is
|
# the expression string back as-is
|
||||||
if include_exceptions:
|
if include_exceptions:
|
||||||
return (expr, None)
|
return (expr, None)
|
||||||
return expr
|
return expr
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
display.warning('Exception in safe_eval() on expr: %s (%s)' % (expr, e))
|
||||||
if include_exceptions:
|
if include_exceptions:
|
||||||
return (expr, e)
|
return (expr, e)
|
||||||
return expr
|
return expr
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue