Playbook yang Mungkin vs Peran

98

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/hostsfile 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.cfglive di Ansible server, bagaimana cara saya menambahkan / mengkonfigurasi Ansible dengan Playbook / Roles yang tersedia? Misalnya, ketika saya berlari ansible-playbook someplaybook.yaml, bagaimana Ansible tahu di mana menemukan playbook itu?
smeeb
sumber
1
Peran adalah cara untuk membuat kode dalam pedoman dapat digunakan kembali dengan menempatkan fungsionalitas tersebut ke dalam "perpustakaan" umum yang kemudian dapat digunakan dalam pedoman apa pun sesuai kebutuhan.
Juan Jimenez
tasksmelakukan sesuatu. playbooksmengatur dan meluncurkan tugas. rolesmengatur sekumpulan tugas, penangan, dll yang menjalankan fungsi tertentu. Beberapa playbookdiperlukan untuk meluncurkan role(s). Apa yang akan Anda sebut sebagai kumpulan rolesdan playbooks? Katakanlah misalnya salah satu yang mengelola konfigurasi semua host di situs Anda?
fbicknel

Jawaban:

111

Playbook vs Role vs [database] dan entri serupa di / etc / ansible / hosts

[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:

  • Playbook. site.yml, webservers.yml, fooservers.ymlYang playbooks.
  • Peran: roles/common/dan roles/webservers/berisi definisi commondan webserversperan yang sesuai.

Di dalam playbook ( webservers.yml) Anda memiliki sesuatu seperti:

---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
  roles: <- this is list of roles to assign to these hosts
     - common
     - webservers

Jika Playbook didefinisikan di dalam file YAML, lalu di mana Peran ditentukan?

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:

  • Jika peran / x / tugas / main.yml ada, tugas yang tercantum di dalamnya akan ditambahkan ke permainan
  • Jika role / x / handlers / main.yml ada, handler yang terdaftar di dalamnya akan ditambahkan ke permainan
  • Jika role / x / vars / main.yml ada, variabel yang terdaftar di dalamnya akan ditambahkan ke permainan
  • Jika peran / x / meta / main.yml ada, setiap dependensi peran yang tercantum di dalamnya akan ditambahkan ke daftar peran (1.3 dan yang lebih baru)
  • Tugas salin apa pun dapat merujuk file dalam peran / x / file / tanpa harus mengarahkannya secara relatif atau mutlak
  • Setiap tugas skrip dapat merujuk skrip dalam peran / x / file / tanpa harus mengarahkannya secara relatif atau mutlak
  • Setiap tugas template dapat mereferensikan file dalam role / x / templates / tanpa harus mengarahkannya secara relatif atau mutlak
  • Semua tugas yang disertakan dapat merujuk file dalam peran / x / tugas / tanpa harus mengarahkannya secara relatif atau mutlak

File yang paling penting adalah roles/x/tasks/main.yml, di sini Anda menentukan tugas, yang akan dijalankan, saat peran dijalankan.

Selain dari ansible.cfg yang ada di server Ansible, bagaimana cara menambahkan / mengkonfigurasi Ansible dengan Playbook / Peran yang tersedia? Misalnya, ketika saya menjalankan buku pedoman someplaybook.yaml, bagaimana Ansible tahu di mana menemukan pedoman itu?

$ ansible-playbook someplaybook.yaml

Akan mencari pedoman di dalam direktori saat ini.

$ ansible-playbook somedir/somedir/someplaybook.yaml

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.

Admin Yaroslav
sumber
Terima kasih @Yaroslav Admin (+1) - satu pertanyaan tindak lanjut singkat: Anda menyatakan bahwa peran ditentukan di dalam direktori , tetapi lalu apa yang sebenarnya mengatur peran tersebut? Dengan kata lain, webservers.ymlpedoman memetakan [webservers]tuan rumah ke peran commondan webservers. Tapi apa sebenarnya yang termasuk dalam commonperan tersebut? Tidak ada cara untuk mendefinisikannya di direktori, jadi apakah biasanya ada file YAML di dalam "direktori peran" itu? Terima kasih lagi!
smeeb
@smeeb Ya, peran Anda benar ditentukan oleh file di dalam direktori itu. Sebagian besar adalah YAML, tetapi juga dapat berisi jenis file lain. Lihat jawaban yang diperbarui untuk lebih jelasnya.
Yaroslav Admin
36

Playbook vs Role vs [database] dan entri serupa di / etc / ansible / hosts

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 postfixdi grup inang mail_serversdan peran mysqldi grup hos databases:

- hosts: mail_servers
  roles:
    - postfix

- hosts: databases
  roles:
    - mysql

Jika Playbook didefinisikan di dalam file YAML, lalu di mana Peran ditentukan?

Dalam Ansible, hampir semua hal ditentukan dalam YAML, yang diperhitungkan untuk peran dan buku pedoman.

Selain dari ansible.cfg yang ada di server Ansible, bagaimana cara menambahkan / mengkonfigurasi Ansible dengan Playbook / Peran yang tersedia? Misalnya, ketika saya menjalankan buku pedoman someplaybook.yaml, bagaimana Ansible tahu di mana menemukan pedoman itu?

AFAIK Anda harus memberikan jalur ke pedoman saat memohon ansible-playbook. Jadi ansible-playbook someplaybook.yamldiharapkan someplaybook.yamlberada di direktori Anda saat ini. Tetapi Anda dapat memberikan jalur lengkap:ansible-playbook /path/to/someplaybook.yaml

udondan
sumber
13

Ini adalah pertanyaan terminologi / semantik. Ini bisa subjektif, meskipun ada definisi dasar.

Pandangan saya adalah sebagai berikut:

Sistem manajemen / penerapan konfigurasi apa pun memiliki:

  1. source data - data yang digunakan untuk membuat konfigurasi host target
  2. target data - data yang digunakan untuk mengidentifikasi host target
  3. config changes- daftar / kumpulan aturan / tindakan yang kita terapkan dengan source datalebih dari host target berdasarkantarget data

Dalam istilah yang mungkin:

  1. source data- adalah berbagai tempat kita dapat meletakkan data - group_vars, playbookvars, rolevars, 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 selama ansible/ ansible-playbookeksekusi
  2. target data - adalah inventaris (Dan, Dimungkinkan juga untuk menentukan variabel inventaris / grup host di dalam inventaris!)
  3. config changes - ansible memiliki 4 level abstraksi untuk itu:
    1. tugas - tindakan tunggal
    2. daftar tugas - daftar tindakan
    3. role - daftar tindakan (atau daftar daftar) yang dikelompokkan berdasarkan 'subjek' yang sama, biasanya semua target beroperasi pada host / hostgroup yang sama
    4. playbook - daftar permainan, masing-masing beroperasi pada kelompok host yang mungkin berbeda, menerapkan beberapa daftar roles / tasks / tugas (dan tugas-tugas khusus seperti handlers)

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 satu playbook. Juga, layak disebut, 1 item YAML di pedoman (termasuk hosts:dan salah satu atau tasks, pre_tasks, post_tasks, roles) disebutplay

Sekarang untuk pertanyaan Anda:

Ya, awalnya membingungkan.

Anda biasanya menghubungkan Anda source datake semantik peran Anda, jadi ketika Anda melihat peran setup_dbitu diterapkan dalam sebuah permainan ke grup host terkait (misalnya db_hosts) Tapi sebuah playdapat 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.

mvk_il
sumber
1

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

- name: Some Action for two roles
  hosts: localhost

  vars_files:
    - roles/dual_role/meta/main.yml

  roles:
    - dual_role/container-1
    - dual_role/container-2

Folder peran dan skema file akan terlihat seperti ini:

dual_role-playbook.yml
  -- roles
     -- dual_role
        -- meta/main.yml
        -- container-1
           -- tasks/main.yml
           -- templates/template.j2
        -- container-2
           -- tasks/main.yml
           -- templates/template.j2
Jose H. Rosa
sumber
1

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 URI rolesfile.ymldan meminta galaksi yang memungkinkan untuk mengunduhnya untuk Anda.

Ini [database]adalah grup host yang ditentukan di file inventaris yang mencantumkan host yang termasuk dalam databasegrup. Anda juga dapat menentukan grup server web dengan menentukan sesuatu seperti

[web]
web1.example.com
web2.example.com

Kelompokkan webatau databasekemudian dapat digunakan dalam pedoman atau peran untuk menentukan tuan rumah yang akan diterapkan.

Grup juga dapat digunakan dalam perintah ansibleuntuk menjalankan perintah ad-hoc.

Ding-Yi Chen
sumber