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

如何用Ansible将VMware集群与主机信息整合成指定字典?

实现集群-主机名映射字典的Ansible方案

根据你已有的VMware集群与主机原始数据,分两种常见场景给出实现方法:

场景1:原始数据是主机列表(含集群名字段)

如果你的原始数据是从vmware_host_info等模块获取的、每条包含主机名和所属集群的列表,比如:

hosts_data:
  - cluster_name: PQR-CLU01
    name: PQR-cn0001.myhost.com
  - cluster_name: PQR-CLU01
    name: PQR-cn0002.myhost.com
  - cluster_name: ABC-CLU01
    name: ABC-cn0002.myhost.com
  - cluster_name: ABC-CLU01
    name: ABC-cn0001.myhost.com

使用Ansible的过滤器组合转换为目标字典:

- name: 生成集群-主机映射字典
  set_fact:
    cluster_hosts_dict: >-
      {{
        hosts_data | groupby('cluster_name') |
        items2dict(key_name=0, value_name=1) |
        dict2items |
        map('combine', {'value': item.value | map(attribute='name') | list}) |
        items2dict(key_name='key', value_name='value')
      }}

- name: 验证输出结果
  debug:
    var: cluster_hosts_dict

步骤解释:

  • groupby('cluster_name'):按集群名将主机数据分组,得到(集群名, 该集群下主机条目列表)的元组集合
  • items2dict(...):将分组结果转换为字典,此时值为完整的主机条目列表
  • dict2items:将字典转回条目列表,方便批量处理每个集群的主机数据
  • map('combine', ...):提取每个主机条目里的name字段,替换原字典的值为纯主机名列表
  • items2dict(...):重新转换为目标格式的字典

场景2:原始数据是集群列表(含主机名字段)

如果你的原始数据是从vmware_cluster_info等模块获取的、每条包含集群名和对应主机列表的集合,比如:

clusters_data:
  - cluster_name: PQR-CLU01
    hosts:
      - PQR-cn0001.myhost.com
      - PQR-cn0002.myhost.com
  - cluster_name: ABC-CLU01
    hosts:
      - ABC-cn0002.myhost.com
      - ABC-cn0001.myhost.com

转换逻辑更简洁,直接用items2dict过滤器提取对应字段:

- name: 生成集群-主机映射字典
  set_fact:
    cluster_hosts_dict: "{{ clusters_data | items2dict(key_name='cluster_name', value_name='hosts') }}"

- name: 验证输出结果
  debug:
    var: cluster_hosts_dict

执行后就能得到你需要的格式:

{'PQR-CLU01': ['PQR-cn0001.myhost.com','PQR-cn0002.myhost.com'],'ABC-CLU01':['ABC-cn0002.myhost.com','ABC-cn0001.myhost.com']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:54:16