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

Ansible Playbook单Play循环多组凭据的语法错误求助

问题:Ansible中循环多组凭据的变量定义语法错误

你当前的v_creds定义不符合YAML列表+字典的语法规范,导致解析失败。错误核心是未将每个凭据组定义为独立字典,也未用列表格式包裹。

错误的变量定义(参考)

v1_username: 'user123'
v1_password: "{{ vault_v1_password }}"
v1_hostname: 'vmname123.domain'
v2_username: 'user124'
v2_password: "{{ vault_v2_password }}"
v2_hostname: 'vmname124.domain'
v3_username: 'user125'
v3_password: "{{ vault_v3_password }}"
v3_hostname: 'vmname125.domain'
v1_datacenter: "DC1"
v2_datacenter: "DC2"
v3_datacenter: "DC3"
v_creds:
   "hostname": "{{v1_hostname}}", "username": "{{v1_username}}", "password": "{{v1_password}}", "datacenter": "{{v1_datacenter}}"
   "hostname": "{{v2_hostname}}", "username": "{{v2_username}}", "password": "{{v2_password}}", "datacenter": "{{v2_datacenter}}"
   "hostname": "{{v3_hostname}}", "username": "{{v3_username}}", "password": "{{v3_password}}", "datacenter": "{{v3_datacenter}}"

正确的v_creds变量定义

需将v_creds定义为字典组成的列表,每个凭据组是独立字典,用-标识列表项,确保模板变量正确引用:

v1_username: 'user123'
v1_password: "{{ vault_v1_password }}"
v1_hostname: 'vmname123.domain'
v2_username: 'user124'
v2_password: "{{ vault_v2_password }}"
v2_hostname: 'vmname124.domain'
v3_username: 'user125'
v3_password: "{{ vault_v3_password }}"
v3_hostname: 'vmname125.domain'
v1_datacenter: "DC1"
v2_datacenter: "DC2"
v3_datacenter: "DC3"
v_creds:
  - hostname: "{{ v1_hostname }}"
    username: "{{ v1_username }}"
    password: "{{ v1_password }}"
    datacenter: "{{ v1_datacenter }}"
  - hostname: "{{ v2_hostname }}"
    username: "{{ v2_username }}"
    password: "{{ v2_password }}"
    datacenter: "{{ v2_datacenter }}"
  - hostname: "{{ v3_hostname }}"
    username: "{{ v3_username }}"
    password: "{{ v3_password }}"
    datacenter: "{{ v3_datacenter }}"

补充说明

  • YAML列表必须用-作为每个元素开头,每个元素是包含hostname/username等键的字典
  • 模板变量{{ ... }}无需额外加引号(除非变量值含特殊字符,此处直接引用已定义变量即可)
  • 保持缩进一致(建议用2或4个空格,禁止混用制表符)

另外,你的Playbook中debug任务需调整:loop执行后vs_check是包含所有循环结果的对象,直接访问vs_check['instance']会报错,可修改为:

- debug:    
    msg: "{{ item['instance']['runtime']['powerState'] }}"
  loop: "{{ vs_check.results }}"
  when: item is succeeded

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:30:15