Ansible - 使用jinja2过滤器对变量集进行算术运算

时间:2018-02-19 15:03:33

标签: math filter ansible jinja2

我想设置一个变量,该变量是角色中使用jinja过滤器提取的值的一小部分。我想做的是:

- name: Get size of FS
  set_fact:
    tmp_size_b: "{{ ansible_mounts | selectattr('device', 'match', '^/dev/mapper/root_vg-lv_tmp$') | map(attribute='size_total') | list }}"

- name: Convert unit
  set_fact:
    tmp_size_k: "{{ tmp_size_b / 1024 }}"

如何将使用jinja过滤器提取的字符串转换为可以在以后操作的数字。我尝试在过滤器中| int之后添加| list,但是没有做到这一点。

1 个答案:

答案 0 :(得分:2)

tmp_size_b是您示例中的列表。你试图划分列表......

你可能想要:

- name: Get size of FS
  set_fact:
    tmp_size_b: >
                {{ ansible_mounts
                   | selectattr('device', 'match', '^/dev/mapper/root_vg-lv_tmp$')
                   | map(attribute='size_total')
                   | list 
                   | first }}

- name: Convert unit
  set_fact:
    tmp_size_k: "{{ (tmp_size_b | int) / 1024 }}"

您想在| int内使用{{...}},因为您不能在表达式之外使用int变量。