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

如何用Ansible的VMware模块提取vCenter数据中心名称并复用

问题

使用Ansible的community.vmware.vmware_datacenter_info模块获取vCenter中多个数据中心的名称,用于后续Playbook。已完成信息收集并注册到result变量,但提取名称时出错,需解决如何将数据中心名称注册为可复用变量。

现有Playbook代码:

---
 - hosts: localhost
   gather_facts: False

   tasks:
   - name: Gather information about all datacenters
     community.vmware.vmware_datacenter_info:
       hostname: "{{ vCenter }}"
       username: "{{ vCenter_username }}"
       password: "{{ vCenter_password }}"
       validate_certs: False
     delegate_to: localhost
     register: result

result变量输出:

ok: [localhost] => {
    "msg": {
        "changed": false,
        "datacenter_info": [
            {
                "config_status": "gray",
                "moid": "datacenter-271",
                "name": "Sample_DC_1",
                "overall_status": "gray"
            },
            {
                "config_status": "gray",
                "moid": "datacenter-276",
                "name": "Sample_DC_2",
                "overall_status": "gray"
            }
        ],
        "failed": false
    }
}

尝试的错误代码:

- name: Display datacenter name
    debug:
      msg:
        - "{{ item.value.name }}"
    loop: "{{ lookup('dict', result)  }}"

错误提示:

fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'bool object' has no attribute 'name'"}
解决方案

错误原因

你错误地对整个result字典进行了字典循环,而result中的changed、failed是布尔类型值,循环到这些字段时,item.value是布尔对象,自然没有name属性,导致报错。正确的做法是直接循环result.datacenter_info这个数组,它才是存储所有数据中心信息的列表。

1. 提取并显示数据中心名称

使用以下任务即可正确获取名称:

- name: 显示所有数据中心名称
  debug:
    msg: "{{ item.name }}"
  loop: "{{ result.datacenter_info }}"

2. 将名称注册为可复用变量

如果需要把所有数据中心名称保存为一个列表变量,供后续任务使用,可以使用set_fact模块:

- name: 注册数据中心名称列表
  set_fact:
    datacenter_names: "{{ result.datacenter_info | map(attribute='name') | list }}"

- name: 验证注册的变量
  debug:
    msg: "所有数据中心名称: {{ datacenter_names }}"

执行后,datacenter_names变量将是一个包含所有数据中心名称的列表(示例:["Sample_DC_1", "Sample_DC_2"]),后续Playbook任务可直接调用该变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:45:31