2015-11-03 7 views
23

Vorrei utilizzare un fatto di sistema per un host per un numero/percentuale come base per una variabile. Quello che sto cercando di fare in particolare è usare il valore ansible_memtotal_mb e moltiplicarlo per 0,8 per ottenere un ramsize da usare poi nell'impostazione di un valore di Couchbase. Ho provato diverse varianti della linea di seguito. Non sono mai sicuro che sia possibile, ma ogni aiuto sarebbe apprezzato.Ansible - Posso usare l'aritmetica quando si imposta un valore variabile?

vars: 
    ramsize: '"{{ ansible_memtotal_mb }}" * .80' 
+1

Dove stai cercando di utilizzare questo? Se è all'interno di un modello, puoi usare il filtro Jinja direttamente per farlo lì. Sfortunatamente Ansible al di fuori dei template supporta solo un elenco ristretto dei filtri Jinja e non penso che la moltiplicazione sia trattata in questo. – ydaetskcoR

+0

È proprio nel playbook. Non è in un modello separato. – AValenti

+0

Sì, ma come si intende utilizzare la variabile? – ydaetskcoR

risposta

38

Sei davvero vicino! Io uso i calcoli per impostare alcune dimensioni di memoria java predefinite, che è simile a quello che stai facendo. Ecco un esempio:

{{ (ansible_memtotal_mb*0.8-700)|int|abs }} 

che mostra un paio di cose- prima, che sta utilizzando jinja math, in modo da fare i calcoli all'interno del {{ jinja }}. Secondo, int e abs fai ciò che ti aspetti, assicurati che il risultato sia un numero intero senza segno.

Nel tuo caso, il codice corretto sarebbe:

vars: 
    ramsize: "{{ ansible_memtotal_mb * 0.8 }}" 
+2

Grazie per l'aiuto. La mia soluzione finale è risultata molto simile al tuo esempio. Dovevo includere lo 0 prima del decimale altrimenti si lamentava. Inoltre, la definizione della variabile doveva essere inclusa tra virgolette. Volevo un valore intero e non fa male per assicurarsi che sia un valore assoluto. ramsize: "{{(ansible_memtotal_mb * 0.8) | int | abs}}" – AValenti