Penanganan Kesalahan Dalam Playbook yang Mungkin

13
Dalam artikel ini, kami akan fokus pada salah satu topik penting yang mungkin – “Penanganan Kesalahan di Playbook yang Mungkin”. Pada akhir artikel ini, Anda akan memiliki cukup banyak pengetahuan tentang Penanganan Kesalahan yang Mungkin dan cara menangani kesalahan yang berbeda saat menjalankan playbook di Ansible di Linux. Penanganan Kegagalan menggunakan Ignore_errors Directive2. Penanganan Error menggunakan Block-Rescue-Always DirectivesCara Menghentikan Semua Pemutaran pada KegagalanCara Menangani Kesalahan Host yang Tidak Dapat Dijangkau di AnsibleCara Membuat Kegagalan yang Ditentukan Pengguna di AnsibleCara Menangani Kegagalan Tugas Handler di AnsibleConclusionError Handling di Playbooks

Kesalahan dan bug sangat umum terjadi pada perangkat lunak apa pun yang Anda gunakan . Kemungkinan tidak terkecuali. Ketika Anda mulai mengerjakan proyek dunia nyata dengan kemungkinan Anda akan menghadapi semua jenis kesalahan baik itu bug produk atau kesalahan manusia.

Beberapa kesalahan dapat dihindari dengan menerapkan praktik terbaik dan menggunakan alat yang memiliki fitur linting dan debugging. Dalam hal ini, saran saya adalah menggunakan vscode yang memiliki ekosistem plugin yang sangat baik untuk mendukung pengembangan yang memungkinkan.

Lihatlah ekstensi vscode berikut yang memungkinkan Anda menerapkan praktik terbaik dengan menerapkan beberapa aturan dan menemukan kesalahan sintaksis dasar.
https:// github.com/adrienverge/yamllinthttps://marketplace.visualstudio.com/items?itemName=redhat.ansible
Di bawah ini adalah contoh gambar dari vscode ansible linter.

Sekarang mari kita bahas beberapa skenario untuk memahami berbagai jenis kegagalan dan cara menanganinya .
Cara Menangani Kesalahan Sintaks di Ansible

Hal pertama yang perlu Anda periksa sebelum menjalankan buku pedoman apa pun adalah kesalahan sintaks. Anda dapat menggunakan flag “–syntax-check” bersama dengan perintah ansible-playbook untuk memeriksa kesalahan sintaksis.

Lihat playbook di bawah ini. Saya punya dua masalah. Peran kata kunci bukan kata kunci yang valid, seharusnya “peran”. Masalah kedua adalah kedua peran tersebut bukan peran yang valid.

---
- nama: Menangani Kegagalan
  host: localhost

  peran:
   - contoh-peran1
   - sample-role2

Ketika saya menjalankan playbook dengan –syntax-check, itu melihat kesalahan pertama di playbook.

$ ansible-playbook --syntax-check playbook.yml

Setelah saya memperbaiki kesalahan dan mengirimkan kembali playbook, itu menunjukkan saya kesalahan berikutnya di mana sampel-role1 tidak ditemukan di mana pun di lokasi role_path.

Masalah dengan pendekatan ini adalah ketika Anda memiliki beberapa kesalahan di buku pedoman, itu hanya akan menampilkan kesalahan pertama dan Anda harus memperbaiki kesalahan dan kembali kirim perintah untuk melihat kesalahan berikutnya.
Cara Menangani Kegagalan Tugas di Ansible

Sebelum mengetahui cara memperbaiki tugas yang gagal, Anda harus tahu cara mengirimkan tugas dan apa yang terjadi jika tugas gagal.

Ansible mengirimkan tugas dalam urutan yang ditentukan secara berkelompok (garpu = 5). Ketika tugas tertentu gagal di host, maka kemungkinan akan menandai host dan menghentikan tugas lebih lanjut agar tidak berjalan di host.

Anda dapat menangani kegagalan tingkat tugas menggunakan pendekatan di bawah ini. 1. Menangani Kegagalan dengan Ignore_errors Directive

Perhatikan playbook berikut yang memiliki dua tugas untuk mengunduh dan menginstal paket deb chrome.

---
- nama: Tangani Kegagalan dengan abaikan_erros
 host: localhost

 tugas:
   - nama: Unduh file .deb chrome
     memungkinkan.builtin.get_url:
       url: https://dl.google.com/linux/direct/google-chrome-stable_current_amd641.deb
       tujuan: /tmp/chrome.deb

   - nama: Instal dari /tmp/chrome.deb
     memungkinkan.builtin.apt:
       deb: /tmp/chrome.deb

Saya sengaja memberikan URL yang salah yang akan membuat tugas pertama gagal. Seperti yang sudah dinyatakan setelah tugas gagal di host, tidak ada tugas lebih lanjut yang akan dikirimkan di host. Jadi tugas kedua tidak diserahkan.

fatal: [localhost]: GAGAL! => {"berubah": false, "dest": "/tmp/chrome.deb", "elapsed": 0, "msg": "Permintaan gagal", "respons": "Kesalahan HTTP 404: Tidak Ditemukan", "status_code": 404, "url": "https://dl.google.com/linux/direct/google-chrome-stable_current_amd641.deb"}

Sekarang biarkan saya menjalankan playbook yang sama lagi tetapi dengan “ignore_errors= true”.

Jika Anda melihat gambar di atas, tugas pertama berjalan dan gagal tetapi kegagalan diabaikan yang membuat tugas kedua berjalan.
Perhatian: Arahan ignore_errors dapat ditambahkan pada level tugas atau play level.
2. Penanganan Error menggunakan Block-Rescue-Always Directives

Terkadang grup tugas bergantung satu sama lain dan jika satu tugas gagal maka tugas dependen itu sendiri seharusnya tidak berjalan alih-alih menghentikan semua tugas di bawah host tertentu.

Buku pedoman yang digunakan di bagian sebelumnya akan menjadi contoh sempurna dari skenario ini. Tugas instalasi bergantung pada tugas unduhan sehingga kedua tugas dapat dikelompokkan di bawah direktif blok.

---
- nama: Tangani Kegagalan dengan abaikan_erros
  host: localhost

  tugas:
   - nama: Kelompokkan tugas
     memblokir:
       - nama: Unduh file .deb chrome
         memungkinkan.builtin.get_url:
           url: https://dl.google.com/linux/direct/google-chrome-stable_current_amd641.deb
           tujuan: /tmp/chrome.deb

       - nama: Instal dari /tmp/chrome.deb
         memungkinkan.builtin.apt:
           deb: /tmp/chrome.deb
     abaikan_kesalahan: true

I menggunakan pedoman yang sama tetapi memindahkan kedua tugas di bawah arahan blok dan menambahkan abaikan_kesalahan pada tingkat blok. Jika Anda melihat output di bawah ini, kedua tugas secara otomatis mewarisi direktif abaikan_kesalahan.

Anda juga dapat menambahkan direktif “penyelamatan” dan “selalu” bersama dengan direktif “blok”. Tugas di bawah arahan penyelamatan akan berjalan jika salah satu tugas di bawah arahan blok gagal. Ini sangat berguna untuk kegiatan pembersihan. direktif selalu berjalan terlepas dari status direktif blokir dan penyelamatan.

Saya telah menambahkan direktif penyelamatan dan selalu dengan tugas yang mencetak beberapa pesan.

tasks:
   - nama: Kelompokkan tugas
     memblokir:
       - nama: Unduh file .deb chrome
         memungkinkan.builtin.get_url:
           url: https://dl.google.com/linux/direct/google-chrome-stable_current_amd641.deb
           tujuan: /tmp/chrome.deb

       - nama: Instal dari /tmp/chrome.deb
         memungkinkan.builtin.apt:
           deb: /tmp/chrome.deb
     menyelamatkan:
       - nama: Tugas penyelamatan
         memungkinkan.builtin.debug:
           msg: "Beberapa aktivitas pembersihan..."
     selalu:
       - nama: Tugas yang selalu berjalan
         memungkinkan.builtin.debug:
           msg: "Tugas yang selalu berjalan" 

Tugas penyelamatan dijalankan karena tugas di bawah bagian blok gagal. Akhirnya tugas selalu berjalan.
Cara Menghentikan Semua Permainan Saat Gagal

Di bagian terakhir, kita telah melihat cara untuk menjalankan tugas meskipun tugas gagal. Dalam beberapa kasus, kami membutuhkan seluruh playbook untuk berhenti meskipun satu tugas gagal. Hal ini dapat dicapai dengan menyetel “any_errors_fatal: true”.

Saat playbook dikirimkan dengan “any_errors_fatal” dan jika tugas gagal, tugas yang dikirimkan dalam batch saat ini akan berjalan dan permainan akan dihentikan.
Persiapan: Direktif any_errors_fatal dapat diatur pada level permainan atau level tugas.
Cara Menangani Kesalahan Host yang Tidak Terjangkau di Ansible

Jenis kesalahan lain yang mungkin terjadi adalah “host yang tidak dapat dijangkau”. Anda akan mendapatkan kesalahan ini jika mungkin tidak dapat terhubung ke host terkelola yang ditentukan dalam file inventaris. Ini terjadi karena banyak alasan. Entah Anda mungkin telah memberikan definisi host yang salah atau ada masalah dengan host yang dikelola.

Jika memungkinkan menemukan node tidak dapat dijangkau, node tersebut akan dihapus dari daftar host aktif dan tidak akan mengirimkan tugas lebih lanjut pada node.

I Saya menjalankan pedoman yang sama dengan yang digunakan di bagian sebelumnya tetapi dengan beberapa nama host acak. Tugas gagal dengan “tidak dapat dijangkau”.

Anda dapat menambahkan “ignore_unreachable: true” pada level tugas atau permainan yang akan melewati tugas saat ini dan menjalankan tugas berikutnya tanpa menghapus host dari daftar aktif.
Cara Membuat Kegagalan yang Ditentukan Pengguna di Ansible

Selain kemungkinan kegagalan yang ditentukan, pengguna juga dapat membuat aturan mereka sendiri untuk membuat tugas gagal menggunakan direktif “failed_when”. Bahkan, kemungkinan linter menyarankan menggunakan “failed_when” alih-alih direktif “ignore_errors”.

Anda perlu mendaftarkan output tugas sebelum melakukan beberapa pemeriksaan bersyarat. Nama variabel terdaftar adalah “status”.

Untuk mengetahui lebih lanjut tentang Register yang Memungkinkan, lihat panduan berikut.NbspVariabel Daftar yang Memungkinkan
Saya telah menambahkan syarat untuk memeriksa kode status dari keluaran yang didaftarkan. Kode status 404 tidak akan dianggap gagal. Sekarang kode pengembalian lainnya akan dianggap gagal.

-name: Unduh file chrome .deb
 memungkinkan.builtin.get_url:
   url: https://dl.google.com/linux/direct/google-chrome-stable_current_amd641.deb
   tujuan: /tmp/chrome.deb
 daftar: status
 failed_when: status.status_code != 404

Anda juga dapat menambahkan operator “AND”, dan “OR” untuk memeriksa beberapa kondisi.

failed_when: status.status_code != 404 atau status.status_code != 401

Cara Menangani Kegagalan Tugas Handler di Ansible

Kami memiliki artikel khusus untuk penangan. Lihat tautan berikut dan lihat bagian “Menangani Kegagalan” untuk mengetahui cara menangani kegagalan dalam tugas penangan.
Cara Menggunakan Handler Di Playbook yang MungkinKesimpulan

Dalam artikel ini, kami telah membahas tentang Penanganan kesalahan di Playbook. Kami juga telah melihat berbagai jenis kegagalan yang mungkin Anda temui dan beberapa cara untuk memperbaikinya. Umpan balik diterima melalui bagian komentar.

Resource:
Error Handling in Playbooks