如何在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
相关产品推荐
相关产品推荐

