我想使用系统事实为主机乘以数字/百分比作为变量的基础。我特别想做的是使用ansible_memtotal_mb值并将其乘以.80以获得ramsize然后用于设置Couchbase值。我一直在尝试下面这行的不同变化。我不确定这是可能的,但任何帮助都会受到赞赏。
vars:
ramsize: '"{{ ansible_memtotal_mb }}" * .80'
答案 0 :(得分:55)
你真的很亲密!我使用计算来设置一些默认的java内存大小,这与你正在做的类似。这是一个例子:
{{ (ansible_memtotal_mb*0.8-700)|int|abs }}
这显示了一些事情 - 首先,它使用jinja math,所以在{{ jinja }}
内进行计算。其次,int
和abs
执行您期望的操作 - 确保结果是无符号整数。
在您的情况下,正确的代码是:
vars:
ramsize: "{{ ansible_memtotal_mb * 0.8 }}"
答案 1 :(得分:1)
要添加的一件事。 如果您认为数学乘法在jinja过滤器(|符号)之前优先,则您是错误的;-)
具有类似
的值总费率:150
host_ratio:14#百分比
"{{ total_rate*host_ratio*0.01|int }}" => 0 because 0.01|int = 0
"{{ (total_rate*host_ratio*0.01)|int) }}" => 21 as one expects