Параметры форматирования вывода Ansible

Есть ли возможность отформатировать вывод ansible с использованием ansible (а не каких-либо других скриптов)? Например

name: Show version
  sudo: true
  hosts: web_front_end
  tasks:
    - name: Create yum cache
      shell: yum makecache
    - name: Check the version of Portal
      shell: rpm -qa | grep portal
      register: portal
    - debug: msg={{portal.stdout}}
  tags:
    - portal
    - wfe

Я хотел бы получить только

TASK: [debug msg={{portal.stdout}}]

часть. Или даже есть способ получить только вывод команды оболочки?


person FRC    schedule 17.02.2015    source источник
comment
Я довольно хорошо знаю Ansible, но никогда не видел ни одной функции, которая могла бы помочь вам в этом.   -  person udondan    schedule 17.02.2015
comment
Вы можете просто передать вывод Ansible и обработать его с помощью perl/sed/awk/любого инструмента bash, который может это сделать... есть ли какие-то проблемы с этим подходом? Было бы очень легко избавиться от этого таким образом.   -  person Michal Gasek    schedule 18.02.2015
comment
Я знаю, что нет проблем с написанием инструмента python/ruby/perl/sed/awk/любого для этого, но я хотел выполнить задание Jenkins и избежать любых других задействованных сценариев.   -  person FRC    schedule 18.02.2015
comment
Я не понимаю, как это проблема в Дженкинсе, он может выполнять bash? Если вам нужно вызвать Ansible через ansible host1 playbook.yml, вы также можете направить его вывод на perl: ansible host1 playbook.yml | perl -ne 'do_perl_magic_that_prints_only_what_you_want'   -  person Michal Gasek    schedule 18.02.2015
comment
Это может быть полезно в качестве примера: $ echo -e "TASK: [debug msg="MY_VERSION: {{1.2.3a}}" ]\nSomething from Ansible\nSomething else from Ansible output\n" | perl -ne '($portal) = $_ =~ /\{\{(.+?)\}\}/g if /MY_VERSION/; END { print $portal; }'... это просто напечатает 1.2.3a   -  person Michal Gasek    schedule 18.02.2015
comment
@FRC, возможно, обновите свой вопрос и опишите, какова ваша конечная цель? Вы пытаетесь записать результаты запуска Ansible в журнал Jenkins?   -  person Mxx    schedule 18.02.2015
comment
В поисках того же, у меня есть большие результаты, которые я не могу прочитать из-за части \r\n.   -  person sorin    schedule 24.02.2016


Ответы (2)


У меня есть плагин для форматирования вывода. Суть здесь, но суть такова:

# Save as <folder with your playbook>/callback_plugins/<some name>.py
# Optionally use no_log: True on your playbook/roles/tasks to suppress other output

import sys
import pprint

class CallbackModule(CallbackBase):

    def log(self, host, category, data):
        pp = pprint.PrettyPrinter(indent=2, stream=sys.stdout)
        pp.pprint(data)
person Matthias Winkelmann    schedule 22.05.2016

По сути, у вас есть два варианта. Один из них — сделать то, что люди описали выше, а именно передать вывод команды ansible таким вещам, как perl, sed, awk и т. д.

Второй вариант — написать собственный скрипт Python, который напрямую вызывает ansible. Ansible написан на Python, поэтому вы можете вызывать его непосредственно из собственного кода Python. Документация Ansible по его Python API подробно описывает, как это сделать.

person Bruce P    schedule 18.02.2015