2015-11-03 2 views
23

Я хотел бы использовать системный факт для времени хоста число/процент в качестве базы для переменной. То, что я пытаюсь сделать конкретно, это использовать значение ansible_memtotal_mb и умножить его на .80, чтобы получить ramsize, чтобы использовать его при настройке значения Couchbase. Я пробовал разные варианты строки ниже. Я не уверен, что это возможно, но любая помощь будет оценена по достоинству.Ansible - Могу ли я использовать арифметику при установке значения переменной?

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

Где вы пытаетесь использовать это? Если он находится внутри шаблона, вы можете напрямую использовать фильтрацию Jinja, чтобы сделать это. К сожалению, Ansible вне шаблонов поддерживает только урезанный список фильтров Jinja, и я не думаю, что в этом будет учитываться умножение. – ydaetskcoR

+0

Это прямо в учебнике. Это не в отдельном шаблоне. – AValenti

+0

Да, но как вы собираетесь использовать переменную? – ydaetskcoR

ответ

38

Вы действительно близко! Я использую вычисления, чтобы установить некоторые размеры памяти java по умолчанию, которые похожи на то, что вы делаете. Вот пример:

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

Это показывает несколько вещей: во-первых, он использует jinja math, так что расчеты внутри {{ jinja }}. Во-вторых, int и abs выполняйте то, что вы ожидаете, убедитесь, что результатом является целое число без знака.

В вашем случае, правильный код будет:

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

Спасибо за помощь. Мое окончательное решение оказалось очень похоже на ваш пример. Я должен был включить 0 перед десятичной точкой, иначе он пожаловался. Кроме того, определение переменной необходимо было включить в двойные кавычки. Я хотел бы получить целочисленное значение, и это не мешает убедиться, что это абсолютное значение. ramsize: "{{ansible_memtotal_mb * 0.8) | int | abs}}" – AValenti

Смежные вопросы