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

Ansible批量创建Proxmox VM报错:'dict object'无'vm_id'属性

Ansible Playbook创建Proxmox VM报错排查与修复

问题概述

编写Ansible Playbook批量在Proxmox创建两台VM,VM属性存于list.yaml,默认配置存于defaults.yaml,执行时出现报错:'dict object' has no attribute 'vm_id'

错误原因

  1. 变量引用与循环目标不匹配:
    • 原list.yaml中vms是嵌套字典结构(vms: {vm1: {...}, vm2: {...}}),而非列表,无法直接用with_items循环。
    • Playbook中错误定义了list: '/vars/list.yaml'变量,并用with_items: "{{ list }}"循环字符串路径,导致循环对象完全错误。
    • 任务中错误用vms.vm_id引用属性,未结合循环变量item获取当前VM的属性。
  2. 拼写错误:
    • include任务中的defualts拼写错误,应为defaults
    • Proxmox模块参数ballon拼写错误,应为balloon

修复步骤

1. 修改list.yaml结构为列表格式

将嵌套字典改为列表,便于with_items循环遍历:

---
vms:
  - vm_id: "101"
    vm_name: "vm1"
    vm_cores: "2"
    vm_sockets: "1"
    vm_memory: "2048"
    vm_storage: "20G"
  - vm_id: "102"
    vm_name: "vm2"
    vm_cores: "2"
    vm_sockets: "1"
    vm_memory: "2048"
    vm_storage: "20G"

2. 修正主Playbook代码

移除无效变量定义,修正循环目标与变量引用,修复拼写错误:

---
- name: 'Creating VMs in Proxmox'
  hosts: all
  tasks:
    - name: 'including defaults'
      include_vars: /vars/defaults.yaml
    - name: 'including list'
      include_vars: /vars/list.yaml
    - name: 'Creating VMs'
      community.general.proxmox_kvm:
        api_user: "{{ user }}"
        api_password: "{{ passwd }}"
        api_host: "{{ host }}"
        node: "{{ node_name }}"
        vmid: "{{ item.vm_id }}"
        name: "{{ item.vm_name }}"
        vm_type: qemu
        ostype: l26
        disks:
          - size: "{{ item.vm_storage }}"
            type: sata
            storage: local-lvm
        bootdisk: sata
        cpu: "{{ item.vm_cores }}"
        sockets: "{{ item.vm_sockets }}"
        cpuunits: 1000
        cores: 1
        balloon: "{{ item.vm_memory }}"
        netif: '{"net0":"name=virtio,ip=dhcp,ip6=dhcp,bridge=vmbr1,rate=200"}'
        localtime: true
        state: present
      with_items: "{{ vms }}"

修复说明

  • list.yaml改为列表后,vms变量成为包含两个VM配置字典的列表,with_items: "{{ vms }}"会逐个遍历每个VM配置。
  • 任务中用item引用当前循环的VM字典,item.vm_id、item.vm_name等可正确获取对应属性。
  • 移除了无效的list变量定义,直接使用include_vars加载后的vms变量。
  • 修正了两处拼写错误,避免潜在的执行问题。

内容的提问来源于stack exchange,提问作者Arun Swiftz -1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:17:05