Анализ вывода Ansible с помощью инструментов Linux

У меня есть глупый плейбук, который просто запускает команду для получения списка виртуальных хостов на каждом хосте в группе веб-серверов. Поскольку все виртуальные хосты расположены в /var/www, легко получить список веб-сайтов.

Проблема в том, как Ansible возвращает информацию. Например:

ok: [host1] => {
    "var": {
        "out.stdout_lines": [
            "",
            "host1.com"
        ]
    }
}
ok: [host2] => {
    "var": {
        "out.stdout_lines": [
            "",
            "host2.com"
        ]
    }
}

Знаете ли вы простой способ просто получить имя vhosts? Используя grep awk или что-то в этом роде?


person Rubendob    schedule 19.08.2016    source источник


Ответы (2)


Грязный способ: добавьте к каждой строке в stdout_lines какой-либо маркер (например, ANSBLMRK_) перед печатью, чтобы у вас был список, если «ANSBLMRK_host2.com», затем grep и cut.

Хороший способ: установить ANSIBLE_STDOUT_CALLBACK=json и подключить к jq.

person Konstantin Suvorov    schedule 19.08.2016
comment
привет Константин, это ANSIBLE_STDOUT_CALLBACK какой-то плагин? - person Rubendob; 19.08.2016
comment
да, вы можете настроить вывод ansible с помощью плагинов. json — это стандартный, который выводит все выходные данные плейбука в объект JSON, поэтому вы можете легко анализировать его с помощью других инструментов, таких как, например, jq. - person Konstantin Suvorov; 19.08.2016

Может быть, просто напишите файл, содержащий имена хостов в вашей книге воспроизведения, а затем используйте его позже:

tasks:

- name: make output file
  file: name=./list_of_hosts state=touch

- name: show my hostname
  lineinfile: dest=./list_of_hosts line="{{ item }}"
  with_items:
    "{{ out.stdout_lines[1] }}"
person Rob H    schedule 19.08.2016