Saat Anda membuat buku pedoman Ansible untuk proyek yang lebih besar, meletakkan semua tugas dalam satu buku pedoman akan membuat proyek menjadi rumit. Sebagai praktik terbaik, Anda harus mengelompokkan tugas ke dalam playbook terpisah. Ini akan membantu Anda memecah proyek Anda dan mencapai modularitas di Ansible. Jika memungkinkan, Anda dapat merusak playbook, dan menugaskan serta mengimpornya menggunakan arahan "import_*" dan "include_*". Pada artikel ini, kita akan mempelajari cara bekerja dengan menyertakan dan mengimpor pernyataan di Ansible dengan contoh.
Di bagian berikut, saya akan menunjukkan cara mengimpor buku panduan, tugas, dan peran dengan contoh sederhana. Jika Anda memerlukan lab yang memungkinkan untuk berlatih, silakan lihat panduan penyiapan lab yang memungkinkan menggunakan Vagrant dan Virtualbox di tautan di bawah ini.
Pengaturan Lab yang Memungkinkan Otomatis Dengan Vagrant Dan Virtualbox Di Linux
Contents
Includes vs ImportsImporting Ansible PlaybookMenerapkan Direktif Lain dengan import_playbookMengimpor Tugas Playbook yang MungkinMengimpor Ansible Peran PlaybookKesimpulanTermasuk vs Impor
Seperti yang dinyatakan dalam dokumentasi resmi Ansible,
pernyataan penyertaan dan impor sangat mirip, namun mesin pelaksana Ansible memperlakukannya dengan sangat berbeda.
Semua pernyataan impor* diproses sebelumnya pada saat buku pedoman diuraikan. Semua pernyataan penyertaan* adalah diproses seperti yang ditemui selama eksekusi playbook.
Direktif "import_playbook" diperkenalkan dalam versi 2.4 yang memungkinkan dan sebelumnya hanya include_playbook yang tersedia. Posting versi 2.4 hanya direktif import_playbook yang tersedia dan Jika Anda mencoba menggunakan direktif include_playbook di versi yang lebih lama, Anda akan mendapatkan error.
ERROR berikut! 'include_playbook' bukan atribut yang valid untuk PlayImporting Ansible Playbook
Anda dapat membuat beberapa playbook sesuai dengan sifat permainan dan terakhir mengimpornya di bawah satu file YAML dan menjalankan playbook.
Saya membuat tiga playbooks.
Playbook pertama - playbook1.ymlSecond playbook - playbook2.ymlMain playbook - main.yml
Playbook pertama dan kedua berisi definisi permainan berikut.
# playbook1.yml - nama: impor Playbook host: localhost koneksi: lokal collect_facts: Salah tugas: - nama: Impor Tugas memungkinkan.builtin.debug: msg: "Mengimpor playbook1.yml" # playbook2.yml - nama: impor Playbook host: localhost koneksi: lokal collect_facts: Salah tugas: - nama: Impor Tugas 2 memungkinkan.builtin.debug: msg: "Mengimpor playbook2.yml"
Playbook utama digunakan untuk mengimpor playbook1.yml dan playbook2.yml.
- import_playbook: playbook1.yml - import_playbook: playbook2.yml
Menjalankan perintah ansible-playbook terhadap main.yml akan mengimpor playbook1.yml dan playbook2.yml playbook ke dalam namespace saat ini dan menjalankan Tasks.
$ ansible-playbook main.yml MAINKAN [Playbook impor] ********************************************* ************************************* TUGAS [Impor Tugas] ********************************************* ******************************************* oke: [localhost] => { "msg": "Mengimpor playbook1.yml" } MAINKAN [Playbook impor] ********************************************* ************************************* TUGAS [Task Impor 2] ******************************************* ******************************************* oke: [localhost] => { "msg": "Mengimpor playbook2.yml" }Menerapkan Direktif Lain dengan import_playbook
Anda dapat menerapkan direktif lain seperti tag, pernyataan bersyarat, dll., dengan direktif import_playbook. Direktif pada tingkat impor akan diwarisi oleh semua tugas playbook.
Untuk lebih memahaminya, perhatikan contoh di bawah ini. Yang saya lakukan hanyalah menambahkan pernyataan bersyarat ke main.yml file.
- import_playbook: playbook1.yml ketika: run didefinisikan - import_playbook: playbook2.yml kapan: jalankan didefinisikan
Ketika saya menjalankan buku pedoman ini, drama, dan tugas diimpor ke namespace dan diperiksa apakah variabel "jalankan" ditentukan terhadap semua tugas. Karena variabel tidak ditentukan, tugas akan dilewati.
PLAY [Impor Playbook] ********************************** ************************************************* TUGAS [Impor Tugas] ********************************************* ******************************************* melewatkan: [localhost] MAINKAN [Playbook impor] ********************************************* ************************************* TUGAS [Task Impor 2] ******************************************* ******************************************* melewatkan: [localhost]
Saya menjalankan playbook lagi dengan menyetel var=1 di playbook2 saja. Kali ini tugas di bawah playbook2 berjalan dengan baik dan tugas playbook1 dilewati.
PLAY [Impor Playbook] ******************************* **************************************************** ********************** TUGAS [Impor Tugas] ********************************************* **************************************************** ************** melewatkan: [localhost] MAINKAN [Playbook impor] ********************************************* **************************************************** ********* TUGAS [Task Impor 2] ******************************************* **************************************************** ************* oke: [localhost] => { "msg": "Mengimpor playbook2.yml" } MAINKAN REKAP ************************************************ **************************************************** ******************* localhost : ok=1 berubah=0 tidak dapat dijangkau=0 gagal=0 dilewati=1 diselamatkan=0 diabaikan=0Mengimpor Tugas Playbook yang Memungkinkan
Mirip dengan mengimpor playbook, Anda dapat membuat file tugas terpisah dan mengimpornya ke dalam satu file. Meskipun playbook hanya dapat menggunakan direktif impor, tugas dapat menggunakan direktif import dan include.
Pertama, mari kita lihat direktif import_task yang mirip dengan direktif import_playbook. Direktif akan mem-parsing tugas saat playbook diurai.
Saya telah membuat dua file bernama task1.yml dan main.yml. Ini berisi definisi permainan dan tugas berikut.
# task1.yml - nama: importing_tasks memungkinkan.builtin.debug: msg: "Mengimpor tugas dari task1.yml" # main.yml --- - host: localhost koneksi: lokal collect_facts: salah tugas: - import_tasks: task1.yml
Jika Anda melihat output di atas, tugas akan diimpor ke main.yml namespace dan run.
Direktif include_tasks akan diuraikan hanya pada saat eksekusi playbook. Saya menggunakan playbook main.yml dan task1.yml yang sama tetapi dengan sedikit modifikasi.
# main.yml --- - host: localhost koneksi: lokal collect_facts: salah tugas: - sertakan_tugas: tugas1.yml # tugas1.yml - nama: mengimpor tugas menggunakan direktif include memungkinkan.builtin.debug: msg: "Mengimpor tugas dari task1.yml menggunakan direktif sertakan"
Ketika buku pedoman dikirimkan, dua tugas dijalankan, meskipun kami hanya memiliki satu tugas yang ditentukan dalam buku pedoman. Tugas pertama adalah untuk mem-parsing tugas dari task1.yml dan menyertakannya untuk dieksekusi. Tugas kedua menjalankan task.
yang disertakan Mirip dengan directive import_playbook, Anda dapat menerapkan directive lain yang memungkinkan ke import_tasks atau include_tasks directive.
Saya telah membuat file task2.yml dan menggunakan direktif blok untuk mengimpor dan menyertakan task1.yml dan task2. yml.
# task2.yml - nama: mengimpor tugas menggunakan direktif include memungkinkan.builtin.debug: msg: "Mengimpor tugas dari task2.yml menggunakan import directive" # main.yml --- - host: localhost koneksi: lokal collect_facts: salah tugas: - nama: Impor dan sertakan dengan arahan blok memblokir: - sertakan_tugas: tugas1.yml - import_tasks: task2.ymlImporting Ansible Playbook Roles
Roles adalah cara yang bagus untuk mengatur proyek Anda. Kami memiliki artikel mendetail tentang peran yang memungkinkan dan bagaimana arahan impor dan sertakan digunakan sebagai alternatif dari arahan peran. Saya sarankan Anda melihatnya di tautan di bawah ini.
Tutorial Peran yang Memungkinkan Untuk Pemulas
Kesimpulan
Dalam artikel ini kita telah melihat apa itu direktif import_* dan include_* dan bagaimana menggunakannya untuk membagi proyek Anda yang memungkinkan untuk mencapai modularitas.