Artikel ini menjelaskan bagian-bagian berbeda dari buku pedoman Ansible dimulai dengan gambaran umum yang sangat luas tentang apa itu Ansible dan bagaimana Anda dapat menggunakannya. Ansible adalah cara menggunakan sintaks YAML yang mudah dibaca untuk menulis buku pedoman yang dapat mengotomatiskan tugas untuk Anda. Playbook ini dapat berkisar dari yang sangat sederhana hingga yang sangat kompleks dan satu playbook bahkan dapat disematkan ke yang lain.
Menginstal httpd dengan buku pedoman
Sekarang setelah Anda memiliki pengetahuan dasar itu, mari kita lihat buku pedoman dasar yang akan menginstal httpd kemasan. Saya memiliki file inventaris dengan dua host yang ditentukan, dan saya menempatkannya di web grup:
[root@ansible test]# cat inventory
[web]
ansibleclient.usersys.redhat.com
ansibleclient2.usersys.redhat.com
Mari kita lihat buku pedoman yang sebenarnya untuk melihat apa isinya:
[root@ansible test]# cat httpd.yml
---
- name: this playbook will install httpd
hosts: web
tasks:
- name: this is the task to install httpd
yum:
name: httpd
state: latest
Dengan menguraikannya, Anda akan melihat bahwa baris pertama dalam buku pedoman adalah ---
. Ini memberi tahu Anda bahwa ini adalah awal dari buku pedoman. Selanjutnya, saya memberi nama untuk drama itu. Ini hanyalah buku pedoman sederhana dengan hanya satu permainan, tetapi buku pedoman yang lebih kompleks dapat berisi banyak permainan. Selanjutnya saya tentukan host yang ingin saya targetkan. Dalam hal ini, saya memilih web grup, tetapi saya dapat menentukan ansibleclient.usersys.redhat.com atau ansibleclient2.usersys.redhat.com sebagai gantinya jika saya tidak ingin menargetkan kedua sistem. Baris berikutnya memberi tahu Ansible bahwa Anda akan masuk ke tugas yang melakukan pekerjaan sebenarnya. Dalam hal ini, buku pedoman saya hanya memiliki satu tugas, tetapi Anda dapat memiliki banyak tugas jika Anda mau. Di sini saya menentukan bahwa saya akan menginstal httpd kemasan. Baris berikutnya mengatakan bahwa saya akan menggunakan yum modul. Saya kemudian memberi tahu nama paketnya, httpd , dan saya ingin menginstal versi terbaru.
[ Pembaca juga menyukai: Memulai Ansible ]
Ketika saya menjalankan httpd.yml
playbook dua kali, saya mendapatkan ini di terminal:
[root@ansible test]# ansible-playbook httpd.yml
PLAY [this playbook will install httpd] ************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
TASK [this is the task to install httpd] ***********************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]
PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible test]# ansible-playbook httpd.yml
PLAY [this playbook will install httpd] ************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
TASK [this is the task to install httpd] ***********************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2.usersys.redhat.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible test]#
Perhatikan bahwa dalam kedua kasus, saya menerima ok=2 , tetapi pada putaran kedua buku pedoman, tidak ada yang berubah. Versi terbaru httpd sudah terpasang pada saat itu.
Untuk mendapatkan informasi tentang berbagai modul yang dapat Anda gunakan dalam playbook, Anda dapat menggunakan ansible-doc
memerintah. Misalnya:
[root@ansible test]# ansible-doc yum
> YUM (/usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py)
Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support, see the [dnf] module.
* This module is maintained by The Ansible Core Team
* note: This module has a corresponding action plugin.
< output truncated >
Sangat menyenangkan memiliki buku pedoman yang memasang httpd , tetapi untuk membuatnya lebih fleksibel, Anda dapat menggunakan variabel alih-alih mengkodekan paket secara keras sebagai httpd . Untuk melakukannya, Anda dapat menggunakan buku pedoman seperti ini:
[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
hosts: web
vars:
myrpm: httpd
tasks:
- name: this is the task to install {{ myrpm }}
yum:
name: "{{ myrpm }}"
state: latest
Di sini Anda dapat melihat bahwa saya telah menambahkan bagian yang disebut "vars" dan saya mendeklarasikan variabel myrpm dengan nilai httpd . Saya kemudian dapat menggunakan myrpm itu variabel di playbook dan sesuaikan dengan apa pun yang ingin saya instal. Juga, karena saya telah menentukan RPM untuk menginstal dengan menggunakan variabel, saya dapat menimpa apa yang telah saya tulis di buku pedoman dengan menentukan variabel pada baris perintah dengan menggunakan -e
:
[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
hosts: web
vars:
myrpm: httpd
tasks:
- name: this is the task to install {{ myrpm }}
yum:
name: "{{ myrpm }}"
state: latest
[root@ansible test]# ansible-playbook httpd.yml -e "myrpm=at"
PLAY [this playbook will install at] ***************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
TASK [this is the task to install at] **************************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]
PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible test]#
Cara lain untuk membuat tugas lebih dinamis adalah dengan menggunakan loop . Dalam cuplikan ini, Anda dapat melihat bahwa saya telah mendeklarasikan rpm sebagai daftar untuk memiliki mailx dan postfix . Untuk menggunakannya, saya menggunakan loop
dalam tugas saya:
vars:
rpms:
- mailx
- postfix
tasks:
- name: this will install the rpms
yum:
name: "{{ item }}"
state: installed
loop: "{{ rpms }}"
Anda mungkin pernah memperhatikan bahwa saat drama ini diputar, fakta tentang pembawa acara dikumpulkan:
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
Fakta-fakta ini dapat digunakan sebagai variabel saat Anda menjalankan permainan. Misalnya, Anda dapat memiliki motd.yml
file yang menyetel konten seperti:
“This is the system {{ ansible_facts['fqdn'] }}.
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.”
Untuk sistem apa pun tempat Anda menjalankan buku pedoman itu, nama domain yang sepenuhnya memenuhi syarat (FQDN), distribusi sistem operasi, dan versi distribusi akan disetel, bahkan tanpa Anda mendefinisikan variabel tersebut secara manual.
[ Butuh lebih banyak tentang Ansible? Ikuti kursus tinjauan teknis gratis dari Red Hat. Ansible Essentials:Kesederhanaan dalam Tinjauan Teknis Otomasi. ]
Menutup
Ini adalah pengantar singkat tentang tampilan buku pedoman Ansible, apa yang dilakukan bagian-bagian yang berbeda, dan bagaimana Anda bisa mendapatkan lebih banyak informasi tentang modul. Informasi lebih lanjut tersedia dari dokumentasi Ansible.