首页 > 解决方案 > Ansible - 如何获取列表的第一列?

问题描述

我需要在 Ansible 中获取列表的第一行,我不知道该怎么做。
我的输出如下:

ok: [localhost] => {
    "msg": [
        "vg01  /dev/xvdk",
        "vg01 /dev/xvdj",
        "vg02  /dev/xvdi",
        "vg02  /dev/xvdh",
        "vg03  /dev/xvdg",
        "vg03  /dev/xvdf"
    ]
}

我需要得到第一行(vg *)。
也许我可以在所有线路上循环来做到这一点,但我在想可能有一种可靠的方式,比如awk '{print $1}'
我试过了split,但没有成功。
有人有解决方案吗?
谢谢你。

标签: ansible

解决方案


首先,你想得到just the first row还是first column in all rows不清楚。

从输出中,输入是一个列表。如果我们假设输入即将到来my_list并且您正在尝试从所有行中提取第一列,那么这应该会给出您想要的。

- name: extract first column
  set_fact:
    extracted_columns: "{{ extracted_columns|default([]) + [item.split(' ')[0]] }}"
  with_items:
    - "{{ my_list }}"

- name: display all extracted column as list
  debug:
    msg: "{{ extracted_columns }}"

输出会像

TASK [display all extracted column as list msg={{ extracted_columns }}] *******************
ok: [localhost] => {
    "msg": [
        "vg01",
        "vg01",
        "vg02",
        "vg02",
        "vg03",
        "vg03"
    ]
}

union过滤器可用于获取唯一值(注意:重用从先前任务中提取的值)

- name: extract unique first column
  set_fact:
    extracted_columns_unique: "{{ extracted_columns | default([]) | union(extracted_columns) }}"
  with_items:
    - "{{ my_list }}"

- name: display all extracted unique column as list
  debug:
    msg: "{{ extracted_columns_unique }}"

输出会像

TASK [display all extracted unique column as list msg={{ extracted_columns_unique }}] ******************************
ok: [localhost] => {
    "msg": [
        "vg01",
        "vg02",
        "vg03"
    ]
}

如果您想获取列表的第一项

# using index
- debug:
    msg: "{{ my_list[0] }}"

或者

# using 'first' filter
- debug:
    msg: "{{ my_list | first }}"

推荐阅读