GNU/Linux >> Belajar Linux >  >> Linux

Memulai Dengan Playbook yang Mungkin

Pada artikel terakhir, kita telah membahas tentang Perintah ad hoc yang memungkinkan . Apa pun yang kami pelajari di sana akan diterapkan dalam artikel ini tetapi dengan cara yang berbeda. Tutorial ini menjelaskan apa itu Playbook di Ansible dan bagaimana bekerja dengan Playbook Ansible beserta contohnya.

Apa Itu Playbook yang Mungkin?

Buku pedomannya adalah YAML file yang digunakan untuk menjalankan satu atau beberapa tugas terhadap host yang dikelola di lingkungan.

Perbedaan utama antara perintah ad hoc dan playbook adalah dengan perintah adhoc Anda dapat membuat satu baris sederhana atau menggunakan perintah adhoc dalam skrip shell untuk menjalankan tugas sederhana. Saat Anda ingin melakukan operasi berulang yang kompleks, Anda harus menulis buku pedoman dan menyimpannya di repositori pusat dan menggunakannya kapan pun dibutuhkan.

Mari kita asumsikan Anda adalah bagian dari tim admin sistem. Setiap kali server baru dibangun, tim Anda bertanggung jawab untuk memperkuat server sesuai dengan kebijakan perusahaan Anda.

Dalam hal ini, Anda dapat membuat buku pedoman dan mengeraskan server. Sekarang buku pedoman yang sama dapat digunakan untuk melawan jumlah N dari host baru yang perlu diperkuat.

Struktur Lab Saya yang Mungkin

Saya akan menggunakan lab yang memungkinkan yang dibuat dengan dua node Ubuntu 20.04LTS. Anda dapat merujuk ke artikel berikut untuk mereplikasi penyiapan lab yang sama jika diperlukan.

Buat Playbook Ansible Pertama Anda

Seperti yang saya nyatakan sebelumnya, Playbook ditulis dalam YAML format. Playbook harus memiliki .yml atau .yaml perpanjangan. Lihat tautan di bawah ini jika Anda ingin mempelajari YAML.

Di bawah ini adalah contoh buku pedoman yang akan saya gunakan untuk mendemonstrasikan cara kerja buku pedoman. Ini adalah buku pedoman sederhana yang akan menangani penyiapan pesan spanduk khusus saat saya masuk ke node.

- name: First Play - Modify banner message
  hosts: ubuntu2
  gather_facts: false
  become: yes

  tasks:
    - name: Remove Execute Permission from /etc/update-motd.d/*
      file:
        path: /etc/update-motd.d/
        mode: u=rw,g=rw,o=rw
        recurse: yes

    - name: ADD BANNER MESSAGE
      copy:
        content: "Welcome to OSTechnix"
        dest: /etc/motd

Mari kita lihat setiap bagian dari buku pedoman ini. Buku pedoman dibagi menjadi dua bagian. Bagian pertama berisi definisi pemutaran seperti nama pemutaran, host target, dan eskalasi hak istimewa.

  • nama - Buku pedoman harus memiliki nama permainan yang tidak lain adalah pengelompokan logis dari host target, parameter, dan tugas. Anda dapat memiliki lebih dari satu permainan di buku pedoman. Beri nama deskriptif untuk drama tersebut.
  • tuan rumah - Menargetkan tuan rumah. Ansible akan memeriksa file inventaris dan memverifikasi apakah nilai yang diberikan di host tersedia di file inventaris.
  • menjadi - Saat disetel ke 'ya' akan menjalankan tugas dengan hak istimewa sudo. Karena saya mengubah izin di bawah /etc/ direktori, tugas harus diserahkan dengan hak istimewa yang lebih tinggi.

Lihat artikel komprehensif kami tentang eskalasi hak istimewa untuk memahaminya secara mendetail.

Pada bagian kedua, tugas didefinisikan. Anda harus menggunakan kata kunci "tugas" untuk mendefinisikan tugas. Di sini saya telah membuat dua tugas. Setiap tugas harus diberi nama menggunakan kata kunci "nama" .

  • Tugas pertama akan menghapus izin eksekusi dari /etc/update-motd.d/* direktori. Saya menggunakan file modul untuk ini.
  • Tugas kedua akan menulis string "Selamat datang di OSTechnix" ke /etc/motd file menggunakan salin modul.

Sebelum menjalankan buku pedoman, izinkan saya memeriksa status node target saya(managed2.anslab.com ) dengan masuk ke node. Anda dapat melihat ketika saya masuk ke node, saya mendapatkan pesan banner default dan izin eksekusi diatur untuk semua file.

$ ssh [email protected]

Untuk menjalankan playbook, jalankan perintah berikut dari terminal.

$ ansible-playbook <playbook-name>   # SYNTAX
$ ansible-playbook banner_mod.yml

Mari kita coba memahami hasilnya.

1. Saat Anda menjalankan playbook, hal pertama yang akan Anda lihat adalah nama play.

PLAY [Modify banner message] *

2. Tugas pertama yang mungkin dijalankan adalah "Mengumpulkan Fakta" . Kami belum mendefinisikan tugas ini di buku pedoman kami, tetapi ini akan berjalan kecuali Anda mematikannya.

TASK [Gathering Facts] *
ok: [managed2]

3. Sekarang tugas yang Anda tetapkan dalam file YAML sebagai bagian dari permainan akan mulai dijalankan satu per satu. Ansible akan membaca buku pedoman dari atas ke bawah sehingga tugas akan dijalankan dalam urutan yang ditentukan dalam buku pedoman.

TASK [Remove Execute Permission from /etc/update-motd.d/*] *******************************************************************************************
changed: [managed2]

TASK [ADD BANNER MESSAGE] ****************************************************************************************************************************
changed: [managed2]

4. Setelah semua tugas selesai, Anda akan memiliki rekap permainan yang akan memberi Anda jumlah status total tugas yang berbeda. Dalam kasus kami, total tiga tugas (ok=3) dijalankan termasuk pengumpulan fakta dan hanya dua tugas (diubah=2) yang membuat perubahan pada node terkelola.

PLAY RECAP ******************************************
managed2 : ok=3 changed=2    unreachable=0 failed=0 skipped=0    rescued=0 ignored=0   

Sekarang saya dapat memvalidasi node terkelola untuk melihat apakah perubahan berhasil diterapkan.

Nonaktifkan Pengumpulan Fakta

Seperti yang diramalkan di bagian sebelumnya saat Anda menjalankan buku pedoman, Ansible akan mengumpulkan fakta tentang node yang dikelola dengan menjalankan modul penyiapan . Anda dapat menonaktifkan pengumpulan fakta dengan menambahkan baris berikut di buku pedoman.

gather_facts : false

Sekarang ketika Anda menjalankan playbook lagi, Anda hanya akan melihat dua tugas yang ditentukan di playbook. Karena Ansible adalah idempoten, ansible tidak akan mencoba mengubah keadaan objek jika sudah diubah. Jadi Anda akan melihat output sebagai OK .

Mengumpulkan fakta akan membuat permainan berjalan lambat ketika Anda harus menjalankan playbook melawan sejumlah besar host. Ini karena ansible harus terhubung dengan node yang dikelola dan mengumpulkan banyak data tentang node yang tidak diperlukan untuk semua kasus.

Anda dapat memeriksa perbedaan waktu eksekusi dengan dan tanpa fakta di bawah ini.

$ time ansible-playbook banner_mod.yml  # WITHOUT FACTS

real    0m1.642s
user    0m0.731s
sys    0m0.220s

$ time ansible-playbook banner_mod.yml  # WITH FACTS

real    0m2.547s
user    0m1.139s
sys    0m0.187s

Jalankan Beberapa Pemutaran

Anda dapat memiliki lebih dari satu permainan di buku pedoman. Seperti yang Anda lihat pada gambar di bawah, permainan kedua saya memiliki satu tugas yang akan memulai kembali sshd layanan menggunakan layanan modul di host yang berbeda.

- name: Second Play - Restart SSHD service
  hosts: ubuntu1
  gather_facts: false
  become: yes

  tasks:
    - name: Restart SSHD in managed1.anslab.com
      service:
        name: sshd
        state: restarted

Mari kita jalankan playbook lagi dan Anda dapat melihat dari output kedua play berhasil dijalankan.

$ ansible-playbook banner_mod.yml

Sekarang Anda harus memiliki pemahaman yang adil tentang cara menulis buku pedoman dan menjalankannya. Playbook mendukung fitur berguna tambahan yang akan kita lihat di bagian mendatang.

Validasi Sintaks Playbook

Anda dapat menggunakan --syntax-check tandai untuk memeriksa kesalahan sintaks di buku pedoman Anda. Saya sengaja membuat kesalahan sintaksis di "gather_facts" baris di buku pedoman saya.

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

Permintaan Konfirmasi

Saat Anda menggunakan --step bendera, untuk setiap tugas dalam permainan Anda, ia akan meminta konfirmasi Anda untuk melanjutkan tugas.

$ ansible-playbook --step banner_mod.yml

Jalankan Lari Kering

Alih-alih menjalankan tugas di node terkelola, Anda dapat mensimulasikan proses menggunakan -C atau --check bendera.

$ ansible-playbook -C banner_mod.yml

Mulai Dari Tugas Tertentu

Anda memiliki opsi untuk mulai menjalankan buku pedoman dari tugas tertentu. Anda dapat melihat dari gambar di bawah ini saya mulai dari Play2(task1), jadi kedua tugas di play1 dilewati. Gunakan bendera --start-at-task dan berikan nama tugas sebagai argumen.

$ ansible-playbook banner_mod.yml --start-at-task "Restart SSHD in managed1.anslab.com"

Jalankan Tugas Menggunakan Tag

Anda dapat mengelompokkan permainan dan tugas dengan tag . Dengan menggunakan tag, Anda hanya dapat menjalankan tugas-tugas dengan tag tertentu atau melewati tugas.

Anda dapat melihat gambar di bawah ini di mana saya telah menggunakan "tag" kata kunci dan menetapkan beberapa nilai untuk itu. Anda juga dapat menambahkan beberapa nilai ke satu tag.

Anda dapat menjalankan perintah berikut untuk mendapatkan daftar tugas beserta tagnya.

$ ansible-playbook banner_mod.yml --list-tasks
$ ansible-playbook banner_mod.yml --list-tags

Gunakan -t tandai dan berikan nama tag sebagai argumen. Anda dapat menjalankan tugas berbasis tag tertentu atau beberapa tag seperti yang ditunjukkan di bawah ini. Dalam contoh di bawah ini, saya menggunakan dua tag berbeda dari dua drama berbeda.

$ ansible-playbook -t "set_perm","restart service" banner_mod.yml

Anda juga dapat melewati tugas dan menjalankan semua tugas lain menggunakan --skip-tags bendera.

$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml

Meningkatkan Verbositas

Terkadang buku pedoman tidak berperilaku seperti yang Anda harapkan. Mungkin sesuatu yang terjadi di latar belakang atau kesalahan yang berbeda.

Untuk men-debug masalah, Anda dapat meningkatkan verbositas (-v) saat menjalankan buku pedoman. Ada empat tingkat verbositas. Anda dapat mengatur verbositas di ansible.cfg file dengan menambahkan properti "verbosity=<level " atau dari terminal menggunakan -v atau variabel lingkungan ANSIBLE_VERBOSITY.

$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(-vvvv)

[ATAU]

$ ANSIBLE_VERBOSITY=4 ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(ENV VARIABLE)

Kontrol Paralelisme

Saat Anda menjalankan playbook, Anda mungkin akan menjalankan tugas dalam batch. Secara default, ansible akan menjalankan tugas di 5 node secara paralel dan setelah semua tugas selesai di semua 5 node, itu akan pindah ke set 5 node berikutnya.

Demikian juga, itu akan menjalankan tugas dalam kumpulan 5 sampai tugas selesai di semua node dan kemudian pindah ke tugas berikutnya dan ulangi langkah yang sama.

Anda dapat mengontrol paralelisme dan menyetel berapa banyak simpul yang harus diproses secara paralel dengan menyetel "garpu" parameter di ansible.cfg berkas.

[defaults]
inventory = inventory
host_key_checking = False
forks=20

Saya telah menetapkan nilai fork menjadi 20. Sekarang akan memproses tugas pada 20 node secara paralel. Demikian juga, Anda dapat menambah/mengurangi jumlah tergantung pada kebutuhan Anda.

Anda dapat mengganti nilai yang ditetapkan di ansible.cfg file dengan mengirimkan -f atau --forks bendera. Ketika saya menjalankan perintah berikut, nilai fork 20 akan ditimpa oleh 15.

$ ansible-playbook banner_mod.yml -f 15

Kesimpulan

Dalam artikel ini, kita telah melihat cara menulis buku pedoman yang memungkinkan dan berbagai parameter serta opsi yang didukung dalam buku pedoman. Ada banyak fitur lain seperti variabel, kondisi, loop, dll. yang dapat digunakan dalam buku pedoman yang akan kami bahas di artikel mendatang.


Linux
  1. Memulai dengan Zsh

  2. Memulai dengan ls

  3. Cara:Memulai dengan Ansible

  1. Memulai Samba untuk interoperabilitas

  2. Memulai PostgreSQL di Linux

  3. Memulai SSH di Linux

  1. Memulai dengan GnuCash

  2. Memulai dengan Etcher.io

  3. Memulai dengan ekspresi reguler