You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ansible获取剩余空间最大的VMware数据存储URL?

从VMware数据存储列表中提取剩余空间最大的存储URL并创建Kubernetes存储类

需求说明

需要从vmware_datastore_info模块获取的VMware数据存储列表中,筛选出剩余空间(freeSpace)最大的数据存储,提取其URL,再使用该URL在Kubernetes集群中创建存储类。

现有Ansible代码

- name: 收集ESXi数据中心信息
  hosts: localhost 
  gather_facts: false 
 
  tasks: 
  - name: 收集ESXi数据存储信息
    vmware_datastore_info: 
      hostname: '{{ vcenter_server }}' 
      username: '{{ username }}' 
      password: '{{ password }}' 
      datacenter_name: '{{ datacenter_name }}' 
      validate_certs: false 
    delegate_to: localhost 
    register: info 

  - debug: var=info.datastores

模块返回的示例数据

{
    "msg": [
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 5154511257600,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_078",
            "provisioned": 1596981248,
            "type": "VMFS",
            "uncommitted": 0,
            "url": "ds:///vmfs/volumes/64e55997-3946cc08-ce62-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 5154341388288,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_075",
            "provisioned": 11265900544,
            "type": "VMFS",
            "uncommitted": 9499049984,
            "url": "ds:///vmfs/volumes/64e5595d-02d66360-bf73-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 5154511257600,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_077",
            "provisioned": 1596981248,
            "type": "VMFS",
            "uncommitted": 0,
            "url": "ds:///vmfs/volumes/64e55986-d2d1286a-5c00-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 5154079244288,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_067",
            "provisioned": 2943352832,
            "type": "VMFS",
            "uncommitted": 914358272,
            "url": "ds:///vmfs/volumes/60743b62-a519d76c-1d48-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 5154511257600,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_074",
            "provisioned": 1596981248,
            "type": "VMFS",
            "uncommitted": 0,
            "url": "ds:///vmfs/volumes/64e5594a-07107de8-1823-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 5154511257600,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_072",
            "provisioned": 1596981248,
            "type": "VMFS",
            "uncommitted": 0,
            "url": "ds:///vmfs/volumes/64e5591a-1ed49f04-2a09-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "DDA_SPIT_013_002",
            "freeSpace": 4399479914496,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_071",
            "provisioned": 1383218544640,
            "type": "VMFS",
            "uncommitted": 626590220288,
            "url": "ds:///vmfs/volumes/64e558fc-6a916ba4-82d3-9440c96b1102/"
        },
        {
            "accessible": true,
            "capacity": 5156108238848,
            "datastore_cluster": "CZCHO_SPIT_013_002",
            "freeSpace": 3060709457920,
            "maintenanceMode": "normal",
            "multipleHostAccess": true,
            "name": "LIT013_070",
            "provisioned": 2428559687680,
            "type": "VMFS",
            "uncommitted": 333160906752,
            "url": "ds:///vmfs/volumes/6346c446-6219e6bc-f0a7-9440c96b1102/"
        }
    ]
}

解决方案

1. 提取剩余空间最大的数据存储URL

在现有Ansible任务中添加以下任务,利用Ansible过滤器筛选出剩余空间最大的存储并提取其URL:

- name: 提取剩余空间最大的数据存储URL
  set_fact:
    max_free_datastore_url: "{{ info.datastores | max(attribute='freeSpace') | json_query('url') }}"

- name: 验证提取的URL
  debug: var=max_free_datastore_url
  • 说明:max(attribute='freeSpace')遍历数据存储列表,找出freeSpace值最大的元素;json_query('url')从该元素中提取url字段。如果有多个存储剩余空间相同,max会返回列表中第一个符合条件的存储。

2. 使用提取的URL创建Kubernetes存储类

添加Ansible任务调用k8s模块创建存储类(需确保已安装kubernetes.core集合):

- name: 创建VMware存储类
  k8s:
    state: present
    definition:
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: vmware-max-free-sc
      provisioner: csi.vsphere.vmware.com
      parameters:
        datastoreURL: "{{ max_free_datastore_url }}"
      reclaimPolicy: Delete
      volumeBindingMode: Immediate
  • 说明:这里使用vSphere CSI驱动作为存储类的provisioner,你可以根据实际环境调整provisioner及其他参数(如reclaimPolicy、volumeBindingMode)。

内容的提问来源于stack exchange,提问作者chin wooi Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:49:49