如何对json_query查询到的Ansible事实进行除法和乘法?
How to divide and multiply Ansible facts queried by json_query?
"{{ ansible_facts | json_query('mounts[*].size_available') }} / {{ ansible_facts | json_query('mounts[*].size_total') }} * 100"
我正在尝试获取可用大小并将其除以总大小,然后乘以 100 得到磁盘使用百分比。当前代码给我这样的输出:
"msg": "[238273] / [483298433] * 100"
它完全忽略了 /
和 *
。
我该如何解决这个问题?
您的数学运算符需要位于 Jinja expression {{ ... }}
.
内
此外,由于您正在获取 [238273]
和 [483298433]
,因此您在 json_query
中的 JMESPath 查询 return 正在为您提供两个列表,因此您确实希望使用 first
filter.
最后但同样重要的是,这两个值仍然会 return 你一些字符串,所以你确实想使用 int
filter.
"{{ (ansible_facts | json_query('mounts[*].size_available') | first | int) / (ansible_facts | json_query('mounts[*].size_total') | first | int) * 100 }}"
json_query 不需要。只需 map 属性,例如
- debug:
msg: "{{ (item.0 / item.1 * 100)|round }}"
with_together:
- "{{ ansible_mounts|map(attribute='size_available')|list }}"
- "{{ ansible_mounts|map(attribute='size_total')|list }}"
给予
ok: [localhost] => (item=[2085240832, 41015336960]) =>
msg: '5.0'
ok: [localhost] => (item=[30278656, 100663296]) =>
msg: '30.0'
ok: [localhost] => (item=[21565116416, 109899771904]) =>
msg: '20.0'
一个更简单的选择是迭代安装列表,例如
- debug:
msg: "{{ (item.size_available / item.size_total * 100)|round }}"
loop: "{{ ansible_mounts }}"
loop_control:
label: "{{ item.mount }}"
给予
ok: [localhost] => (item=/) =>
msg: '5.0'
ok: [localhost] => (item=/boot/efi) =>
msg: '30.0'
ok: [localhost] => (item=/export) =>
msg: '20.0'
"{{ ansible_facts | json_query('mounts[*].size_available') }} / {{ ansible_facts | json_query('mounts[*].size_total') }} * 100"
我正在尝试获取可用大小并将其除以总大小,然后乘以 100 得到磁盘使用百分比。当前代码给我这样的输出:
"msg": "[238273] / [483298433] * 100"
它完全忽略了 /
和 *
。
我该如何解决这个问题?
您的数学运算符需要位于 Jinja expression {{ ... }}
.
此外,由于您正在获取 [238273]
和 [483298433]
,因此您在 json_query
中的 JMESPath 查询 return 正在为您提供两个列表,因此您确实希望使用 first
filter.
最后但同样重要的是,这两个值仍然会 return 你一些字符串,所以你确实想使用 int
filter.
"{{ (ansible_facts | json_query('mounts[*].size_available') | first | int) / (ansible_facts | json_query('mounts[*].size_total') | first | int) * 100 }}"
json_query 不需要。只需 map 属性,例如
- debug:
msg: "{{ (item.0 / item.1 * 100)|round }}"
with_together:
- "{{ ansible_mounts|map(attribute='size_available')|list }}"
- "{{ ansible_mounts|map(attribute='size_total')|list }}"
给予
ok: [localhost] => (item=[2085240832, 41015336960]) =>
msg: '5.0'
ok: [localhost] => (item=[30278656, 100663296]) =>
msg: '30.0'
ok: [localhost] => (item=[21565116416, 109899771904]) =>
msg: '20.0'
一个更简单的选择是迭代安装列表,例如
- debug:
msg: "{{ (item.size_available / item.size_total * 100)|round }}"
loop: "{{ ansible_mounts }}"
loop_control:
label: "{{ item.mount }}"
给予
ok: [localhost] => (item=/) =>
msg: '5.0'
ok: [localhost] => (item=/boot/efi) =>
msg: '30.0'
ok: [localhost] => (item=/export) =>
msg: '20.0'