Tutorial Ansible untuk Pemula: Playbook & Perintah

⚡ Ringkasan Cerdas

Ansible adalah mesin otomatisasi sumber terbuka tanpa agen yang mengkonfigurasi server melalui SSH, menjalankan perintah ad-hoc, dan mengatur penyebaran kompleks melalui playbook YAML, peran, dan templat yang dapat digunakan kembali di seluruh Linux dan Windows infrastruktur.

  • 🧩 Tanpa agen Architekstur: Ansible terhubung ke klien melalui SSH dan mengirimkan modul, sehingga tidak perlu menginstal perangkat lunak agen pada node yang dikelola.
  • 📥 instalasi: Instal Ansible pada node kontrol dengan yum dan EPEL di CentOS atau RHEL, atau dengan apt dan PPA di Ubuntu atau Debian.
  • Perintah Ad-hoc: Jalankan tugas sekali jalan seperti ping, salin, atau gunakan yum untuk menelusuri inventaris menggunakan sintaks modul ansible -m.
  • 📜 Playbook: Jelaskan kondisi yang diinginkan dalam playbook YAML yang mengelompokkan play, task, dan module untuk mengkonfigurasi banyak server secara konsisten.
  • 🧱 Peran dan Templat: Pisahkan playbook besar menjadi role yang dapat digunakan kembali yang dibuat dengan ansible-galaxy, dan render file konfigurasi dengan template Jinja2.
  • 🔁 Pengelola dan Fakta: Aktifkan handler melalui notifikasi saat terjadi perubahan, dan gunakan variabel gather_facts untuk otomatisasi kondisional dan berulang.
  • 🎯 Studi kasus: Satu playbook p4.yml dapat menjalankan peran selinux, httpd, dan resolver di semua host, yang masing-masing dikendalikan oleh sebuah tag.

Tutorial Ansible untuk pemula yang mencakup instalasi, perintah ad-hoc, playbook, role, dan template.

Ansible adalah salah satu alat otomatisasi sumber terbuka yang paling banyak diadopsi di era modern. DevOpsAnsible, yang dihargai karena desainnya yang tanpa agen dan file konfigurasinya yang sederhana dan mudah dibaca, tutorial Ansible untuk pemula ini menjelaskan apa itu Ansible, cara menginstalnya, dan cara menggunakan perintah ad-hoc, playbook, role, dan template melalui contoh-contoh praktis.

Apa itu Ansible?

Mungkin adalah alat otomatisasi dan orkestrasi sumber terbuka untuk penyediaan perangkat lunak, manajemen konfigurasi, dan penyebaran perangkat lunak. Alat ini mengkonfigurasi sistem mirip Unix dan Windows Ansible, yang menyediakan infrastruktur sebagai kode melalui bahasa deklaratifnya sendiri, sering dibandingkan dengan alat berbasis agen seperti... Wayang.

Ansible populer karena instalasinya yang sederhana, konektivitas klien yang mudah, dan desain tanpa agen. Ansible terhubung ke klien melalui... SSHDengan demikian, tidak diperlukan agen khusus di sisi klien. Ansible mengirimkan modul ke setiap klien, modul tersebut berjalan secara lokal, dan outputnya dikembalikan ke server Ansible.

Karena bergantung pada SSH, Ansible terhubung ke klien dengan mudah menggunakan kunci SSH, yang menyederhanakan seluruh proses. Detail klien seperti nama host atau alamat IP dan port SSH disimpan dalam file yang disebut file inventaris. Setelah Anda membuat dan mengisi file inventaris, Ansible dapat menggunakannya.

Mengapa menggunakan Ansible?

Berikut beberapa manfaat penting menggunakan Ansible:

  • Salah satu keunggulan paling signifikan dari Ansible adalah bahwa perangkat lunak ini gratis untuk digunakan oleh siapa saja.
  • Instalasi dan penggunaannya tidak memerlukan keahlian administrator sistem khusus, dan dokumentasi resminya sangat komprehensif.
  • Modularitasnya di seluruh plugin, modul, inventaris, dan playbook menjadikan Ansible sebagai pendamping yang sangat baik untuk mengatur lingkungan yang besar.
  • Ansible ringan dan konsisten, tanpa batasan pada sistem operasi atau perangkat keras yang mendasarinya.
  • Sistem ini sangat aman berkat desain tanpa agen dan penggunaan fitur keamanan OpenSSH.
  • Ansible memiliki kurva pembelajaran yang mulus, didukung oleh dokumentasi yang lengkap serta struktur dan konfigurasi yang mudah dipelajari.

Kekuatan-kekuatan ini, terutama jika dibandingkan dengan kekuatan lainnya alternatif untuk Ansible, membantu menjelaskan adopsinya yang cepat. Sebelum menginstalnya, ada baiknya memahami bagaimana proyek ini berkembang.

Sejarah yang Mungkin

Berikut adalah tonggak-tonggak penting dalam sejarah Ansible:

  • Proyek Ansible dimulai pada Februari 2012. Proyek ini pertama kali dikembangkan oleh Michael DeHaan, pencipta Cobbler dan Func (Fedora Unified Network Controller).
  • Awalnya bernama AnsibleWorks Inc, perusahaan yang mendanai Ansible diakuisisi oleh RedHat pada tahun 2015 dan kemudian, bersama dengan RedHat, berada di bawah naungan [nama perusahaan induk]. IBM payung.
  • Saat ini, Ansible disertakan dalam distribusi seperti Fedora Linux, RHEL, CentOS, dan Oracle Linux.

Istilah penting yang digunakan di Ansible

Istilah-istilah berikut muncul di sepanjang tutorial Ansible ini dan penting untuk diketahui sebelum Anda mulai:

Server yang memungkinkan

Mesin tempat Ansible diinstal dan dari mana semua tugas dan playbook dijalankan.

Modul

Modul adalah sebuah perintah, atau sekumpulan perintah Ansible serupa, yang dimaksudkan untuk dieksekusi di sisi klien.

tugas

Tugas adalah bagian yang terdiri dari satu prosedur tunggal yang harus diselesaikan.

Peran

Suatu cara untuk mengatur tugas dan file terkait sehingga dapat dipanggil nanti dalam sebuah playbook.

Fakta

Informasi yang diambil dari variabel global sistem klien melalui operasi gather_facts.

Inventaris

Sebuah berkas yang berisi data tentang server klien Ansible. Berkas ini didefinisikan dalam contoh selanjutnya sebagai berkas hosts.

Bermain

Pelaksanaan sebuah strategi permainan.

Handler

Sebuah tugas yang hanya dipanggil ketika ada pemberi notifikasi.

Pemberitahu

Bagian yang dikaitkan dengan tugas yang memanggil penangan jika output berubah.

label

Nama yang diberikan pada suatu tugas yang dapat digunakan kemudian untuk menjalankan hanya tugas atau kelompok tugas tertentu tersebut.

Kemungkinan Instalasi di Linux

Setelah Anda mempertimbangkan berbagai pilihan dan memutuskan untuk menggunakan Ansible, langkah selanjutnya adalah menginstalnya di sistem Anda. Panduan singkat berikut mencakup instalasi pada sistem yang paling populer. Linux distribusi.

Instal Ansible pada sistem Centos/RedHat

Langkah 1) Instal repositori EPEL.

[root@ansible-server ~]# sudo yum install epel-release

Langkah 2) Instal paket ansible.

[root@ansible-server ~]# sudo  yum install -y ansible

Instal Ansible pada sistem Centos/RedHat

Instal mungkin Ubuntu/sistem Debian

Langkah 1) Lakukan pembaruan pada paket-paket tersebut.

$ sudo apt update

Langkah 2) Instal paket software-properties-common.

$ sudo apt install software-properties-common

Langkah 3) Instal arsip paket pribadi ansible.

$ sudo apt-add-repository ppa:ansible/ansible

Langkah 4) Instal Ansible.

$ sudo apt update
$ sudo apt install ansible

Perintah ad-hoc yang mungkin

Salah satu cara termudah untuk menggunakan Ansible adalah melalui perintah ad-hoc. Perintah ini berguna ketika Anda ingin menjalankan perintah pada satu server atau sekelompok server. Perintah ad-hoc tidak disimpan untuk penggunaan di masa mendatang, tetapi merupakan cara cepat untuk berinteraksi dengan server yang Anda pilih.

Untuk tutorial Ansible ini, sebuah file hosts sederhana dengan dua server dikonfigurasi, yang berisi host1 dan host2.

Anda dapat memastikan bahwa host dapat dijangkau dari server Ansible dengan mengeluarkan perintah berikut: ping perintah pada semua host.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Perintah ad-hoc yang mungkin

Penjelasan:

  1. Status perintah, dalam hal ini SUKSES
  2. Host tempat perintah dijalankan
  3. Perintah yang dikeluarkan melalui parameter -m, dalam hal ini, ping
  4. Dengan parameter -i, Anda dapat mengarahkan ke file host.

Anda juga dapat menjalankan perintah yang sama pada satu host jika diperlukan.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Perintah ad-hoc yang mungkin

Penjelasan:

  1. Parameter batas dapat digunakan untuk mengeluarkan perintah hanya pada host tertentu di file host
  2. Nama host seperti yang ditentukan dalam file inventaris

Jika Anda perlu menyalin file ke beberapa tujuan dengan cepat, gunakan modul salin, yang bergantung pada SCP. Perintah dan outputnya akan terlihat seperti berikut:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Perintah ad-hoc yang mungkin

Penjelasan:

  1. Salin modul yang ditentukan
  2. Argumen modul, dalam hal ini, adalah jalur absolut sumber dan jalur absolut tujuan.
  3. Output perintah Ansible yang mencerminkan keberhasilan perintah copy dan detail lainnya seperti checksum sha1 atau md5 untuk pemeriksaan integritas file dan metadata seperti pemilik, ukuran, atau izin. Sangat mudah untuk menginstal paket di banyak server. Ansible memiliki beberapa modul yang berinteraksi dengan installer yang digunakan, seperti yum, apt, dnf, dll.

Pada contoh berikutnya, Anda akan menginstal sebuah paket menggunakan modul yum pada dua host CentOS.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package         Arch              Version                Repository       Size\n========================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n========================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package         Arch              Version                Repository       Size\n========================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n========================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Perintah ad-hoc yang mungkin

Penjelasan:

  1. Modul Yum digunakan dalam contoh ini
  2. Ini mendefinisikan argumen modul, dan dalam hal ini, Anda akan memilih nama paket dan statusnya. Jika negara tidak ada, misalnya, paket akan dicari dan jika ditemukan, dihapus
  3. Ketika diwarnai dengan warna kuning, Anda akan melihat output dari perintah yang memungkinkan dengan status berubah, artinya dalam hal ini, paket telah ditemukan dan diinstal.
  4. Status perintah yum install dikeluarkan melalui ansible. Dalam hal ini paket ncdu.x86_64 0:1.14-1.el7 telah diinstal.

Tentu saja, semua opsi penginstal yum dapat digunakan melalui Ansible, termasuk pembaruan, instalasi, versi terbaru, dan penghapusan.

Pada contoh di bawah ini, perintah yang sama dikeluarkan untuk menghapus paket ncdu yang sebelumnya telah diinstal.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package         Arch              Version               Repository        Size\n========================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n========================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n========================================================================\n Package         Arch              Version               Repository        Size\n========================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n========================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Perintah ad-hoc yang mungkin

Penjelasan:

  1. Output dari perintah yum menunjukkan bahwa paket telah dihapus.

Fitur penting Ansible lainnya adalah kemampuannya untuk mengumpulkan fakta tentang suatu sistem. Ia mengumpulkan informasi perangkat keras, perangkat lunak, dan versi, lalu menyimpan setiap nilai dalam variabel yang dapat Anda gunakan kembali di kemudian hari.

Saat Anda memerlukan informasi detail tentang sistem yang akan dimodifikasi oleh Ansible, modul setup mengumpulkan fakta-fakta ini dari variabel sistem.

Perintah ad-hoc yang mungkin

Buku Pedoman yang Mungkin

Buku Pedoman yang Mungkin Playbook adalah cara untuk mengirim perintah ke sistem jarak jauh melalui skrip. Playbook mengkonfigurasi lingkungan sistem yang kompleks dan meningkatkan fleksibilitas dengan menjalankan satu skrip terhadap satu atau lebih sistem. Playbook lebih berfungsi sebagai bahasa konfigurasi daripada bahasa pemrograman.

Perintah playbook menggunakan format YAML, sehingga sintaks yang dibutuhkan sedikit, tetapi indentasi harus diperhatikan. Sesuai namanya, playbook adalah kumpulan play. Melalui playbook, Anda dapat menetapkan peran spesifik untuk beberapa host dan peran berbeda untuk host lainnya, mengorkestrasi banyak server dalam satu file.

Sebelum melanjutkan dengan contoh playbook, ada baiknya mendefinisikan sebuah tugas terlebih dahulu. Tugas adalah antarmuka ke modul Ansible untuk peran dan playbook.

Sekarang, perhatikan sebuah playbook Ansible dengan satu play yang berisi beberapa tugas, seperti yang ditunjukkan di bawah ini:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Buku Pedoman yang Mungkin

Dalam playbook di atas, host group1 dalam file hosts ditargetkan untuk instalasi paket lldpad menggunakan modul yum. Layanan lldpad yang dibuat setelah instalasi kemudian dijalankan menggunakan modul service, yang sebagian besar berinteraksi dengan ensemble systemd.

Penjelasan:

  1. Sekelompok host tempat pedoman akan dijalankan
  2. Modul Yum digunakan dalam tugas ini untuk instalasi lldpad
  3. Modul layanan digunakan untuk memeriksa apakah layanan aktif dan berjalan setelah instalasi

Setiap playbook Ansible bekerja dengan file inventaris. File inventaris berisi daftar server yang dibagi menjadi beberapa grup, memberikan kontrol yang lebih baik atas detail seperti alamat IP dan port SSH untuk setiap host.

Berkas inventaris untuk contoh playbook ini terlihat seperti berikut. Terdapat dua grup, group1 dan group2, masing-masing berisi host1 dan host2.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Buku Pedoman yang Mungkin

Penjelasan:

  1. Nama grup
  2. Nama host, dengan alamat IP dan port ssh, dalam hal ini yang default, 22.

Contoh playbook Ansible berikutnya berisi dua play untuk dua grup host. Untuk grup pertama, group1, SELinux diaktifkan, dan ketika diaktifkan, sebuah pesan akan muncul di layar host.

Untuk kelompok kedua, paket httpd hanya diinstal jika ansible_os_family adalah RedHat dan ansible_system_vendor adalah HP.

ansible_os_family dan ansible_system_vendor adalah variabel yang dikumpulkan dengan opsi gather_facts, dan dapat digunakan seperti pada contoh kondisional ini.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Buku Pedoman yang Mungkin

Penjelasan:

  1. Contoh klausa kapan, Dalam hal ini, tipe OS ketika adalah Debian. Variabel ansible_os_family dikumpulkan melalui fungsionalitas Gather_facts.
  2. Keluaran tugas didaftarkan untuk digunakan di masa mendatang, dengan namanya aktifkan_selinux
  3. Contoh lain dari klausa when. Dalam kasus ini, sebuah pesan akan ditampilkan untuk pengguna host jika SELinux memang diaktifkan sebelumnya.
  4. Contoh lain dari klausa kapan yang terdiri dari dua aturan

Selain tugas, ada juga tugas khusus yang disebut handler. Handler harus memiliki nama unik di seluruh playbook. Handler bekerja seperti tugas biasa, tetapi handler dapat diberi tahu melalui notifier.

Jika sebuah handler tidak diberi tahu selama eksekusi playbook, maka handler tersebut tidak akan dijalankan. Namun, jika lebih dari satu tugas memberi tahu sebuah handler, maka handler tersebut hanya akan dijalankan sekali setelah semua tugas selesai.

Pada contoh di bawah ini, tugas tertentu memiliki bagian pemberitahuan yang memanggil tugas lain. Jika output dari tugas pertama berubah, tugas penangan akan dipanggil. Contoh umum adalah mengubah file konfigurasi dan kemudian memulai ulang layanan yang terpengaruh.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

Dalam hal ini, jika tugas pertama, “sshd config file modify port”, berubah, artinya port tersebut bukan lagi 28675, maka port tersebut dimodifikasi dan tugas tersebut memberi tahu handler dengan nama yang sama, yang kemudian memulai ulang layanan sshd.

Buku Pedoman yang Mungkin

Penjelasan:

  1. Contoh pemberi notifikasi
  2. Contoh seorang pawang

Peran yang Mungkin

Saat bekerja dengan playbook yang besar, akan lebih mudah untuk membagi tugas ke dalam peran. Peran juga mempermudah penggunaan kembali pekerjaan di kemudian hari. Sebuah peran adalah kumpulan tugas yang dapat dipindahkan dari satu playbook ke playbook lain dan dijalankan secara independen, meskipun hanya melalui file playbook.

Peran disimpan dalam direktori terpisah dan mengikuti struktur direktori tertentu.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

File YAML di direktori defaults berisi variabel default yang digunakan dengan playbook. Direktori handlers menyimpan handler, dan direktori meta berisi informasi tentang dependensi author dan role. Direktori tasks berisi file YAML utama untuk role tersebut.

Direktori tests berisi contoh playbook YAML dan contoh file inventaris, dan sebagian besar digunakan untuk pengujian sebelum peran sebenarnya dibuat.

Direktori vars berisi file YAML tempat semua variabel yang digunakan oleh peran tersebut didefinisikan. Direktori templates dan files menyimpan templat dan file yang digunakan oleh tugas-tugas dalam peran tersebut.

Untuk membuat struktur direktori untuk suatu peran, gunakan perintah berikut dengan nama peran sebagai parameter terakhir:

[root@ansible-server test2]# ansible-galaxy init role1

Ansible juga bekerja dengan baik dengan template, dan menggunakan Jinja2 sebagai bahasa templatnya.

Contoh selanjutnya menunjukkan seperti apa tampilan template Jinja2 dasar dan bagaimana cara menggunakannya dalam sebuah role.

Saat dijalankan, tergantung misalnya pada pusat data tempat server Anda berada, Anda dapat memilih dari beberapa nameserver, yang masing-masing sesuai dengan pusat data, menggunakan variabel resolver_ip_addresses.

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

Dalam contoh ini, direktori playbook mendefinisikan beberapa variabel, termasuk resolver_ip_addresses, dengan nilai yang berbeda tergantung pada pusat data.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver

Peran yang Mungkin

Penjelasan:

  1. Nama template yang akan digunakan. Templat terletak di direktori templat di jalur peran
  2. Jalur tujuan nama file yang akan diganti dengan template, di sisi klien.
  3. Izin file tujuan

Tugas peran juga dapat memiliki kolom tag dengan nama yang ditetapkan. Lebih dari satu tugas dapat berbagi tag yang sama, dan saat Anda menjalankan playbook, Anda dapat menentukan tag sehingga hanya tugas yang diberi tag yang dieksekusi.

Studi Kasus yang Mungkin

Pada bagian ini, kita akan menganalisis studi kasus dari sebuah playbook Ansible penting yang memiliki tiga peran. Tujuannya adalah untuk memberikan contoh praktis dari konsep-konsep yang telah dibahas sejauh ini. Beberapa contoh sebelumnya dari tutorial ini diadaptasi dan digunakan kembali dalam playbook ini.

Berikut adalah struktur direktori dari playbook tersebut. File YAML yang digunakan adalah p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Playbook ini memiliki tiga peran. Peran resolver menetapkan nameserver tertentu pada server dengan menyalin file ke tujuan /etc/resolv.conf. Peran httpd menginstal paket httpd dengan modul yum, dan peran ketiga mengaktifkan SELinux dan memberi tahu pengguna yang masuk untuk me-reboot sistem. Setiap peran dibuat dengan perintah ansible-galaxy.

Peran penyelesai, tugas main.yml:

Studi Kasus yang Mungkin

Peran Httpd, tugas main.yml:

Studi Kasus yang Mungkin

Peran Selinux, tugas main.yml:

Studi Kasus yang Mungkin

Berikut adalah playbook p4.yml. Playbook ini berjalan di semua host kecuali ditentukan lain pada baris perintah, berjalan sebagai pengguna root pada port 22 (SSH), mengumpulkan fakta sebelum menjalankan peran, dan menjalankan ketiga peran tersebut. Setiap peran dapat dijalankan secara independen dengan menentukan tag-nya pada baris perintah ansible-playbook dengan parameter –t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

Anda kemudian dapat menjalankan playbook p4.yml pada kedua host dan menginterpretasikan outputnya. Perintah yang sama dapat dijalankan dengan parameter –check untuk uji coba, dan dengan parameter -k jika Anda ingin menggunakan otentikasi kata sandi.

Studi Kasus yang Mungkin

Penjelasan:

  1. Perintah playbook yang memungkinkan yang menjalankan p4.yml
  2. Playbook melewatkan peran SELinux karena sudah diaktifkan.
  3. Kemungkinan ditemukan bahwa paket httpd sudah terinstal, sehingga kembali dengan baik.
  4. Resolver telah ditetapkan, dan status pemecah peran telah diubah.

Lembar Cheat Perintah yang Mungkin

Instal repo EPEL pada sistem Centos/RHEL

[root@ansible-server ~]# sudo yum install epel-release

Instal paket yang memungkinkan pada sistem Centos/RHEL

[root@ansible-server ~]# sudo  yum install -y ansible

Lakukan pembaruan pada paket di Debian/Ubuntu sistem

$ sudo apt update

Instal paket software-properties-common di Debian/Ubuntu sistem

$ sudo apt install software-properties-common

Instal arsip paket pribadi ansible di Debian/Ubuntu sistem

$ sudo apt-add-repository ppa:ansible/ansible

Instal mungkin di Debian/Ubuntu sistem

$ sudo apt update
$ sudo apt install ansible

Masalah a ping perintah pada semua server yang didefinisikan dalam file inventaris bernama hosts

[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Masalah a ping perintah hanya pada host2

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Salin file “testfile” pada semua host di file inventaris

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Instal paket ncdu di semua host

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Hapus paket ncdu di semua host

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Bangun struktur direktori untuk peran bernama role1.

[root@ansible-server test2]# ansible-galaxy init role1

Buku pedoman p4.yml yang dijalankan kering

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Jalankan pedoman p4.yml dengan otentikasi kata sandi untuk semua host

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Pertanyaan Umum Demo Slot

Ya. Ansible bersifat agentless, jadi tidak ada perangkat lunak yang berjalan di node yang dikelola. Ia terhubung melalui SSH, atau WinRM untuk Windows, dan mengirimkan modul-modul kecil yang dieksekusi pada target dan kemudian dihapus. Hanya node kontrol yang membutuhkan Ansible dan Python diinstal.

Playbook Ansible ditulis dalam YAML, yang mudah dibaca manusia dan bergantung pada indentasi daripada tanda kurung kurawal. Template menggunakan bahasa templat Jinja2, sementara fakta dan variabel memungkinkan satu playbook beradaptasi dengan banyak host. Tidak diperlukan latar belakang pemrograman umum untuk memulai.

Ansible tidak menggunakan agen dan berbasis push, mengirimkan perubahan melalui SSH, sedangkan Wayang ke Chef biasanya berbasis agen dan berbasis tarikan. Ansible menggunakan YAML, sedangkan Chef Ansible menggunakan Ruby dan Puppet menggunakan DSL-nya sendiri. Banyak tim memilih Ansible karena kurva pembelajarannya lebih rendah.

Ya. Ansible gratis dan bersifat open source di bawah lisensi GNU GPL, dikelola oleh Red Hat dan komunitas yang besar. Mesin inti dan ribuan modulnya tidak dikenakan biaya. Red Hat juga menjual Ansible Automation Platform, produk berbayar yang menambahkan GUI, akses berbasis peran, dan dukungan.

Ya. Selain host Linux dan Unix yang diakses melalui SSH, Ansible mengelola Windows node melalui WinRM menggunakan perangkat khusus. Windows Modul. Ia dapat menginstal paket, mengedit registri, mengelola layanan, dan menjalankan PowerShell, sehingga cocok untuk kombinasi Linux dan Windows Armada dioperasikan secara otomatis dari satu titik kendali.

Ansible Galaxy adalah pusat publik untuk berbagi dan mengunduh peran dan koleksi komunitas. Perintah ansible-galaxy membuat kerangka struktur direktori peran dan menginstal peran yang telah diterbitkan, sehingga Anda dapat menggunakan kembali otomatisasi yang telah diuji alih-alih menulis setiap playbook dari awal.

Asisten AI dapat membuat draf playbook YAML dari permintaan dalam bahasa biasa, menjelaskan modul yang tidak dikenal, dan menyarankan perbaikan untuk tugas yang gagal atau kesalahan sintaksis. Mereka juga dapat mengkonversi skrip shell menjadi tugas idempoten. Selalu tinjau playbook yang dihasilkan untuk memastikan nama modul dan idempoten yang benar sebelum menjalankannya.

Ya. Kopilot GitHub Melengkapi tugas playbook, entri inventaris, dan templat Jinja2 secara otomatis dari komentar singkat atau nama file. Anggap outputnya sebagai titik awal, dan periksa indentasi, parameter modul, dan nama variabel, karena YAML yang dihasilkan dapat merujuk pada sintaks yang sudah usang atau modul yang tidak ada.

Ringkaslah postingan ini dengan: