Kasus penggunaan saya adalah sebagai berikut:
Saya memiliki file template, dan saya ingin membuat 2 file berbeda dari template itu, dengan variabel diisi oleh variabel yang berbeda untuk setiap file.
Sebagai contoh, katakanlah saya ingin membuat template file yang berisi baris:
mkdir -p {{myTemplateVariable}}
Saya ingin mencari cara yang tepat untuk mengisi variabel ini dengan "File1" dan "File2". Sesuatu seperti :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
di mana saya dapat menentukan untuk template pertama bahwa variabel yang digunakan adalah a = "File1" dan untuk yang kedua, b = "File2".
ansible
ansible-template
Kestemont Max
sumber
sumber
Jawaban:
Untuk Ansible 2.x:
Untuk Ansible 1.x:
Sayangnya
template
modul tersebut tidak mendukung penerusan variabel ke dalamnya, yang dapat digunakan di dalam template. Ada permintaan fitur tapi ditolak.Saya dapat memikirkan dua solusi:
1. Sertakan
The
include
mendukung pernyataan lewat variabel. Jadi Anda bisa memilikitemplate
tugas Anda di dalam file tambahan dan memasukkannya dua kali dengan parameter yang sesuai:my_include.yml:
main.yml:
2. Definisikan ulang myTemplateVariable
Cara lain adalah dengan mendefinisikan ulang myTemplateVariable tepat sebelum setiap
template
tugas.sumber
Dengan Ansible 2.x Anda dapat menggunakan
vars:
tugas-tugas.Template
test.j2
:Playbook:
Ini akan meneruskan
myTemplateVariable
nilai yang berbeda ke test.j2.sumber
Anda dapat melakukan ini dengan sangat mudah, lihat resep Supervisor saya:
job.conf.j2:
Keluaran:
Nikmati!
sumber
Ini adalah solusi / retasan yang saya gunakan:
tugas / main.yml:
vars / main.yml
templates / test.j2:
Setelah menjalankan ini, Anda masuk
this is var_a
/ tmp / templateA danthis is var_b
di / tmp / templateB.Pada dasarnya Anda menyalahgunakan
with_items
untuk membuat template dengan setiap item dalam daftar satu item. Ini berfungsi karena Anda dapat mengontrol apa daftar tersebut saat menggunakanwith_items
.Kelemahannya adalah Anda harus menggunakan
item
nama variabel di template Anda.Jika Anda ingin meneruskan lebih dari satu variabel dengan cara ini, Anda dapat memilih sebagai item daftar Anda seperti ini:
dan kemudian lihat mereka di template Anda seperti ini:
sumber
with_items: '{{ var_a }}'
Saya melakukannya dengan cara ini.
Dalam tugas / main.yml
dan di vars / main.yml
dan di templates / myTemplateFile.j2
Semoga ini menyelesaikan masalah Anda.
sumber
with_dict
adalah solusi yang lebih baik.PENTING: Perhatikan bahwa item tidak harus hanya berupa string, item dapat berupa objek dengan properti sebanyak yang Anda suka, sehingga Anda dapat meneruskan sejumlah variabel.
Dalam template saya punya:
sumber
Saya memiliki masalah serupa untuk dipecahkan, berikut adalah solusi sederhana tentang cara meneruskan variabel ke file template, triknya adalah menulis file template dengan memanfaatkan variabel. Anda perlu membuat kamus (daftar juga dimungkinkan), yang menampung kumpulan variabel yang sesuai dengan setiap file. Kemudian di dalam file template mengaksesnya.
Lihat di bawah:
pedoman
sumber
Contoh dunia nyata lainnya menggunakan daftar
ekstrak untuk template untuk php.ini
Ini adalah var
Lalu saya menyebarkan dengan ini
sumber