Hello all,
I'm running some Ansible commands from within a flask application via the
Python
API <http://docs.ansible.com/developing_api.html>.
Ansible version: 1.8.2
Python version: 2.7
In my home directory, I have .ansible.cfg with the following contents:
[defaults]
> host_key_checking = False
> log_path=/tmp/ansible.log
>
The issue I'm having is that as soon as the runner is imported (see
attached stack trace later in this post), the log_path defined above
overrides the current logging location (in this case, stdout).
I've tracked it down to the following line:
logging.basicConfig(filename=path, level=logging.DEBUG, format='%(asctime)s
> %(name)s %(message)s')
Line 40 in *site-packages/ansible/callbacks.py*
Note that it also changes the format and minimum logging level which is
problematic.
Is there currently an undocumented/unofficial way to retain my default
log_path, while avoiding this issue (when using the Python API)?
Traceback of where it is imported and modified:
File "/home/dev3/projects/tcg-cas/app/util.py", line 5, in <module>
from ansible.runner import Runner
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/runner/__init__.py",
>
> line 37, in <module>
import ansible.inventory
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/inventory/__init__.py",
>
> line 26, in <module>
from ansible.inventory.ini import InventoryParser
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/inventory/ini.py",
>
> line 21, in <module>
from ansible.inventory.host import Host
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/inventory/host.py",
>
> line 19, in <module>
from ansible import utils
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/utils/__init__.py",
>
> line 29, in <module>
from ansible.utils.display_functions import *
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/utils/display_functions.py",
>
> line 22, in <module>
from ansible.callbacks import display
File
> "/home/dev3/projects/tcg-cas/local/lib/python2.7/site-packages/ansible/callbacks.py",
>
> line 33, in <module>
raise Exception()
The original line where I placed the exception was as follows:
> logging.basicConfig(filename=path, level=logging.DEBUG,
> format='%(asctime)s %(name)s %(message)s')
If there's currently no way around this, does anyone with more knowledge of
the Ansible ecosystem have any ideas of how this could be fixed from within
Ansible?
For the moment, my solution is to overwrite the constant DEFAULT_LOG_PATH
just before the first import of the Ansible runner like so:
from ansible import constants
> constants.DEFAULT_LOG_PATH = ''
> from ansible.runner import Runner
The offending code will be skipped due to the surrounding conditional, but
this is obviously horribly fragile and way less than ideal.
Anyone have any thoughts on this?
Thanks!
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/a5a7fe08-f114-482f-98ca-37e859df4b4a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.