Ik wil een systeemfeit gebruiken voor een host maal een getal/percentage als basis voor een variabele. Wat ik specifiek probeer te doen, is de waarde ansible_memtotal_mb
gebruiken en deze met .80 vermenigvuldigen om een ramsize te krijgen om vervolgens te gebruiken bij het instellen van een Couchbase-waarde. Ik heb verschillende varianten van de onderstaande regel geprobeerd. Ik weet niet zeker of het mogelijk is, maar alle hulp wordt op prijs gesteld.
vars:
ramsize: '"{{ ansible_memtotal_mb }}" * .80'
Antwoord 1, autoriteit 100%
Je bent heel dichtbij! Ik gebruik berekeningen om enkele standaard Java-geheugengroottes in te stellen, wat vergelijkbaar is met wat u doet. Hier is een voorbeeld:
{{ (ansible_memtotal_mb*0.8-700)|int|abs }}
Dat laat een aantal dingen zien: ten eerste gebruikt het jinja-wiskunde, doe ook de berekeningen in de {{ jinja }}
. Ten tweede doen int
en abs
wat je zou verwachten: ervoor zorgen dat het resultaat een geheel getal zonder teken is.
In jouw geval zou de juiste code zijn:
vars:
ramsize: "{{ ansible_memtotal_mb * 0.8 }}"
Antwoord 2, autoriteit 5%
Een klein ding om toe te voegen.
Als je aanneemt dat de wiskundige vermenigvuldiging voorrang heeft vóór het jinja-filter (| teken), heb je het mis 😉
Met waarden zoals
total_rate: 150
host_ratio: 14 # procentueel
"{{ total_rate*host_ratio*0.01|int }}" => 0 because 0.01|int = 0
"{{ (total_rate*host_ratio*0.01)|int) }}" => 21 as one expects