Saya menggunakan buku pedoman yang memungkinkan untuk mengkonfigurasi Apache untuk daftar situs. Playbook harus menyalin template konfigurasi host virtual untuk setiap situs ke tempatnya, dan kemudian mengaktifkan setiap situs menggunakan a2ensite
:
- name: Install apache site conf
template: src=apache-sites-{{item}}-conf.j2 dest=/etc/apache2/sites-available/{{item}}.conf mode=0644
with_items:
- sitea
- siteb
- sitec
- sited
- name: Enable site apache conf
command: a2ensite {{item}}
args:
creates: /etc/apache2/sites-enabled/{{item}}.conf
with_items:
- sitea
- siteb
- sitec
- sited
Saya tidak suka harus mengulang daftar yang sama untuk setiap tugas. Bagaimana cara mengonfigurasi playbook untuk menjalankan kedua tugas dengan daftar item yang sama?
loop
diblock
blok. Itu tampaknya diminta, tetapi ditolak melalui masalah GH yang mungkin 13262 .:-(
Saya menemukan solusi menggunakan gumpalan file. Karena saya memiliki file konfigurasi untuk setiap situs, saya cukup menggunakan daftar file-file itu untuk beralih ke semuanya. Dengan begitu saya tidak memiliki daftar situs di file tugas saya sekali pun, apalagi dua kali. Yang perlu saya lakukan untuk menambahkan situs adalah menambahkan file.
Untuk mempermudah, saya membuat direktori untuk templat:
roles/webserver/templates/apache-sites/sitea.conf.j2
roles/webserver/templates/apache-sites/siteb.conf.j2
roles/webserver/templates/apache-sites/sitec.conf.j2
roles/webserver/templates/apache-sites/sited.conf.j2
Kemudian di
roles/webserver/tasks/main.yml
saya dapat menggunakan daftar file dan beberapa ekspresi reguler:Teknik ini bahkan dapat digunakan dengan file dummy kosong untuk membuat daftar untuk aplikasi lain.
sumber
Konstantin memberikan jawaban yang bagus; di sini ada rasa tambahan di atasnya.
Saya biasanya akan mendefinisikan daftar sebagai variabel, dan hanya menulis dua loop terpisah atas variabel yang sama:
Ini bekerja dengan baik dengan prioritas variabel , misalnya dengan mendefinisikan set server yang berbeda per lingkungan. Ini juga berfungsi ketika Anda perlu melakukan berbagai tugas non-looped di antara dua loop.
sumber