Analisando a saída ansible no shell script usando sed / grep

1

Eu tenho um shell script que executa um playbook ansible e quero processar a saída deste playbook. Não sei como posso fazer isso.

Script:

#!/bin/sh
ansible-playbook -i inventory/ec2.py services_status.yml

A saída do comando ansible-playbook é:

PLAY [all] *********************************************************************

TASK [cmx_running_services] ****************************************************
ok: [172.31.35.225]

ok: [172.31.9.253]


TASK [debug] *******************************************************************
ok: [172.31.35.225] => {
    "services": {
        "changed": false,
        "meta": {
            "services": [
                "zk",
                "kafka"
            ]
        }
    }
}

ok: [172.31.9.253] => {
    "services": {
        "changed": false,
        "meta": {
            "MyService": [
                "default"
            ],
            "services": [
                "monitoring-agent"
            ]
        }
    }
}


PLAY RECAP *********************************************************************
172.31.35.225              : ok=2    changed=0    unreachable=0    failed=0
172.31.9.253               : ok=2    changed=0    unreachable=0    failed=0

No meu script, quero processar essa saída e armazenar um objeto json no formato:

{
  "172.31.35.225":{
    "services":[
      "zk",
      "kafka"
    ]
  },
  "172.31.9.253":{
    "MyService":[
      "default"
    ],
    "services":[
      "monitoring-agent"
    ]
  }
}
    
por Ankur K Gupta 26.08.2016 / 10:06

1 resposta

1

O que você precisa fazer é esquecer de usar sed ou awk no log Ansible, o que se tornaria extremamente complicado e, em vez disso, desenvolver ou personalizar um plug-in de retorno de chamada.

Provavelmente você deve começar com o exemplo json.py que produz o log Ansible no formato JSON (pelo menos teoricamente, como o código de exemplo parece não funcionar fora do github).

Mais sobre o desenvolvimento e a configuração de plugins de retorno de chamada nos documentos oficiais do Ansible.

    
por 16.09.2016 / 05:28