Parsing keluaran yang mungkin dengan alat Linux

Saya memiliki pedoman konyol yang hanya menjalankan perintah untuk mendapatkan daftar vhost di setiap host di grup server web. Karena semua vhost berlokasi di /var/www, mudah untuk mendapatkan daftar web.

Masalahnya adalah cara Ansible mengembalikan infonya. Misalnya:

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

Tahukah Anda cara mudah untuk mendapatkan nama vhosts saja? Menggunakan grep awk atau semacamnya?


person Rubendob    schedule 19.08.2016    source sumber


Jawaban (2)


Cara kotor: tambahkan setiap baris di stdout_lines dengan beberapa penanda (misalnya ANSBLMRK_) sebelum mencetak, sehingga Anda memiliki daftar jika "ANSBLMRK_host2.com", lalu grep dan cut.

Cara yang baik: setel ANSIBLE_STDOUT_CALLBACK=json dan kirimkan ke jq.

person Konstantin Suvorov    schedule 19.08.2016
comment
hai Konstantin, ANSIBLE_STDOUT_CALLBACK ini semacam plugin? - person Rubendob; 19.08.2016
comment
ya, Anda dapat menyesuaikan keluaran yang memungkinkan dengan plugin. json adalah standar yang mencetak semua output playbook ke objek JSON, sehingga Anda dapat dengan mudah menguraikannya dengan alat lain seperti jq, misalnya. - person Konstantin Suvorov; 19.08.2016

Mungkin cukup tulis file yang berisi nama host di buku pedoman Anda dan kemudian gunakan nanti:

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