在 Ansible 中设置变量值时如何使用算术?

How to use arithmetic when setting a variable value in Ansible?

我想使用主机乘以 number/percentage 的系统事实作为变量的基础。我想要具体做的是使用 ansible_memtotal_mb 值并将其乘以 .80 以获得 ramsize,然后用于设置 Couchbase 值。我一直在尝试下面一行的不同变体。我不确定是否可行,但我们将不胜感激。

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

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

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

这说明了一些事情 - 首先,它使用 jinja math{{ jinja }} 中的计算也是如此。其次,intabs 做你所期望的——确保结果是一个无符号整数。

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

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

要补充一点。 如果您认为数学乘法优先于 jinja 过滤器(| 符号),那您就错了 ;-)

值如

total_rate: 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