Cara Membuat Play dan Playbook Ansible - Bagian 5

Cara Membuat Play dan Playbook Ansible - Bagian 5

Di dalam Bagian 5 dari serial ansible, kami akan menjelaskan cara membuat Drama yang tidak mungkin Dan Buku pedoman menggunakan modul ansible.

Semu Kapal dengan skrip mandiri yang disebut modul yang digunakan buku pedoman Untuk pelaksanaan tugas khusus pada node jarak jauh.

Modul Berhati -hatilah untuk mengotomatiskan tugas -tugas seperti manajemen paket, pengarsipan dan menyalin file untuk menyebutkan hanya beberapa. Mereka memungkinkan Anda untuk melakukan penyesuaian pada file konfigurasi dan mengelola perangkat seperti router, sakelar, memuat penyeimbang, firewall dan sejumlah perangkat lain.

Tujuan dari subtopik ini adalah untuk memberi Anda gambaran tentang berbagai tugas yang dapat diselesaikan oleh Modul Ansible:

Manajemen Paket di Linux

Manajemen paket adalah salah satu tugas paling penting dan sering dilakukan oleh administrator sistem. Kapal ansible dengan modul yang membantu Anda menjalankan tugas manajemen paket keduanya Topi merah Dan Debian sistem berbasis.

Mereka relatif mudah ditebak. Ada modul yang tepat Untuk manajemen paket yang tepat untuk berbasis Debian, yang lama modul yum untuk manajemen paket yum dan Modul DNF terkait dengan distribusi RHEL yang lebih baru.

Di bawah ini adalah beberapa contoh bagaimana modul dapat digunakan dalam a buku pedoman:

Contoh 1: Menginstal Webserver Apache di RHEL 8

--- - Nama: Instal Apache Webserver Hosts: WebServers Tugas: - Nama: Instal httpd dnf: Nama: httpd status: terbaru 

Contoh 2: Menginstal Webserver Apache di Debian 10

--- - Nama: Instal Apache Webserver Hosts: Database Tugas: - Nama: Instal Apache WebServer APT: Nama: Apache2 Negara: Terbaru 

Modul layanan

Modul Layanan memungkinkan administrator sistem untuk memulai, menghentikan, memperbarui, meningkatkan, dan memuat ulang layanan pada sistem.

Contoh 1: Memulai server web apache

--- - Nama: Mulai Layanan httpd, jika tidak memulai layanan: Nama: httpd status: dimulai 

Contoh 2: Menghentikan Webserver Apache

--- - Nama: Stop Service HTTPD Layanan: Nama: httpd status: berhenti 

Contoh 3: Memulai ulang antarmuka jaringan ENP2S0

--- - Nama: Mulai Ulang Layanan Jaringan Untuk Antarmuka ETH0 Layanan: Nama: Jaringan Keadaan: Dihidupkan kembali Args: ENP2S0 

Salin modul

Seperti namanya, salin modul menyalin file dari satu lokasi di mesin jarak jauh ke lokasi yang berbeda di mesin yang sama.

Contoh 1: Menyalin file dari lokal ke Linux jarak jauh

--- - Nama: Salin File dengan Pemilik dan Izin Salin: Src:/etc/file/tecmint.conf dest: /srv /tecmint.Pemilik Conf: Tecmint Group: Tecmint Mode: '0644' 

Playbook menyalin file konfigurasi tecmint.conf dari /etc/file/ direktori ke /srv/ direktori sebagai tecmint pengguna dengan 0644 izin.

Izin juga dapat diwakili menggunakan representasi simbolik seperti yang ditunjukkan pada baris terakhir.

Contoh 2: Menyalin file dari lokal ke Linux jarak jauh

--- - Nama: Salin File dengan Pemilik dan Izin Salin: Src:/etc/file/tecmint.conf dest: /srv /tecmint.Pemilik Conf: Tecmint Group: Tecmint Mode: U = RW, G = R, O = R 

Izin dalam contoh sebelumnya dapat direpresentasikan seperti yang ditunjukkan pada baris terakhir, pengguna ditetapkan membaca Dan menulis izin, grup ini ditugaskan menulis izin, dan seluruh dunia diberi izin baca.

Modul file

Itu modul file digunakan untuk membawa banyak operasi file termasuk membuat file & direktori, menetapkan izin file, dan mengatur symlinks.

Contoh 1: Lakukan Izin File Linux

--- - Nama: Ubah Kepemilikan File, Grup, dan Izin File: Path: /etc /tecmint.Pemilik Conf: Tecmint Group: Tecmint Mode: '0644' 

Permainan di atas membuat file yang dipanggil tecmint.conf dalam /dll Izin Pengaturan Direktori ke 0644.

Contoh 2: Hapus file Linux

--- - Nama: Hapus file (hapus file) File: path: /etc /tecmint.conf state: absen 

Ini menghapus atau menghapus file tecmint.conf.

Contoh 3: Buat direktori

--- - Nama: Buat direktori jika tidak ada file: path: /etc /status mydirectory: Mode direktori: '0777' 

Ini akan membuat direktori di /dll Izin Pengaturan Direktori ke 0777.

Contoh 4: Hapus direktori dengan rekursiver

--- - Nama: Menghapus secara rekursif file direktori: path: /etc /tecmint.conf state: absen 

Permainan di atas secara rekursif menghapus direktori.

Modul LineInfile

Itu LineInfile Modul sangat membantu saat Anda ingin mengubah satu baris dalam file. Itu bisa menggantikan garis yang ada.

Contoh 1: memanipulasi file di linux

--- - Nama: Pastikan Selinux diatur untuk Menegakkan Mode LineInfile: Path:/etc/selinux/config regexp: '^selinux =' baris: selinux = dinonaktifkan 

Permainan di atas set Selinux nilai untuk dengan disabilitas.

Selinux = dinonaktifkan 

Contoh 2: ubah file di linux

--- - Nama: Tambahkan baris ke file jika file tidak ada, tanpa melewati lineInfile regexp: path: /etc /hosts baris: 10.200.50.51 Tecmint.com create: ya 

Ini menambahkan entri 10.200.50.51 tecmint.com ke /etc/host mengajukan.

Modul Arsip

Sebuah Arsip Modul digunakan untuk pembuatan arsip terkompresi dari satu atau beberapa file. Itu mengasumsikan sumber kompresi ada di tujuan target. Setelah arsip, file sumber nantinya dapat dihapus atau dihapus menggunakan pernyataan tersebut hapus = true.

Contoh 1: Buat file arsip

- Nama: Direktori Compress/Path/to/Tecmint_dir/Into/Path/to/TecMint.TGZ Archive: Path:/Path/to/tecmint_dir dest:/path/to/tecmint.tgz ini mengompres/path/to/tecmint_dir direktori ke/path/to/tecmint.tgz 

Contoh 2: Buat file arsip dan hapus

- Nama: Compress File biasa/path/to/tecmint ke/path/to/foo.GZ dan hapus arsipnya: path:/path/to/tecmint dest:/path/to/tecmint.TGZ Hapus: Ya 

Dalam permainan di atas, file sumber /path/to/tecmint dihapus setelah arsip selesai.

Contoh 3: Buat file arsip

- Nama: Buat Arsip BZ2 dari/Path/to/Tecmint Archive: Path:/Path/to/Tecmint Format: BZ2 

Ini membuat file terkompresi di BZ2 format dari /path/to/tecmint mengajukan.

Modul git

Modul ini mengelola checkout git repositori perangkat lunak.

Contoh 1: Periksa repositoir git

- git: repo: 'https: // foosball.contoh.org/path/to/repo.Git 'Dest: /SRV /Versi Checkout: Release-0.22 

Modul perintah

Salah satu modul yang paling umum digunakan, memerintah Modul mengambil nama perintah dan kemudian diikuti oleh daftar argumen. Perintah tersebut dilewatkan dengan cara yang sama seperti yang Anda ketik dalam shell linux.

Contoh 1: Jalankan perintah

- Nama: Melaksanakan Perintah Menggunakan Perintah Modul Perintah: Cat HelloWorld.txt 

Contoh 2: Periksa Uptime of Remote Linux

--- - Nama: Periksa host host host jarak jauh host: Server Tugas: - Nama: Eksekusi perintah uptime over Module Command Register: UpTimeOutput Perintah: "Uptime" - Debug: Var: UpTimeOutput.stdout_lines 

Modul Perintah mengambil uptime server jarak jauh.

Variabel untuk mengambil hasil dari perintah berjalan

Biasanya, Semu Buku pedoman digunakan untuk menjalankan tugas pada host yang dikelola tanpa menampilkan output pada baris perintah. Namun, ada contoh, bahwa Anda mungkin diminta untuk menangkap output atau hasilnya. Di bagian ini, kami memandu Anda melalui bagaimana Anda dapat menangkap output buku pedoman dalam variabel dan kemudian menampilkannya.

Register ansible digunakan untuk menangkap output tugas dan menyimpannya variabel. Variabel akan kemudian berisi stdout dari tugas.

Misalnya, mari kita asumsikan bahwa Anda ingin memeriksa penggunaan disk node yang dikelola di direktori root masing -masing menggunakan df -th / memerintah. Anda akan menggunakan 'memerintah' modul untuk menentukan perintah dan 'daftar' untuk menyimpan output STD dalam variabel.

Untuk menampilkan perintah, Anda akan menggunakan 'debug' Modul di samping nilai pengembalian stdout.

--- - Hosts: Semua Menjadi: Ya Tugas: - Nama: Eksekusi /Penggunaan Boot pada Perintah Host: 'Df -TH /' Daftar: DF - Debug: Var = DF.stdout 

Sekarang, mari kita jalankan buku pedoman. Dalam hal ini, kami telah menamai buku pedoman kami check_disk_space.YML.

# Ansible-playbook check_disk_space.YML 
Periksa penggunaan disk node yang dikelola ansible

Seperti yang telah Anda lihat, outputnya semuanya bergoyang -goyang dan membuatnya sulit untuk diikuti.

Untuk menyelaraskan output dan membuatnya lebih mudah dibaca, ganti stdout nilai pengembalian dengan stdout_lines.

--- - Hosts: Semua Menjadi: Ya Tugas: - Nama: Eksekusi /Penggunaan Boot pada Perintah Host: 'Df -TH /' Daftar: DF - Debug: Var = DF.stdout_lines 

Gunakan persyaratan untuk mengontrol eksekusi bermain

Sama seperti dalam bahasa pemrograman, pernyataan bersyarat digunakan ketika lebih dari satu hasil dimungkinkan. Mari kita lihat beberapa pernyataan bersyarat yang umum digunakan di buku pedoman yang tidak dapat digunakan.

Saat pernyataan

Terkadang, Anda mungkin ingin melakukan tugas pada node tertentu dan bukan yang lain. Itu 'Kapan' Pernyataan bersyarat cukup mudah digunakan dan diimplementasikan dalam buku pedoman. Saat menggunakan 'Kapan' Klausul hanya menyatakan kondisi yang berdekatan dengan klausa seperti yang ditunjukkan:

Kapan: Kondisi 

Saat kondisinya terpenuhi, maka tugas dilakukan pada sistem jarak jauh.

Mari kita periksa beberapa contoh:

Contoh 1: Menggunakan saat operator

--- - Hosts: Semua Tugas: - Nama: Instal Nginx di Debian APT: Name = Nginx State = Present When: ansible_os_family == “Debian” 

Play di atas menginstal Nginx server web pada host yang menjalankan keluarga distro debian.

Anda juga dapat menggunakan ATAU Dan DAN Operator di samping saat pernyataan bersyarat.

Contoh 2: Menggunakan dan operator dengan kapan

--- - Hosts: Semua Tugas: - Nama: Instal Nginx di Debian APT: Name = Nginx State = Present When: ansible_os_family == “debian” dan ansible_distribution_version == “18.04 ” 

Saat menggunakan DAN operator, kedua pernyataan harus dipenuhi untuk tugas yang akan dieksekusi.

Drama di atas menginstal Nginx pada node yang menjalankan keluarga Debian OS yang merupakan versi 18.04. Jelas, ini akan menjadi Ubuntu 18.04.

Contoh 3: Menggunakan atau operator dengan kapan

Dengan ATAU operator, tugas dieksekusi jika salah satu dari kondisi terpenuhi.

--- - Hosts: Semua Tugas: - Nama: Instal Nginx di Debian APT: Name = Nginx State = sekarang kapan: ansible_os_family == “debian” atau ansible_os_family == “suse” 

Drama di atas menginstal server web Nginx di Debian atau SUSE Family of O atau keduanya.

CATATAN: Selalu pastikan untuk menggunakan tanda kesetaraan ganda == Saat menguji suatu kondisi.

Kondisional di loop

Kondisionalitas juga dapat digunakan dalam satu loop. Katakan misalnya Anda memiliki daftar beberapa paket yang perlu diinstal pada node jarak jauh.

Di buku pedoman di bawah ini, kami memiliki array yang disebut paket berisi daftar paket yang perlu diinstal. Tugas -tugas ini akan dilakukan satu demi satu jika diperlukan Klausa diatur ke BENAR.

--- - Nama: Instal Paket Perangkat Lunak Host: Semua VARS: Paket: • Nama: Nginx Diperlukan: Benar • Nama: MySQL Diperlukan: Benar • Nama: Apache Diperlukan: False Tugas: • Nama: Instal "item.Nama ”di debian apt: name:“ item.Nama ”State: Present When: Item.diperlukan == loop true: "packages" 

Konfigurasikan penanganan kesalahan

Terkadang, tugas gagal saat menjalankan buku pedoman. Mari kita asumsikan Anda menjalankan 5 tugas di 3 server seperti yang ditunjukkan dalam buku pedoman di bawah ini. Jika kesalahan terjadi pada Tugas 3 (memulai MySQL) di Server 2, Ansible akan berhenti menjalankan tugas yang tersisa di Server 2 dan mencoba menyelesaikan tugas yang tersisa pada sisa server.

--- - Nama: Instal Paket Perangkat Lunak Host: Server1, Server2, Server3 Tugas: - Nama: Instal Dependensi <> - Nama: Instal MySQL Database <> - Nama: Mulai mysql <> - Nama: Instal Nginx <> - Nama: mulai nginx <> 

Jika Anda ingin konsistensi dalam pelaksanaan buku pedoman, misalnya, hentikan pelaksanaan buku pedoman, jika salah satu server gagal, tambahkan opsi.

--- - Nama: Instal Paket Perangkat Lunak Host: Server1, Server2, Server3 any_errors_fatal: true Tugas: 

Dengan cara ini, jika satu tugas gagal di satu server, ansible akan menghentikan eksekusi seluruh buku pedoman di semua server dan keluar.

Jika Anda ingin buku pedoman mengabaikan kesalahan dan melanjutkan untuk menjalankan set tugas yang tersisa, maka gunakan abaikan_errors: opsi yang benar.

--- - Nama: Instal Paket Perangkat Lunak Host: Server1, Server2, Server3 Tugas: - Nama: Instal Dependensi <>  abaikan_errors: Benar 

Buat buku pedoman untuk mengonfigurasi sistem ke keadaan tertentu

Di bagian ini, kami melihat beberapa opsi tambahan yang tersedia saat menjalankan buku pedoman.

Mari kita mulai dengan Memeriksa mode atau Lari kering pilihan. Opsi Mode Kering atau Periksa Kering digunakan saat menjalankan buku pedoman untuk memeriksa apakah ada kesalahan yang akan ditemui dan jika ada perubahan yang akan dilakukan pada host yang dikelola. Namun, itu tidak membuat perubahan apa pun pada node jarak jauh.

Misalnya, untuk mengeringkan buku pedoman yang disebut httpd.YML yang menginstal dan memulai menjalankan webserver apache:

# Ansible-playbook httpd.YML --Ceck 
Keringkan Playbook Ansible

Opsi lain yang perlu kita lihat adalah --start-at-Task pilihan. Ini digunakan saat menentukan nama tugas yang harus dimulai atau dimulai oleh buku pedoman.

Mari kita ambil contoh: Playbook di bawah ini menjabarkan 2 tugas: Play pertama menginstal Apache Web Server dan yang kedua menginstal HTOP Utility.

--- - Nama: Instal Httpd Hosts: Semua Tugas: YUM: Nama: httpd Status: Diinstal - Nama: Instal HTOP YUM: Nama: HTOP Status: Dimulai 

Jika Anda ingin melewatkan penginstalan webserver apache dan sebaliknya menginstal htop utility run:

# Playbook Ansible-Playbook.YML --Start-at-Task "Instal HTOP" 
Instal Paket Menggunakan Playbook Ansible

Terakhir, Anda dapat menandai tugas atau bermain dengan menambahkan tag opsi untuk buku pedoman Anda seperti yang ditunjukkan. Ini sangat berguna saat Anda memiliki buku pedoman yang cukup besar dan Anda ingin menjalankan tugas -tugas tertentu dari seluruh buku pedoman.

--- - Nama: Instal httpd Tag: instal dan mulai Hosts: Semua Tugas: YUM: Nama: httpd status: terpasang Tag: Instal • Layanan: Nama: status httpd: dimulai 
# Playbook Ansible-Playbook.yml -tags "instal" 

Untuk menghilangkan tag, gunakan --Skip-tag opsi seperti yang ditunjukkan.

# Playbook Ansible-Playbook.YML --Skip-tag "Instal" 
Kesimpulan

Dalam topik ini, kami membawa Anda melalui modul yang umum digunakan Semu, cara mengambil stdout dari pelaksanaan buku pedoman untuk analisis, menggunakan kondisionalitas di buku pedoman dan bagaimana mengelola kesalahan yang mungkin terjadi saat menjalankan tugas. Terakhir, kami mencetak ulang konfigurasi buku pedoman dan bagaimana Anda dapat menggunakan opsi tambahan untuk memutuskan tugas mana yang akan dijalankan jika Anda tidak bermaksud menjalankan seluruh buku pedoman.