Czy można zmienić domyślną wartość zmiennej roli zgodnie z pewnym warunkiem (tj. Wartością innej zmiennej)?
Detale
Mam dwie powiązane zmienne dla polecenia env
i composer_opts
.
Jeśli oba są pozostawione domyślnie ( env = "prod"
i composer_opts = "--no-dev"
) wszystko jest w porządku.
Jeśli zmienię env
na dev
, ustawienie domyślne dla drugiego zepsuje moje polecenie, więc zawsze muszę ustawić oba. Czy można tego uniknąć, ustawiając domyślną wartość warunkową za pomocą skryptu niestandardowego / if?
Ważne: nie chcę zawsze ustawiać composer_opts
wartości zgodnie z env
wartością. Chcę to ustawić tylko wtedy, gdy nie jest jeszcze ustawione (tj. Dynamiczna wartość domyślna).
Pseudo kod
Chciałbym zrobić coś takiego (poniższy kod jest nieprawidłowy, wystarczy pseudokod, aby wyrazić moją potrzebę)
---
# defaults/main.yml
env: prod
composer_opts:
when: "{{env}}" = 'prod'
'--no-dev --optimize-autoloader --no-interaction'
when: "{{env}}" = 'dev'
''
composer_opts
na pusty ciąg znaków, gdyenv
jest „dev”, zastępując wszelkie ustawione wartości rzeczywiste. Myślę, że warunkowy powinien zostać rozszerzony tak:when: "{{env}}" == 'dev' and "{{composer_opts}}" is undefined
. Czy to dobrze wygląda? Czy potrafisz odpowiednio udoskonalić swoje pytanie?Podczas gdy odpowiedź @ Navern działa, znalazłem osadzoną notację Jinja2 (
"{% if env == 'prod' %} ...
), która jest bardzo podatna na notację, a zatem raczej delikatna. Na przykład podczas owijania danego wiersza dla lepszej czytelności, na przykład w tym nietestowanym kodzie :Skończyło się na nieoczekiwanych wynikach, takich jak dodatkowe białe znaki lub
\n
incomposer_opts
.Podejście, które stosuję jest znacznie głupsze, ale także bardziej stabilne:
Uznałem również, że ten post na blogu jest przydatny i zasadniczo opiera się na tym samym podejściu.
źródło
|
zamiast tego,>
możesz nie mieć problemu z białymi znakami . (lub dostaniesz więcej LOL)Ansible set_fact na podstawie warunku w jednym wkładce:
źródło