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

如何在Ansible任务中使用Jinja2创建的数组配置VMware磁盘

问题:通过数组动态生成vmware_guest模块的磁盘配置

现有变量

定义了如下数组,用于控制虚拟机磁盘的数量与大小:

vm_disk_gb:
  - sda: 50
  - sdb: 30
  - sdc: 50

期望的磁盘配置格式

希望在vmware_guest模块中生成以下格式的磁盘配置:

disk:  
      - size_gb: "50"
        type:      "eagerzeroedthick"
        datastore: "s1p1d2-vSAN"
      - size_gb: "30"
        type:      "eagerzeroedthick"
        datastore: "s1p1d2-vSAN"
      - size_gb: "50"
        type:      "eagerzeroedthick"
        datastore: "s1p1d2-vSAN"
    networks:
      ...

尝试过的错误写法

曾尝试通过拼接字符串生成磁盘配置,但未成功:

vmware_guest_disks: "[{
(% for vm_disk in {{ vm_disk_gb }} %)
'size_gb':'{{ vm_disk_gb[vm_disk] | default(50) }}',
'type': 'eagerzeroedthick'.
'datastore': 's1p1d2-vSAN'
(% endfor %)}]"

并在模块中引用:

disk: "{{ vmware_guest_disks }}"
   networks:       

错误原因

  1. 错误地将Jinja2循环放在字符串中,导致Ansible无法正确解析语法
  2. 循环标签使用了(% ... %),正确的Jinja2循环标签应为{% ... %}
  3. 字典项结尾用了句号(.)而非逗号(,),语法错误
  4. 循环变量引用错误:vm_disk是列表中的单键字典,不能直接作为vm_disk_gb的索引

正确解决方案

直接在vmware_guest模块的disk参数中使用Jinja2循环生成磁盘项,无需提前拼接字符串:

- name: 创建VMware虚拟机
  vmware_guest:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: false
    name: "{{ vm_name }}"
    guest_id: centos7_64Guest
    disk:
      {% for disk in vm_disk_gb %}
      - size_gb: "{{ disk.values() | first }}"
        type: "eagerzeroedthick"
        datastore: "s1p1d2-vSAN"
      {% endfor %}
    networks:
      - name: "{{ vm_network }}"
        # 其他网络配置项
    state: poweredon

说明

  • disk.values() | first用于提取每个单键字典中的磁盘大小值(如从{sda:50}中取出50)
  • 如果需要基于磁盘名做默认值处理,可调整为:
    size_gb: "{{ (disk.values() | first) | default(50) }}"
    
    或者保留磁盘名的引用逻辑:
    {% set disk_name = disk.keys() | first %}
    size_gb: "{{ vm_disk_gb | selectattr(disk_name, 'defined') | map(attribute=disk_name) | first | default(50) }}"
    

内容的提问来源于stack exchange,提问作者Isabella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:02:58