繁体   English   中英

如何使用Ansible从PVC列表中获取卷名列表?

[英]How to get list of volume names from PVC list using ansible?

在我的机器中,创建了4个pvc。 现在,我需要在列表中获取与pvc相关的所有卷名。 然后,这些列表将被传递到存储阵列,我将确保在存储服务器中创建卷。

- name: Verify whether the PVC is created
    command: "kubectl get pvc pvc{{local_uuid}}-{{item}} -o json"
    with_sequence: start=1 end=4
    register: result

- set_fact: 
      pvcstatus: "{{ (item.stdout |from_json).status.phase }}"
      volume_name: "{{(item.stdout |from_json).spec.volumeName}}"
    with_items: "{{ result.results}}"

 - debug: var=volume_name

但是,当我运行上述任务时,volume_name仅具有最后一个volumename而不是所有卷都具有列表。 如何获得列表中的所有卷名?

您的set_fact任务是在每次迭代set_fact volume_name设置为单个值...因此,当然,当循环完成时,变量具有最后一次迭代的值。 这是预期的行为。 如果需要列表,则需要创建一个列表。 您可以通过在set_fact循环中添加一个列表来做到这一点:

- set_fact: 
    volume_name: "{{ volume_name|default([]) + [(item.stdout |from_json).spec.volumeName] }}"
  with_items: "{{ result.results}}"

当未定义volume_name时,表达式volume_name|default([])将为空列表(在循环的第一次迭代中就是这种情况)。

我使用以下剧本对此进行了测试:

---
- hosts: localhost
  gather_facts: false
  vars:
    result:
      results:
        - stdout: '{"spec": {"volumeName": "volume1"}}'
        - stdout: '{"spec": {"volumeName": "volume2"}}'
        - stdout: '{"spec": {"volumeName": "volume3"}}'
  tasks:
    - debug:
        var: result

    - set_fact: 
        volume_name: "{{ volume_name|default([]) + [(item.stdout |from_json).spec.volumeName] }}"
      with_items: "{{ result.results}}"

    - debug:
        var: volume_name

结果是:

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "volume_name": [
        "volume1",
        "volume2",
        "volume3"
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM