Variabel Daftar yang Mungkin

Panduan ini menjelaskan apa itu register Ansible dan bagaimana menangkap output tugas di Ansible menggunakan variabel register di Linux.
Contents
Pengantar Variabel Register yang MungkinMendaftarkan OutputMengakses Atribut IndividuPengambilan Keputusan Menggunakan Pernyataan KontrolMenulis Output Register Ke FileIterate Dan RegisterKesimpulanPengenalan Variabel Register Ansible

digunakan untuk menangkap output dari tugas apa pun dan menyimpannya dalam variabel. Variabel ini nantinya dapat digunakan bersama dengan print, loop, conditional dll.

Ketika Anda menjalankan tugas di Ansible, seluruh output tugas tidak akan dicetak ke stdout(Terminal). Jika Anda ingin melihat output dari tugas, maka Anda harus menyimpannya dalam variabel register dan kemudian mencetaknya.

Jika memungkinkan, modul debug digunakan untuk mencetak output ke terminal. Anda juga dapat membuat tugas berbasis keputusan dengan menggabungkan atribut register dengan pernyataan kondisional(kapan).

Di bagian yang akan datang, Anda akan mempelajari cara mendaftarkan output, memahami struktur output register, mencetak output ke stdout, Tulis output ke file dan gunakan register dengan pernyataan when.
Register Output

Mari kita lihat cara menggunakan modul register melalui use case. Pada node terkelola Ubuntu saya, saya perlu memeriksa apakah paket virtualenv diinstal. Jika paket tidak diinstal, saya akan menginstalnya.

Buat buku pedoman baru dan tambahkan definisi putar berikut. Ubah parameter definisi pemutaran sesuai kebutuhan Anda.

- name: Test playbook - host register yang memungkinkan: ubuntu.anslab.com assemble_facts: False menjadi: True

Saya memiliki tugas berikut yang akan menggunakan modul shell untuk menjalankan perintah “which virtualenv” . Output dari tugas ini ditangkap dalam variabel register bernama “virtualenv_output”. Anda dapat memberi nama variabel ini sesuai keinginan Anda.

Dalam tugas kedua, variabel register “virtualenv_output” akan dicetak menggunakan modul debug.

tasks: - nama: Tugas Pertama - Menggunakan modul shell untuk memeriksa apakah virtualenv ada atau tidak. builtin.shell: cmd: which virtualenv register: virtualenv_output abaikan_errors: True - name: Second Task - Cetak output lengkap ansible.builtin.debug: var: virtualenv_output

Heads Up: Menggunakan modul apt, Anda dapat menyederhanakan tugas ini. Tetapi untuk tujuan demonstrasi, saya menggunakan modul shell.

Periksa apakah ada kesalahan sintaksis sebelum mengirimkan buku pedoman dengan menjalankan perintah berikut.

$ ansible-playbook --syntax-check

Jalankan perintah berikut untuk mengirimkan playbook.

$ ansible -playbook

Pada output di bawah ini, Anda dapat melihat output dari tugas pertama. Outputnya akan dalam format JSON. Tergantung pada modul dan tugasnya, outputnya akan bervariasi.

Beberapa atribut penting dalam output akan membantu Anda menulis logika lebih lanjut di buku pedoman.
Failed – Kembalikan “True” jika tugas gagal dan “False” jika berhasil dijalankan. Rc – Kode pengembalian dari perintah yang dikirimkan melalui modul shell.Stderr, Stderr_line – Pesan kesalahan.Stdout, Stdout_lines – Pesan Stdout.Mengakses Atribut Individu

Lihat tugas di bawah ini. Alih-alih mencetak seluruh output dari variabel register, saya hanya mencoba mencetak kode kembali.

 - nama: Hanya memeriksa kode keluar ansible.builtin.debug: msg: "{{ virtualenv_output.rc }}"

Di bawah ini output, Anda hanya dapat melihat kode kembali dicetak alih-alih output penuh.

Alternatif untuk notasi titik, Anda juga dapat mengakses atribut menggunakan notation.

 kamus python - nama: Hanya memeriksa kode keluar - Python cara dict mungkin. builtin.debug: msg: "{{ virtualenv_output['rc'] }}"

Decision Making Menggunakan Control Statement

Mari kita membangun logika lebih lanjut berdasarkan kode pengembalian dari tugas pertama. Jika kode baliknya 1, maka tugas tersebut dikatakan gagal artinya tidak ada paket virtualenv di node.

terkelola saya Perhatikan tugas di bawah ini di mana saya menggunakan modul apt untuk menginstal paket “python3-virtualenv”. Tugas ini hanya akan berjalan jika kode kembali dari variabel register tidak sama dengan nol. Sekali lagi saya mendaftarkan keluaran tugas ini ke variabel yang disebut “virtualevn_install_output”.

 - nama: Instal paket berdasarkan kode pengembalian ansible.builtin.apt: pkg: python3-virtualenv state: present when: virtualenv_output.rc != 0 register : virtualenv_install_output

Writing Mendaftar Output Ke File

Daripada menggunakan modul debug untuk mencetak output ke stdout(Terminal), Anda dapat menulis output ke file. Ada banyak modul untuk melakukan tugas ini tetapi di sini saya menggunakan modul salin dan menyimpan konten variabel register dalam file virtualenv_output.

 - name: Reroute output ke file ansible.builtin.copy: content: "{{ virtualenv_install_output}}" tujuan: "/home/vagrant/virtualenv_output"

Iterate Dan Register

Lihat tugas di bawah ini di mana saya menggunakan modul shell untuk menghapus beberapa file dummy yang saya buat secara manual. Menggunakan loop, saya mengulangi daftar file dan meneruskannya sebagai argumen ke modul shell.

Hasil dari setiap iterasi akan ditambahkan ke variabel register remove_output.

 - name: Using loops ansible.builtin.shell: cmd: rm -f "{{item}}" register: remove_output loop: - test_file.txt - abc.txt - name: Cetak keluaran yang dihapus ansible.builtin.debug: msg: - Kembalikan kode untuk {{removed_output.results.0. item}} adalah {{removed_output.results.0.rc}} - Kode pengembalian untuk {{removed_output.results.1.item}} adalah {{removed_output.results.1.rc}}

Conclusion

Dalam artikel ini, kita telah membahas apa adalah variabel register yang memungkinkan dan cara mendaftarkan output tugas. Kami juga membahas bagaimana menggunakan atribut dari variabel register bersama dengan pernyataan kondisional untuk membuat tugas berbasis kondisi. Terakhir, kita telah melihat bagaimana output ditambahkan ke variabel register saat Anda menjalankan tugas secara iteratif.