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

如何在Ansible的Molecule单元测试中模拟groups?

  • name: Debug JDBC lines
    ansible.builtin.debug:
    msg: "jdbc_connection_string_np{{ my_idx }}=jdbc:mysql://{{ item }}:3306/np"
    with_items: "{{ groups['db'] }}"
    loop_control:
    index_var: my_idx
    when:
    • asp_srv is defined
    • anp_pkg_srv is defined
    • anp_pkg_srv in asp_srv
运行`molecule test`时触发错误:

TASK [bern.numberprovisioning : Debug JDBC lines] *********************
fatal: [centos7]: FAILED! => {"msg": "'dict object' has no attribute 'db'"}

我想要的输出效果是:

jdbc_connection_string_np0=jdbc:mysql://mockdb-host1:3306/np
jdbc_connection_string_np1=jdbc:mysql://mockdb-host2:3306/np

目前我的`provisioner`配置是这样的,尝试修改但都报错:
```yaml
provisioner:
  name: ansible
  inventory:
    host_vars:
      centos7:
        asp_srv: "all,figapiv2,nisioning,ocessor"

请问怎么配置才能在Molecule测试里模拟groups,解决这个错误并得到预期输出?

解决方法

要模拟Ansible的groups变量同时满足任务的when条件,直接修改Molecule的provisioner配置即可,具体如下:

完整配置示例

provisioner:
  name: ansible
  inventory:
    # 定义模拟的db组及成员主机
    groups:
      db:
        - mockdb-host1
        - mockdb-host2
    # 补充主机变量,满足when条件要求
    host_vars:
      centos7:
        asp_srv: "all,figapiv2,nisioning,ocessor"
        anp_pkg_srv: "nisioning"  # 这个值必须在asp_srv的字符串里,任务才会执行

关键配置说明

  • 模拟groups:通过inventory.groups字段直接定义db组和对应的两台模拟数据库主机,这样任务里的groups['db']就能正确获取到列表。
  • 满足when条件:必须在centos7的主机变量里添加anp_pkg_srv,而且它的值要存在于asp_srv的字符串中(比如示例里的nisioning),否则任务会因为条件不满足被跳过。
  • 验证效果:配置好后重新运行molecule test,任务就会遍历db组的主机,输出你想要的JDBC连接字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:34:37