Hoe gebruik je rekenkunde bij het instellen van een variabelewaarde in Ansible?

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_mbgebruiken 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 inten abswat 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

Other episodes