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

Ansible:如何正确关联产品字典与对应数据库字典条目?

解决Ansible中产品与对应数据库配对的问题

问题原因

你遇到的核心问题是每次循环执行set_fact时,都会覆盖同一个db_info变量。循环结束后,这个变量仅保留最后一次循环的赋值结果,因此所有产品的数据库信息都显示为最后一条数据库记录。

解决方案

方案1:生成数据库映射字典(推荐)

先将databases列表转换为以location为键的映射字典,后续可直接通过产品的location字段快速匹配对应数据库信息:

tasks:
  - name: 生成数据库映射字典
    set_fact:
      db_map: "{{ databases | items2dict(key_name='location', value_name='') }}"

  - name: 验证产品与数据库配对
    ansible.builtin.debug:
      msg: "host is {{ db_map[item.location].db_host }} in {{ item.location }} with {{ item.portfolio }}."
    loop: "{{ product_list }}"

说明:items2dict过滤器会把databases列表中的每个元素,以location的值作为键,元素本身作为值,生成新字典db_map。遍历产品时,db_map[item.location]即可直接获取对应数据库的完整连接信息。

方案2:遍历产品时直接匹配数据库

如果不需要提前生成映射字典,可在debug任务中直接用过滤器筛选对应数据库:

tasks:
  - name: 验证产品与数据库配对
    ansible.builtin.debug:
      msg: "host is {{ (databases | selectattr('location', 'equalto', item.location) | first).db_host }} in {{ item.location }} with {{ item.portfolio }}."
    loop: "{{ product_list }}"

说明:selectattr('location', 'equalto', item.location)从databases列表中筛选出与当前产品location匹配的元素,first取第一个匹配结果(因每个location唯一),再提取db_host字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:35:25