Skenario: file konfigurasi saya ditentukan oleh .erb
file yang menyertakan cuplikan di bawah ini.
<% backupclients.each do |backup_files| -%>
Job {
Name = "Server"
JobDefs = "DefaultJob"
Client = <%= backup_files %>-fd
Pool = TeraMonth
Write Bootstrap = "/var/lib/bacula/<%= backup_files %>.bsr"
}
<% end -%>
File konfigurasi server memerlukan entri berulang untuk setiap host klien. Jika saya membuat array sederhana, ini akan berhasil tanpa masalah. Namun yang ingin saya lakukan adalah meminta setiap host mendaftar sendiri dan kemudian mengumpulkan data menggunakan <<| |>>
pragma yang mirip dengan apa yang akan dilakukan seseorang dengan nagios_*
tipenya.
Contoh standar untuk ini melibatkan mengekspor tipe.
class ssh {
@@sshkey { $hostname: type => dsa, key => $sshdsakey }
Sshkey <<| |>>
}
Namun, saya tidak tahu bagaimana cara menulis jenis atau referensi dengan cara yang memungkinkan saya untuk membaca array nilai dari .erb
template. Apakah ada cara saya bisa menggunakan sumber daya yang diekspor dalam kombinasi dengan loop variabel dalam .erb
file?
Jawaban:
Jadi, untuk menjawab pertanyaan Anda secara langsung, saya tidak percaya mendapatkan daftar sumber daya yang diekspor langsung dari erb adalah mungkin. Ini karena sifat sumber daya yang diekspor. Bagi Puppet, mereka hanyalah lebih banyak sumber daya yang perlu dibuat di host.
Tapi, ada cara untuk mencapai apa yang ingin Anda lakukan. Saya melakukannya di beberapa tempat di lingkungan saya.
Di sini kita membuat direktori file, satu untuk setiap host yang ingin kita panji sebagai "bacula_client". Kami menggunakan opsi
purge
,,force
danrecurse
untuk menghapus file yang tidak dikelola oleh Wayang (yaitu jika Anda ingin menghapus sistem dari "daftar" ini).Selanjutnya, kami menggunakan beberapa kode Ruby di .erb untuk memindai direktori ini untuk mencari file, dan menindaklanjutinya:
sumber
ls /path/to/flag/files|while read hostname; do ssh $hostname ..; done
.Yah, pertama saya menyerah dan mengatur
@@
jenis file saya yang sebenarnya. Sisi baiknya adalah ini masih menggunakan variabel pada host klien.Ini memungkinkan saya menggunakan entri dalam file erb seperti:
dan deklarasi di file site.pp saya seperti:
class { bacula-client: database => "true" }
Untuk menangani direktori itu sendiri:
Bersihkan dan rekursi membersihkan apa pun yang tidak ditentukan. Ketika saya mengambil host offline,
puppetstoredconfigclean $hostname
akan membersihkan fakta dan menjalankan wayang pada sutradara akan mengatur ulang konfigurasi dengan tepat.Akhirnya, perangkat lunak direktur Bacula sendiri memungkinkan saya melakukan hal berikut di akhir file bacula-dir.conf saya:
Jadi, tampaknya tidak ada cara langsung untuk menggunakan templat ERB pada kumpulan sumber daya yang terkumpul, tetapi orang dapat mengumpulkan suatu jenis. Itu bisa mencakup tipe Augeas untuk memasukkan semuanya ke dalam satu file, atau retasan mengumpulkan file ke dalam konfigurasi. Itu belum termasuk apa yang saya cari pada pertanyaan itu.
sumber
Saya telah menemukan metode menggunakan layanan PuppetDB yang bekerja cukup baik untuk situasi ini, meskipun agak sedikit meretas. Untuk menggunakan ini, Anda harus memiliki PuppetDB operasional (yang seharusnya sudah Anda miliki saat Anda menggunakan sumber daya yang diekspor) dan PuppetDB API harus dapat quierable dari puppetmaster (localhost).
Kemudian, Anda akan ingin mengekspor semua sumber daya yang ingin Anda kumpulkan ke dalam array Anda di direktori khusus pada sistem file. Jalur direktori ini akan digunakan untuk mengidentifikasi secara unik sumber daya target.
Kemudian, di templat Anda, lakukan sesuatu seperti ini:
Dimana nodename adalah FQDN server, pathRegex adalah jalur pencarian yang disebutkan di atas, diformat sebagai Ruby Regex, dan retVal adalah array yang lengkap. Ini memanfaatkan bahwa templat diproses pada puppetmaster sehingga kredensial API khusus tidak diperlukan. Ini juga mengasumsikan resource namevar adalah jalur yang sepenuhnya memenuhi syarat dari file target, jika Anda memiliki namevars yang kompleks dan menggunakan atribut path, logika yang lebih kompleks akan diperlukan. Juga perhatikan ini mengembalikan semua sumber daya, baik yang diekspor maupun lokal. Data yang dikembalikan memiliki banyak atribut yang dapat digunakan untuk logika yang lebih kompleks jika diperlukan.
Agak hacky, tetapi bekerja dengan baik.
sumber