2015-11-03 11 views
23

Chciałbym użyć faktu systemowego dla hosta razy liczba/procent jako podstawa dla zmiennej. Próbuję konkretnie użyć wartości ansible_memtotal_mb i pomnożyć ją przez .80, aby uzyskać ramsize do użycia przy ustawianiu wartości Couchbase. Próbowałem różnych wariantów poniższej linii. Nie jestem pewien, czy to możliwe, ale każda pomoc byłaby doceniona.Odpowiedź - Czy mogę używać arytmetyki podczas ustawiania wartości zmiennej?

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

Jeżeli starasz się to wykorzystać? Jeśli znajduje się w szablonie, możesz użyć filtrowania Jinja bezpośrednio, aby to zrobić. Niestety, funkcja Ansible poza szablonami obsługuje tylko uproszczoną listę filtrów Jinja i nie sądzę, że mnożenie jest w niej uwzględnione. – ydaetskcoR

+0

Jest to w podręczniku. Nie znajduje się w osobnym szablonie. – AValenti

+0

Tak, ale w jaki sposób zamierzasz używać tej zmiennej? – ydaetskcoR

Odpowiedz

38

Jesteś naprawdę blisko! Używam obliczeń do ustawienia domyślnych rozmiarów pamięci Java, która jest podobna do tej, którą robisz. Oto przykład:

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

To pokazuje kilka rzeczy-po pierwsze, używa jinja math, więc wykonać obliczenia wewnątrz {{ jinja }}. Po drugie, int i abs wykonaj, czego możesz się spodziewać - upewnij się, że wynik jest liczbą całkowitą bez znaku.

W twoim przypadku, prawidłowy kod byłoby:

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

Dzięki za pomoc. Moje końcowe rozwiązanie zakończyło się bardzo podobnie do twojego przykładu. Musiałem uwzględnić 0 przed przecinkiem, w przeciwnym wypadku narzekałoby. Ponadto definicja zmiennej musi być zawarta w podwójnych cudzysłowach. Chciałem wartości całkowitej i nie zaszkodzi upewnić się, że jest to wartość bezwzględna. ramsize: "{{(ansible_memtotal_mb * 0,8) | int | abs}}" – AValenti