2014-11-05 7 views
6

Chciałbym uruchomić określone zadanie tylko wtedy, gdy flaga jest podana w linii poleceń. Na przykład chciałbym uruchomić polecenie ansibli-playbook z następującymi: --extra-vars "composer-install=true". W pewnym sensie potrzebuję zadania, które sprawdza, czy zmienna composer-install jest ustawiona, a jeśli jest ustawiona i równa true, uruchom dane zadanie, które działa composer install. Nie jestem do końca pewien, jak to zrobić w ostatniej części.Jak dodać opcjonalne zmienne w linii poleceń ansible i sprawdzić ich istnienie w książce adresowej?

Odpowiedz

8

Przyczyną błędu jest dostęp do zmiennej, która nigdy nie została ustawiona. Wydaje się, że używasz istnienia extra-var jako wskazania, że ​​chcesz, aby instalator działał poprawnie (tzn. Nigdy nie przechodzisz --extra-vars = "composer-install = false"), więc możesz przejść z is defined :

- shell: composer install 
    when: composer-install is defined 

Ale zmienne mogą być przekazywane przez filtry, które mogą być przydatne w tym przypadku, ponieważ wciąż pozwala na przepuszczanie prawda/fałsz, gdy nie definiując zmienną w ogóle jeszcze działa:

- shell: composer install 
    when: composer-install|default(false) 

Więcej informacji na temat warunków można znaleźć tutaj: http://docs.ansible.com/playbooks_conditionals.html

Filtry jinja2 są bardzo przydatna dla więcej niż jednego powodu, więc bardziej na tych tutaj: http://docs.ansible.com/playbooks_variables.html#jinja2-filters

i wreszcie pełna lista wbudowane filtry jinja2 tutaj: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters

+0

Dziękuję za odpowiedź informacyjną, nawet po wybraniu innego rozwiązania jako odpowiedzi! –

+0

Właściwie, skoro już tu jestem, czy mogę zapytać, jak właściwie używać filtrów jinja2, aby przekonwertować ciąg na liczbę całkowitą i wykonać mnożenie? Na przykład mam szablon, w którym chcę ustawić zmienną na 'ansible_fact * 2', a ansible_fact również jest ciągiem znaków. Nie mogłem go znaleźć w dokumentacji. –

+1

Jest filtr "int", który wydaje się działać (musiał przetestować go sam): - debug: msg = {{'2' | int * 2}} –

1

Myślę, że szukasz when parameter.

- name: optional composer install 
    shell: composer install 
    when: composer-install 
+0

Dzięki, to ma mnie w dobrym kierunku. Samo zrobienie tego, co zrobiłeś, powoduje błąd. Rozwiązaniem było również dodanie sekcji "vars:" do playbooka i dodanie zmiennej 'composer-install', ustawienie jej na" false ". Podobno zmienne wiersza polecenia zastępują zmienne ustawione w książeczce. Twoje zdrowie. –