Saída JSON Ansible

2

Poderia, por favor, me ajudar a buscar a saída do Ansible-Playbook em um formato JSON. Eu recebo uma saída JSON se eu definir a variável stdout_callback como "json" em ansible.cfg

Mas essa saída não está em tempo real. O resultado é mostrado quando todo o playbook é executado. Como posso obter a saída assim que uma tarefa é executada?

    
por user3114179 02.03.2017 / 16:09

1 resposta

5

Definitivamente, existem alguns problemas a superar, mas nada é impossível.

Aqui está algo para você brincar:

Salvar como ./callback_plugins/json_cb.py :

from __future__ import absolute_import
from ansible.plugins.callback import CallbackBase
import json

class CallbackModule(CallbackBase):

    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = 'stdout'
    CALLBACK_NAME = 'json_cb'

    def __init__(self):
        self.tasks = {}

    def dump_result(self, result):
        print(json.dumps(dict(name=self.tasks[result._task._uuid],result=result._result)))

    def v2_playbook_on_task_start(self, task, is_conditional):
        self.tasks[task._uuid] = task.name

    v2_runner_on_ok = dump_result
    v2_runner_on_failed = dump_result

E execute o seu manual de jogo como:

ANSIBLE_STDOUT_CALLBACK=json_cb ansible-playbook myplaybook.yml

Isso imprimirá o objeto JSON para cada tarefa concluída (ok ou com falha).

Mas você vai alimentar isso em alguma outra ferramenta para analisá-lo, não é? Portanto, essa outra ferramenta deve entender o fluxo contínuo de objetos JSON.

    
por 03.03.2017 / 20:53