Как получить максимальное значение из обьекта клю:значение?
Тривиальная задача - найти диск с максимальным размером из имеющихся в системе.
- name: "data_node | get disk sizes"
set_fact:
disk_with_size: >-
{{ disk_with_size
| default({})
| combine({disk.key: disk.value.size|human_to_bytes}) }}
size_with_disk: >-
{{ size_with_disk
| default({})
| combine({disk.value.size|human_to_bytes: disk.key}) }}
loop: "{{ lookup('dict', current.disks) }}"
loop_control:
loop_var: "disk"
- name: "data_node | get max disk size"
set_fact:
disk_max_size: >-
{{ disk_with_size
| dict2items
| json_query('[].value')|max }}
- name: "data_node | get data disk name"
set_fact:
data_disk_name: "{{ size_with_disk["{{ disk_max_size }}"] }}"
- block:
- debug:
msg:
- "this is a data node {{ ansible_hostname }} {{ disk_with_size }}"
- "max disk size {{ disk_max_size }}"
- "{{ size_with_disk }}"
- "disk to partition {{ data_disk_name }}"
ok: [data-node] => {
"msg": [
"this is a data node esc-data-node-00000B {'sda': 32212254720, 'sdb': 34359738368, 'sdc': 2199023255552, 'sr0': 643072}",
"max disk size 2199023255552",
{
"643072": "sr0",
"32212254720": "sda",
"34359738368": "sdb",
"2199023255552": "sdc"
}
]
}
Как из объекта
{'sda': 32212254720, 'sdb': 34359738368, 'sdc': 2199023255552, 'sr0': 643072}
получить ключ с максимальным размером из всех ('sdc': 2199023255552)?
Или есть другой вменяемый способ получить диск с максимальным размером.
Ansible 2.10+
UP 20210111T212500+0000
Нашел ответ, который не работает
- name: "data_node | get data disk name"
set_fact:
data_disk_name: >-
{{ disk_with_size
| dict2items
| max(attribute='value') }}
Ссылки
- https://stackoverflow.com/questions/60339321/get-the-newest-dictionary-from-a-list-in-ansible
- https://jinja.palletsprojects.com/en/2.11.x/templates/#max
- https://github.com/ansible/ansible/pull/50909