使用jinja 2 for循环从可见的事实中获取挂载名称和大小



我对解决这个简单的任务失去了希望…

我只需要取参数"size_total"one_answers";mount"从这个循环:

{% for host in groups['test'] %}
{{ hostvars[host]['ansible_facts']['mounts'] }}
{% endfor %}

上面的给出了这个:

[{'mount': '/', 'device': '/dev/mapper/rhel_rhel84-root', 'fstype': 'xfs', 'options': 'rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota', 'size_total': 18238930944, 'size_available': 14193164288, 'block_size': 4096, 'block_total': 4452864, 'block_available': 3465128, 'block_used': 987736, 'inode_total': 8910848, 'inode_available': 8802255, 'inode_used': 108593, 'uuid': 'f47a2833-0a96-42cc-aafa-172e34efff8a'}, {'mount': '/boot', 'device': '/dev/vda1', 'fstype': 'xfs', 'options': 'rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota', 'size_total': 1063256064, 'size_available': 852586496, 'block_size': 4096, 'block_total': 259584, 'block_available': 208151, 'block_used': 51433, 'inode_total': 524288, 'inode_available': 523979, 'inode_used': 309, 'uuid': '3126f0dc-4e4d-457e-8102-1f6f7dadc43c'}]

问题:如何访问该字典中的值?是字典还是字典列表?

提前感谢!

编辑:

谢谢你@Vladimir Botka。

现在的情况是这样的:我稍微美化了您的示例(使用人类可读的值),并且我有两次值,像这样。是否有一种方法可以使值仅插入目标文件一次?我假设这里将使用带有列表的if过滤器。

mount: / free space: 3.77 GB
mount: /boot free space: 200.91 MB

mount: / free space: 3.89 GB
mount: /boot free space: 200.91 MB

编辑2:

我已经设法修复了文件系统的重复输出。如果有人需要,嵌套循环解决了这个问题:

{% set slots = [] %}
{% set size = [] %}
{% set size2 = [] %}
{% for host in groups['test'] %}
{% for i in hostvars[host]['ansible_facts']['mounts'] if i not in slots %}
{{ slots.append(i.mount) }}
{{ size.append((i.size_total - i.size_available )|human_readable ) }}
{{ size2.append(i.size_total|human_readable ) }}
{% endfor %}
{% endfor %}
Filesystem: {{ slots[0] }}       Size: {{ size2[0] }} / {{ size[0] }}
Filesystem: {{ slots[1] }}       Size: {{ size2[1] }} / {{ size[1] }}

试试这个

{% for host in groups['test'] %}
{% for i in hostvars[host]['ansible_facts']['mounts'] %}
mount: {{ i.mount }} size_total: {{ i.size_total }}
{% endfor %}
{% endfor %}

最新更新