首页 > 解决方案 > 使用 parted 输出中的属性

问题描述

我需要 Ansible 来安装服务器,并且必须为 LVM 分区。如何使用“sda_info.partitions”的第二个分区中的属性“size”?

hosts: node2
 become: yes
 become_method: sudo
 become_flags: -H -S
 tasks:
 - name: Some name
   parted:
     device: /dev/sda
     unit: s
   register: sda_info

OUTPUT

TASK [debug] ***************************************************************
ok: [node2] => {
   "sda_info.partitions": [
       {
           "begin": 4096.0, 
           "end": 51202047.0, 
           "flags": [
               "boot"
           ], 
           "fstype": "ext4", 
           "name": "", 
           "num": 1, 
           "size": 51197952.0, 
           "unit": "s"
       }, 
       {
           "begin": 51202048.0, 
           "end": 52248575.0, 
           "flags": [], 
           "fstype": "linux-swap(v1)", 
           "name": "", 
           "num": 2, 
           "size": 1046528.0, 
           "unit": "s"
       }
   ]
}

标签: ansible

解决方案


sda_info.partitions是一个包含 2 个字典的列表。可以参考第二本词典

sda_info.partitions[1]

并且属性大小可以分配给一个变量

- set_fact:
    size_2nd_part: "{{ sda_info.partitions[1].size }}"

很可能该列表将按分区数排序。如果不是,上面的变量将不是第二个分区的大小。使用json_query确定

- set_fact:
    size_2nd_part: "{{ sda_info.partitions|json_query('[?num==`2`].size') }}"

推荐阅读