[英]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.