要将Ansible调试消息重定向到文件,可以使用callback_plugins
插件来实现。以下是一个示例解决方法:
callback_plugins
的目录,并在其中创建一个名为debug_to_file.py
的文件。debug_to_file.py
文件中,添加以下代码:import os
class CallbackModule(object):
def __init__(self):
self.debug_file = os.path.expanduser('~/ansible_debug.log')
def v2_playbook_on_start(self, playbook):
if os.path.exists(self.debug_file):
os.remove(self.debug_file)
def v2_playbook_on_stats(self, stats):
with open(self.debug_file, 'a') as debug_file:
debug_file.write('*** Ansible Debug Messages ***\n')
debug_file.write('\n'.join(self._get_debug_messages()))
def v2_runner_on_failed(self, result, ignore_errors=False):
if result._task_fields.get('ignore_errors', False):
return super().v2_runner_on_failed(result, ignore_errors)
with open(self.debug_file, 'a') as debug_file:
debug_file.write('\n'.join(self._get_debug_messages(result._task)))
def _get_debug_messages(self, task=None):
debug_messages = []
if task:
debug_messages.append('Task: {}\n'.format(task.get_name()))
else:
debug_messages.append('Host: {}\n'.format(result._host.get_name()))
debug_messages.append('--- DEBUG MESSAGES ---')
debug_messages.append('\n'.join([str(msg) for msg in task._result._debug]))
return debug_messages
callback_plugins
目录添加到ANSIBLE_CALLBACK_PLUGINS
环境变量中:export ANSIBLE_CALLBACK_PLUGINS=/path/to/callback_plugins
~/ansible_debug.log
文件,其中将包含调试消息。每次运行时,文件都会被覆盖。请注意,如果您希望将调试消息追加到日志文件中而不是覆盖,请修改debug_to_file.py
文件的逻辑。