Ansible - 我可以在设置变量值时使用算术吗?

时间:2015-11-03 17:30:43

标签: ansible ansible-playbook

我想使用系统事实为主机乘以数字/百分比作为变量的基础。我特别想做的是使用ansible_memtotal_mb值并将其乘以.80以获得ramsize然后用于设置Couchbase值。我一直在尝试下面这行的不同变化。我不确定这是可能的,但任何帮助都会受到赞赏。

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

2 个答案:

答案 0 :(得分:55)

你真的很亲密!我使用计算来设置一些默认的java内存大小,这与你正在做的类似。这是一个例子:

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

这显示了一些事情 - 首先,它使用jinja math,所以在{{ jinja }}内进行计算。其次,intabs执行您期望的操作 - 确保结果是无符号整数。

在您的情况下,正确的代码是:

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