Ansible adalah solusi otomatisasi lengkap untuk lingkungan TI Anda. Anda dapat menggunakan Ansible untuk mengotomatisasi konfigurasi server Linux dan Windows, mengatur penyediaan layanan, menerapkan lingkungan cloud, dan bahkan mengonfigurasi perangkat jaringan Anda.
Modul yang memungkinkan tindakan abstrak pada sistem Anda sehingga Anda tidak perlu khawatir tentang detail implementasi. Anda cukup menjelaskan status yang diinginkan, dan Ansible memastikan sistem target cocok dengannya.
Ketersediaan modul ini adalah salah satu manfaat utama Ansible, dan sering disebut sebagai Ansible yang memiliki "baterai disertakan." Memang, Anda dapat menemukan modul untuk sejumlah besar tugas, dan meskipun ini bagus, saya sering mendengar dari pemula bahwa mereka tidak tahu harus mulai dari mana.
Meskipun pilihan modul Anda akan bergantung secara eksklusif pada kebutuhan Anda dan apa yang Anda coba untuk otomatisasi dengan Ansible, berikut adalah sepuluh modul teratas yang Anda perlukan untuk memulai otomatisasi sistem Ansible untuk Linux.
1. salin
Modul salin memungkinkan Anda untuk menyalin file dari node kontrol Ansible ke host target. Selain menyalin file, ini memungkinkan Anda untuk mengatur kepemilikan, izin, dan label SELinux ke file tujuan. Berikut adalah contoh penggunaan modul salin untuk menyalin file konfigurasi "pesan hari ini" ke host target:
- name:Pastikan file MOTD ada di tempatnya
salin:
src:files/motd
tujuan:/etc/motd
pemilik:root
grup:root
mode:0644
Untuk konten yang tidak terlalu rumit, Anda dapat menyalin konten langsung ke file tujuan tanpa memiliki file lokal, seperti ini:
- nama:Pastikan file MOTD ada di tempatnya
salin:
konten:"Selamat datang di sistem ini."
tujuan:/etc/motd
pemilik:root
grup:root
mode:0644
Modul ini bekerja secara idempoten, artinya modul ini hanya akan menyalin file jika file yang sama belum ada dengan konten dan izin yang sama.
Modul salin adalah opsi yang bagus untuk menyalin sejumlah kecil file dengan konten statis. Jika Anda perlu menyalin banyak file, lihat modul sinkronisasi. Untuk menyalin file dengan konten dinamis, lihat template
modul berikutnya.
2. templat
Modul template bekerja mirip dengan copy
modul, tetapi memproses konten secara dinamis menggunakan bahasa templat Jinja2 sebelum menyalinnya ke host target.
Misalnya, tentukan template "pesan hari ini" yang menampilkan nama sistem target, seperti ini:
$ vi templates/motd.j2
Selamat datang di {{ inventory_hostname }}.
Kemudian, buat instance template ini menggunakan template
modul, seperti ini:
- nama:Pastikan file MOTD ada di tempatnya
template:
src:templates/motd.j2
tujuan:/etc/motd
pemilik:root
grup:root
mode:0644
Sebelum menyalin file, Ansible memproses template dan menginterpolasi variabel, menggantinya dengan nama sistem host target. Misalnya, jika nama sistem target adalah rh8-vm03
, hasil filenya adalah:
Selamat datang di rh8-vm03.
Sedangkan copy
modul juga dapat menginterpolasi variabel saat menggunakan content
parameter, template
module memungkinkan fleksibilitas tambahan dengan membuat file template, yang memungkinkan Anda mendefinisikan konten yang lebih kompleks, termasuk for
loop, if
kondisi, dan lainnya. Untuk referensi lengkap, periksa dokumentasi Jinja2.
Modul ini juga idempoten, dan tidak akan menyalin file jika konten pada sistem target sudah sesuai dengan konten template.
3. pengguna
Modul pengguna memungkinkan Anda untuk membuat dan mengelola pengguna Linux di sistem target Anda. Modul ini memiliki banyak parameter berbeda, tetapi dalam bentuknya yang paling dasar, Anda dapat menggunakannya untuk membuat pengguna baru.
Misalnya, untuk membuat pengguna ricardo
dengan UID 2001, bagian dari grup users
dan wheel
, dan sandi mypassword
, terapkan user
modul dengan parameter berikut:
- nama:Pastikan pengguna ricardo ada
pengguna:
nama:ricardo
grup:pengguna
grup:roda
uid:2001
sandi:"{{ 'mypassword' | password_hash('sha512') }}"
status:sekarang
Perhatikan bahwa modul ini mencoba menjadi idempoten, tetapi tidak dapat menjamin itu untuk semua opsinya. Misalnya, jika Anda menjalankan contoh modul sebelumnya lagi, kata sandi akan diatur ulang ke nilai yang ditentukan, mengubah pengguna dalam sistem untuk setiap eksekusi. Untuk membuat contoh ini idempoten, gunakan parameter update_password: on_create
, memastikan Ansible hanya menyetel sandi saat membuat pengguna dan bukan pada proses berikutnya.
Anda juga dapat menggunakan modul ini untuk menghapus pengguna dengan menyetel parameter state: absent
.
user
modul memiliki banyak pilihan bagi Anda untuk mengelola beberapa aspek pengguna. Pastikan Anda melihat dokumentasi modul untuk informasi lebih lanjut.
4. paket
Modul paket memungkinkan Anda untuk menginstal, memperbarui, atau menghapus paket perangkat lunak dari sistem target Anda menggunakan manajer paket standar sistem operasi.
Misalnya, untuk menginstal server web Apache pada mesin Red Hat Linux, terapkan modul seperti ini:
- name:Pastikan paket Apache diinstal
package:
name:httpd
state:present
Selengkapnya tentang Ansible
- Panduan memulai cepat untuk Ansible
- Lembar contekan yang memungkinkan
- Kursus online gratis:Kemungkinan penting
- Unduh dan instal Ansible
- eBook:Perusahaan otomatis
- eBuku:Memungkinkan untuk DevOps
- eBuku Gratis yang Memungkinkan
- Artikel terbaru yang memungkinkan
Modul ini agnostik distribusi, dan bekerja dengan menggunakan manajer paket yang mendasarinya, seperti yum/dnf
untuk distribusi berbasis Red Hat dan apt
untuk Debian. Karena itu, ia hanya melakukan tugas-tugas dasar seperti menginstal dan menghapus paket. Jika Anda memerlukan kontrol lebih besar atas opsi pengelola paket, gunakan modul khusus untuk distribusi target.
Juga, perlu diingat bahwa, meskipun modul itu sendiri bekerja pada distribusi yang berbeda, nama paket untuk masing-masing bisa berbeda. Misalnya, dalam distribusi berbasis Red Hat, nama paket server web Apache adalah httpd
, sedangkan di Debian adalah apache2
. Pastikan buku pedoman Anda menangani hal itu.
Modul ini idempoten, dan tidak akan berfungsi jika status sistem saat ini cocok dengan status yang diinginkan.
5. layanan
Gunakan modul layanan untuk mengelola layanan sistem target menggunakan sistem init yang diperlukan; misalnya, systemd.
Dalam bentuknya yang paling dasar, yang harus Anda lakukan adalah memberikan nama layanan dan status yang diinginkan. Misalnya, untuk memulai sshd
service, gunakan modul seperti ini:
- nama:Pastikan SSHD dimulai
layanan:
nama:sshd
status:mulai
Anda juga dapat memastikan layanan dimulai secara otomatis saat sistem target melakukan booting dengan memberikan parameter enabled: yes
.
Seperti halnya package
modul, service
modul fleksibel dan bekerja di distribusi yang berbeda. Jika Anda perlu menyempurnakan sistem init target tertentu, gunakan modul yang sesuai; misalnya modul systemd
.
Mirip dengan modul lain yang telah Anda lihat sejauh ini, service
modul juga idempoten.
6. firewall
Gunakan modul firewalld untuk mengontrol firewall sistem dengan firewalld
daemon pada sistem yang mendukungnya, seperti distribusi berbasis Red Hat.
Misalnya, untuk membuka layanan HTTP pada port 80, gunakan seperti ini:
- nama:Pastikan port 80 (http) terbuka
firewalld:
layanan:http
status:diaktifkan
permanen:ya
langsung:yaAnda juga dapat menentukan port khusus alih-alih nama layanan dengan
port
parameter. Dalam hal ini, pastikan untuk menentukan protokol juga. Misalnya, untuk membuka port TCP 3000, gunakan ini:- nama:Pastikan port 3000/TCP terbuka
firewalld:
port:3000/tcp
status:diaktifkan
permanen:ya
langsung:yaAnda juga dapat menggunakan modul ini untuk mengontrol
firewalld
lainnya aspek seperti zona atau aturan kompleks. Pastikan untuk memeriksa dokumentasi modul untuk daftar opsi yang lengkap.7. berkas
Modul file memungkinkan Anda mengontrol status file dan direktori—menyetel izin, kepemilikan, dan label SELinux.
Misalnya, gunakan
file
modul untuk membuat direktori/app
dimiliki oleh penggunaricardo
, dengan izin baca, tulis, dan eksekusi untuk pemilik dan grupuser
:- name:Pastikan direktori /app ada
file:
path:/app
state:directory
owner:ricardo
group:users
modus:0770Anda juga dapat menggunakan modul ini untuk mengatur properti file pada direktori secara rekursif dengan menggunakan parameter
recurse: yes
atau hapus file dan direktori dengan parameterstate: absent
.Modul ini bekerja dengan idempotensi untuk sebagian besar parameternya, tetapi beberapa di antaranya mungkin membuatnya mengubah jalur target setiap saat. Periksa dokumentasi untuk detail lebih lanjut.
8. lineinfile
Modul lineinfile memungkinkan Anda untuk mengelola satu baris pada file yang ada. Ini berguna untuk memperbarui konfigurasi yang ditargetkan pada file yang ada tanpa mengubah sisa file atau menyalin seluruh file konfigurasi.
Misalnya, tambahkan entri baru ke file host Anda seperti ini:
- name:Pastikan host rh8-vm03 di file hosts
lineinfile:
path:/etc/hosts
line:192.168.122.236 rh8-vm03
state:presentAnda juga dapat menggunakan modul ini untuk mengubah baris yang ada dengan menerapkan parameter
regexp
untuk mencari jalur yang ada untuk diganti. Misalnya, perbaruisshd_config
file untuk mencegah login root dengan memodifikasi barisPermitRootLogin yes
kePermitRootLogin no
:- name:Pastikan root tidak dapat login melalui ssh
lineinfile:
path:/etc/ssh/sshd_config
regexp:'^PermitRootLogin'
line:PermitRootLogin no
status:sekarangCatatan:Gunakan modul layanan untuk memulai ulang layanan SSHD untuk mengaktifkan perubahan ini.
Modul ini juga idempoten, tetapi, dalam kasus modifikasi baris, pastikan ekspresi reguler cocok dengan status asli dan yang diperbarui untuk menghindari perubahan yang tidak perlu.
9. batalkan pengarsipan
Gunakan modul unarchive untuk mengekstrak konten file arsip seperti
tar
atauzip
file. Secara default, ini menyalin file arsip dari node kontrol ke mesin target sebelum mengekstraknya. Ubah perilaku ini dengan memberikan parameterremote_src: yes
.Misalnya, ekstrak konten
.tar.gz
file yang telah diunduh ke host target dengan sintaks ini:- nama:Ekstrak konten app.tar.gz
batalkan pengarsipan:
src:/tmp/app.tar.gz
tujuan:/app
remote_src:yesBeberapa teknologi arsip memerlukan paket tambahan untuk tersedia di sistem target; misalnya, paket
unzip
untuk mengekstrak.zip
file.Tergantung pada format arsip yang digunakan, modul ini mungkin atau mungkin tidak bekerja secara idempoten. Untuk mencegah perubahan yang tidak perlu, Anda dapat menggunakan parameter
creates
untuk menentukan file atau direktori yang akan dibuat modul ini saat mengekstrak konten arsip. Jika file atau direktori ini sudah ada, modul tidak akan mengekstrak konten lagi.10. perintah
Modul perintah adalah modul yang fleksibel yang memungkinkan Anda untuk menjalankan perintah sewenang-wenang pada sistem target. Dengan menggunakan modul ini, Anda dapat melakukan hampir semua hal pada sistem target selama ada perintah untuk itu.
Meskipun
command
modul fleksibel dan kuat, itu harus digunakan dengan hati-hati. Hindari menggunakan modul perintah untuk menjalankan tugas jika ada modul lain yang sesuai untuk itu. Misalnya, Anda bisa buat pengguna dengan menggunakancommand
modul untuk menjalankanuseradd
perintah, tetapi Anda harus gunakanuser
sebagai gantinya, karena ia mengabstraksi banyak detail dari Anda, menangani kasus sudut dan memastikan konfigurasi hanya berubah bila diperlukan.Untuk kasus di mana tidak ada modul yang tersedia, atau untuk menjalankan skrip atau program khusus,
command
modul masih merupakan sumber yang bagus. Misalnya, gunakan modul ini untuk menjalankan skrip yang sudah ada di mesin target:- name:Jalankan penginstal aplikasi
perintah:"/app/install.sh"Secara default, modul ini tidak idempoten, karena Ansible mengeksekusi perintah setiap saat. Untuk membuat
command
modul idempoten, Anda dapat menggunakanwhen
kondisi untuk hanya menjalankan perintah jika ada kondisi yang sesuai, ataucreates
argumen, mirip dengan contoh modul unarchive.Apa selanjutnya?
Dengan menggunakan modul ini, Anda dapat mengonfigurasi seluruh sistem Linux dengan menyalin, membuat templat, atau memodifikasi file konfigurasi, membuat pengguna, menginstal paket, memulai layanan sistem, memperbarui firewall, dan banyak lagi.
Jika Anda baru mengenal Ansible, pastikan Anda memeriksa dokumentasi tentang cara membuat buku pedoman untuk menggabungkan modul-modul ini untuk mengotomatisasi sistem Anda. Beberapa tugas ini memerlukan berjalan dengan hak tinggi untuk bekerja. Untuk detail selengkapnya, periksa dokumentasi eskalasi hak istimewa.
Pada Ansible 2.10, modul diatur dalam koleksi. Sebagian besar modul dalam daftar ini adalah bagian dari
ansible.builtin
koleksi dan tersedia secara default dengan Ansible, tetapi beberapa di antaranya adalah bagian dari koleksi lain. Untuk daftar koleksi, periksa dokumentasi Ansible.
Linux