Saya memiliki buku pedoman yang terlihat seperti ini:
---
- hosts: group1
roles:
- role1
- role2
- hosts: group2
roles:
- role2
- role3
Sekarang katakan saya memiliki file host yang memiliki entri seperti ini:
[group1]
host1.example.com
[group2]
host1.example.com
Ansible akan menjalankan tugas-tugas di role2 DUA KALI untuk host1.example.com karena muncul dalam 2 grup, dan masing-masing memiliki role2 ditugaskan untuk mereka.
Bagaimana saya bisa membuat Ansible menyadari bahwa ia memiliki peran yang sama termasuk dua kali, dan karena itu ia hanya dapat menjalankannya sekali?
Jawaban:
Seperti yang disebutkan, ini adalah desain. Ansible mengeksekusi hanya satu permainan pada satu waktu. Playbook Anda terdiri dari dua play (dua item dalam daftar YAML tingkat root yang ditentukan oleh file playbook). Permainan pertama berlaku role1 dan role2 untuk group1. Drama itu dijalankan pertama kali, dan hanya setelah selesai barulah drama kedua dimulai. Tetapi Ansible tidak berusaha untuk menggabungkan permainan bersama secara logis. Setelah semua, Anda mungkin benar-benar ingin tugas dalam role2 berjalan dua kali
Adapun untuk mengatasi masalah, ada beberapa cara Anda bisa mengatasi hal ini, dan yang Anda pilih akan tergantung pada detail kelompok dan peran.
Jika semua tugas dalam role2 idempoten, yaitu jika mereka dapat dijalankan beberapa kali dan berakhir dengan hasil yang sama setiap kali, maka semua yang Anda benar-benar kehilangan adalah waktu, dan tidak apa-apa untuk membiarkan peran itu diulang. Jika peran membutuhkan waktu sangat lama untuk diterapkan atau jika Anda tidak dapat membuatnya idempoten, maka pertimbangkan ide-ide berikut:
Anda dapat membagi buku pedoman menjadi tiga drama, dan menerapkan peran satu per satu:
Atau jika peran Anda perlu dikelompokkan bersama, Anda dapat membuat grup ketiga untuk server yang membutuhkan ketiga peran tersebut. Anda tidak perlu mengeluarkan mereka dari dua kelompok lainnya. Anda dapat membuat grup di file inventaris Anda seperti ini:
Kemudian di buku pedoman Anda, Anda bisa lagi membagi menjadi tiga drama, tetapi gunakan kelompok ketiga untuk menghindari menjalankan kembali peran:
Itu sangat jelek tetapi mungkin berguna dalam beberapa kasus.
sumber
Ini dengan desain. Satu-satunya cara untuk pergi adalah menerapkan role2 hanya dalam satu buku pedoman untuk satu kelompok tertentu, dan tidak menggunakan peran2 dalam buku pedoman lain pada grup yang mungkin memiliki anggota umum, seperti di sini.
sumber