在 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 }}
中的计算也是如此。其次,int
和 abs
做你所期望的——确保结果是一个无符号整数。
在您的情况下,正确的代码是:
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
我想使用主机乘以 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 }}
中的计算也是如此。其次,int
和 abs
做你所期望的——确保结果是一个无符号整数。
在您的情况下,正确的代码是:
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