Menurut dokumen Ansible, Playbook adalah:
... dasar untuk manajemen konfigurasi yang sangat sederhana dan sistem penyebaran multi-mesin, tidak seperti yang sudah ada, dan yang sangat cocok untuk menerapkan aplikasi yang kompleks.
Dan, sekali lagi, menurut dokumen yang sama, Peran adalah:
... cara memuat vars_files, tugas, dan penangan tertentu secara otomatis berdasarkan struktur file yang dikenal. Mengelompokkan konten berdasarkan peran juga memungkinkan berbagi peran dengan pengguna lain dengan mudah.
Namun perbedaan antara ini dan kasus penggunaan yang berbeda tidak langsung jelas bagi saya. Misalnya, jika saya mengonfigurasi /etc/ansible/hosts
file saya agar terlihat seperti:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
... lalu apa [databases]
entri " " ini ... peran ? Atau nama file YAML playbook di suatu tempat? Atau sesuatu yang lain?!?
Jika seseorang dapat menjelaskan kepada saya perbedaannya, pemahaman saya tentang Ansible akan sangat meningkat!
- Playbook vs Peran vs
[databases]
dan entri serupa di/etc/ansible/hosts
- Jika Playbook didefinisikan di dalam file YAML, lalu di mana Peran ditentukan?
- Selain dari
ansible.cfg
live di Ansible server, bagaimana cara saya menambahkan / mengkonfigurasi Ansible dengan Playbook / Roles yang tersedia? Misalnya, ketika saya berlariansible-playbook someplaybook.yaml
, bagaimana Ansible tahu di mana menemukan playbook itu?
sumber
tasks
melakukan sesuatu.playbooks
mengatur dan meluncurkan tugas.roles
mengatur sekumpulan tugas, penangan, dll yang menjalankan fungsi tertentu. Beberapaplaybook
diperlukan untuk meluncurkanrole
(s). Apa yang akan Anda sebut sebagai kumpulanroles
danplaybooks
? Katakanlah misalnya salah satu yang mengelola konfigurasi semua host di situs Anda?Jawaban:
[databases]
adalah satu nama untuk sekelompok host. Ini memungkinkan Anda untuk mereferensikan beberapa host dengan satu nama.Peran adalah sekumpulan tugas dan file tambahan untuk mengonfigurasi host agar berfungsi untuk peran tertentu .
Playbook adalah pemetaan antara pembawa acara dan peran.
Contoh dari dokumentasi menjelaskan contoh proyek. Ini berisi dua hal:
site.yml
,webservers.yml
,fooservers.yml
Yang playbooks.roles/common/
danroles/webservers/
berisi definisicommon
danwebservers
peran yang sesuai.Di dalam playbook (
webservers.yml
) Anda memiliki sesuatu seperti:Mereka didefinisikan di dalam
roles/*
direktori. Peran sebagian besar ditentukan menggunakan file YAML, tetapi juga dapat berisi sumber daya jenis apa pun (files/
,templates/
). Menurut definisi peran dokumentasi disusun seperti ini:File yang paling penting adalah
roles/x/tasks/main.yml
, di sini Anda menentukan tugas, yang akan dijalankan, saat peran dijalankan.Akan mencari pedoman di dalam direktori saat ini.
Akan mencari pedoman di dalam
somedir/somedir/
direktori.Tanggung jawab Anda adalah meletakkan proyek Anda dengan semua pedoman dan peran di server. Ansible tidak ada hubungannya dengan itu.
sumber
webservers.yml
pedoman memetakan[webservers]
tuan rumah ke perancommon
danwebservers
. Tapi apa sebenarnya yang termasuk dalamcommon
peran tersebut? Tidak ada cara untuk mendefinisikannya di direktori, jadi apakah biasanya ada file YAML di dalam "direktori peran" itu? Terima kasih lagi!Peran adalah cara untuk mengelompokkan tugas menjadi satu wadah. Anda dapat memiliki peran untuk menyiapkan MySQL, peran lain untuk menyiapkan Postfix, dll.
Sebuah pedoman mendefinisikan apa yang terjadi di mana . Ini adalah tempat Anda menentukan host (grup host, lihat di bawah) dan peran yang akan diterapkan ke host tersebut.
[databases]
dan entri lainnya dalam inventaris Anda adalah grup host. Hostgroups menentukan satu set host tempat permainan akan dijalankan.Drama adalah serangkaian tugas atau peran (atau keduanya) di dalam buku pedoman. Dalam kebanyakan kasus (dan contoh), sebuah pedoman hanya akan berisi satu permainan. Tetapi Anda dapat memiliki sebanyak yang Anda suka. Itu berarti Anda bisa memiliki pedoman yang akan menjalankan peran
postfix
di grup inangmail_servers
dan peranmysql
di grup hosdatabases
:Dalam Ansible, hampir semua hal ditentukan dalam YAML, yang diperhitungkan untuk peran dan buku pedoman.
AFAIK Anda harus memberikan jalur ke pedoman saat memohon
ansible-playbook
. Jadiansible-playbook someplaybook.yaml
diharapkansomeplaybook.yaml
berada di direktori Anda saat ini. Tetapi Anda dapat memberikan jalur lengkap:ansible-playbook /path/to/someplaybook.yaml
sumber
Ini adalah pertanyaan terminologi / semantik. Ini bisa subjektif, meskipun ada definisi dasar.
Pandangan saya adalah sebagai berikut:
Sistem manajemen / penerapan konfigurasi apa pun memiliki:
source data
- data yang digunakan untuk membuat konfigurasi host targettarget data
- data yang digunakan untuk mengidentifikasi host targetconfig changes
- daftar / kumpulan aturan / tindakan yang kita terapkan dengansource data
lebih dari host target berdasarkantarget data
Dalam istilah yang mungkin:
source data
- adalah berbagai tempat kita dapat meletakkan data -group_vars
,playbook
vars,role
vars, dll., Tempat-tempat ini mempengaruhi prioritas (jika variabel bernama sama didefinisikan ulang di lokasi berbeda, ada aturan yang sangat spesifik tentang apa yang akan menjadi nilai variabel selamaansible
/ansible-playbook
eksekusitarget data
- adalah inventaris (Dan, Dimungkinkan juga untuk menentukan variabel inventaris / grup host di dalam inventaris!)config changes
- ansible memiliki 4 level abstraksi untuk itu:role
s /task
s / tugas (dan tugas-tugas khusus sepertihandlers
)Dari aspek 'perangkat lunak' - peran harus cukup umum untuk digunakan kembali .
Juga di beberapa organisasi (agak besar), 'peran' dikirimkan oleh grup A, sementara digunakan dalam buku pedoman yang dikelola oleh grup B.
ringkasan
Semua hal di atas memungkinkan pengelompokan konfigurasi serupa - menjadi a
role
. mengelompokkan subsistem / komponen terkait menjadi satuplaybook
. Juga, layak disebut, 1 item YAML di pedoman (termasukhosts:
dan salah satu atautasks
,pre_tasks
,post_tasks
,roles
) disebutplay
Sekarang untuk pertanyaan Anda:
Ya, awalnya membingungkan.
Anda biasanya menghubungkan Anda
source data
ke semantik peran Anda, jadi ketika Anda melihat peransetup_db
itu diterapkan dalam sebuah permainan ke grup host terkait (misalnyadb_hosts
) Tapi sebuahplay
dapat dijalankan melalui gabungan dari beberapa grup host. Ini hanya masalah konvensi vs fleksibilitas.PS
Harap balas saya apakah ini menambah kebingungan, atau memperjelas. Terima kasih.
sumber
Juga perlu diingat bahwa pedoman dapat memanggil lebih dari satu peran jika file meta yang digunakan dimaksudkan untuk mempengaruhi peran yang berbeda.
Contoh Playbook: dual_role-playbook.yml
Folder peran dan skema file akan terlihat seperti ini:
sumber
Sederhananya:
Playbook seperti program utama, isinya instruksi lengkap untuk menyelesaikan pekerjaan. Namun, untuk proyek besar, tidak diinginkan untuk benar-benar memasukkan setiap detail ke dalamnya. Jadi, Anda membutuhkan peran.
Peran adalah subrutin dan biasanya mencapai satu tujuan, misalnya menyiapkan server database. Anda dapat meletakkannya di
roles/
direktori, atau mengunduh peran pihak ketiga dengan menyediakan URIrolesfile.yml
dan meminta galaksi yang memungkinkan untuk mengunduhnya untuk Anda.Ini
[database]
adalah grup host yang ditentukan di file inventaris yang mencantumkan host yang termasuk dalamdatabase
grup. Anda juga dapat menentukan grup server web dengan menentukan sesuatu sepertiKelompokkan
web
ataudatabase
kemudian dapat digunakan dalam pedoman atau peran untuk menentukan tuan rumah yang akan diterapkan.Grup juga dapat digunakan dalam perintah
ansible
untuk menjalankan perintah ad-hoc.sumber