Apakah mungkin untuk mengubah nilai default variabel peran sesuai dengan beberapa kondisi (yaitu nilai variabel lain)?
Detail
Saya memiliki dua variabel terkait untuk suatu perintah, env
dan composer_opts
.
Jika keduanya dibiarkan secara default ( env = "prod"
dan composer_opts = "--no-dev"
) semuanya ok.
Jika saya mengubah env
ke dev
, default untuk yang lain akan melanggar perintah saya, jadi saya selalu perlu mengatur keduanya. Apakah mungkin untuk menghindari ini dengan menetapkan nilai standar bersyarat dengan skrip khusus / jika?
Penting: Saya tidak ingin selalu menetapkan composer_opts
nilai sesuai dengan env
nilainya. Saya ingin mengaturnya hanya jika belum disetel (yaitu nilai default dinamis).
Kodesemu
Saya ingin melakukan sesuatu seperti ini (kode berikut ini tidak valid, hanya pseudocode untuk mengekspresikan kebutuhan saya)
---
# defaults/main.yml
env: prod
composer_opts:
when: "{{env}}" = 'prod'
'--no-dev --optimize-autoloader --no-interaction'
when: "{{env}}" = 'dev'
''
composer_opts
ke string kosong ketikaenv
"dev", menimpa nilai yang ditetapkan. Saya pikir bersyarat harus diperpanjang seperti ini:when: "{{env}}" == 'dev' and "{{composer_opts}}" is undefined
. Apakah terlihat bagus? Bisakah Anda udpate pertanyaan Anda sesuai?Sementara jawaban @ Navern berhasil, saya menemukan notasi Jinja2 tertanam (
"{% if env == 'prod' %} ...
) sangat rentan terhadap notasi dan karenanya agak rapuh. Misalnya, ketika membungkus baris yang dimaksud untuk keterbacaan yang lebih baik seperti dalam kode yang tidak diuji ini :Saya berakhir dengan hasil yang tidak terduga, seperti spasi tambahan atau
\n
dalamcomposer_opts
.Pendekatan yang saya gunakan jauh lebih bodoh, tetapi juga lebih stabil:
Saya juga menemukan posting blog ini bermanfaat yang pada dasarnya mengikuti pendekatan yang sama.
sumber
|
alih-alih,>
Anda mungkin tidak memiliki masalah spasi putih. (atau Anda akan mendapatkan lebih banyak dari itu LOL)Set_fact yang dimungkinkan berdasarkan kondisi dalam satu liner:
sumber