2014-11-05 15 views
6

Vorrei eseguire una determinata attività solo se nella riga di comando è presente un flag. Ad esempio, vorrei eseguire il comando ansible-playbook con il seguente: --extra-vars "composer-install=true". In qualche modo avrei bisogno di un'attività che controlli se è impostata la variabile composer-install e se impostata e uguale a true, eseguire l'attività specificata che esegue composer install. Non sono abbastanza sicuro di come fare quell'ultima parte.Come aggiungere variabili opzionali nella riga di comando ansible e verificare la loro esistenza nel playbook?

risposta

8

Il motivo per cui si verifica un errore è perché si sta accedendo a una variabile che non è mai stata impostata. Sembra che tu stia usando l'esistenza di extra-var come un'indicazione che vuoi che l'installazione di Composer venga eseguita (cioè non passi mai --extra-vars = "compositore-installazione = falso"), quindi potresti andare con is defined :

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

Ma le variabili possono essere passati attraverso i filtri, che può essere utile per questo caso, perché permette ancora di passare true/false pur non definendo la variabile del tutto funziona ancora:

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

Altri servizi di assistenza sono disponibili qui: http://docs.ansible.com/playbooks_conditionals.html

I filtri Jinja2 sono molto utile per più di una ragione, quindi più su quelli qui: http://docs.ansible.com/playbooks_variables.html#jinja2-filters

E infine la lista completa di built-in filtri Jinja2 qui: http://jinja.pocoo.org/docs/dev/templates/#builtin-filters

+0

Grazie per la risposta informativa, anche dopo aver selezionato un'altra soluzione come risposta! –

+0

In realtà, mentre sono qui, posso chiedere come usare correttamente i filtri jinja2 per convertire da stringa a intero e fare moltiplicazione? Ad esempio, ho un modello in cui voglio impostare una variabile su 'ansible_fact * 2', e ansible_fact è anche una stringa. Non riuscivo a trovarlo nella documentazione. –

+1

C'è il filtro "int", e sembra funzionare (ho dovuto testarlo da solo): - debug: msg = {{'2' | int * 2}} –

1

Penso che stiate cercando il when parameter.

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

Grazie, questo mi ha fatto nella giusta direzione. Solo facendo ciò che hai fatto si è verificato un errore. La soluzione era anche aggiungere una sezione "vars:" al playbook e aggiungere la variabile 'composer-install', impostandola su" false ". Apparentemente le variabili della riga di comando sovrascrivono le variabili impostate nel playbook. Saluti. –

Problemi correlati