Nomes de host / variáveis de impressão Ansible na lista / tabela

1

Existe uma maneira com Ansible para imprimir uma saída de estilo de tabela simples. Eu tenho os valores que eu preciso registrar em uma variável no livro que eu quero imprimir com mais clareza. Atualmente, a saída que tenho com stdout.lines é semelhante a:

ok: [sage] => {
    "voutput.stdout_lines": [
        "4.4.5"
    ]
}

ok: [example] => {
    "voutput.stdout_lines": [
        "4.7"
    ]
}

Mas seria bom se eu conseguisse formatá-lo da seguinte forma:

sage              4.7
example           4.4.5
somethingelse     1.2.3

Existe alguma maneira de fazer algo nessas linhas diretamente dentro da Ansible, ou eu simplesmente tenho que pegar a saída que ela dá e transformá-la com algo como AWK?

    
por Jon Dison 28.12.2016 / 07:21

2 respostas

2

Você pode:

  • altere a saída de log do Ansible usando Plug-ins de retorno de chamada . Isso exigirá alguma codificação Python. Infelizmente, o movimento dos plug-ins de exemplo parece satisfazer seus requisitos.

  • use um modelo Jinja2 e salve a saída em um arquivo com um template ou um copy módulo com o parâmetro content .

    Primeiro, você precisa combinar os dicionários em uma lista e iterar os itens no modelo.

por 28.12.2016 / 09:47
2

Você pode usar o retorno de chamada de saída do json padrão e buscar os dados necessários com jq .

hosts:

[test]
srv1 testvar=abc
srv2 testvar=zzzzzz
srv3 testvar=qqqq

playbook.yml:

- hosts: test
  gather_facts: no
  tasks:
    - debug: var=testvar

execução:

$ ANSIBLE_STDOUT_CALLBACK=json ansible-playbook playbook.yml | jq -r '.plays[0].tasks[0].hosts | to_entries[] | "\(.key), \(.value.testvar)"'
srv1, abc
srv2, zzzzzz
srv3, qqqq
    
por 28.12.2016 / 10:06