运行Ansible Molecule测试时遇duplicate host callback错误求助
解决Molecule测试中的"duplicate host callback"错误
问题
运行Molecule验证环节时触发"duplicate host callback"错误,逻辑和语法检查后仍未定位问题,需排查解决。
配置信息
remi_repos: [ {name: remi, description: "REMI repository", file_name: "remi-base", priority: "3"}, {name: php80, description: "REMI PHP 8.0 repository", file_name: "php80-remi", priority: "1"}, {name: safe, description: "REMI Safe repository", file_name: "remi-safe", priority: "2"}, ] - include_tasks: repo-install.yml vars: repo_name: "{{ item.name }}" repo_description: "{{ item.description }}" repo_file_name: "{{ item.file_name }}" repo_priority: "{{ item.priority }}" with_items: "{{ remi_repos }}"
repo-install.yml 内容
- name: Add {{ repo_description }} become: true ansible.builtin.yum_repository: name: "{{ repo_name }}" description: "{{ repo_name }} YUM repo" file: "{{ repo_file_name }}" baseurl: "http://rpms.remirepo.net/enterprise/7/{{ repo_name }}/$basearch/" mirrorlist: "http://rpms.remirepo.net/enterprise/7/{{ repo_name }}/httpsmirror" priority: "{{ repo_priority }}" gpgcheck: true gpgkey: http://rpms.remirepo.net/RPM-GPG-KEY-remi
Molecule测试代码
- include_tasks: repo-verify.yml vars: repo_name: "{{ item.name }}" repo_description: "{{ item.description }}" repo_file_name: "{{ item.file_name }}" repo_priority: "{{ item.priority }}" with_items: "{{ remi_repos }}"
repo-verify.yml 内容
--- # 验证Linux仓库是否安装的任务集 - name: "检查{{ repo_description }}是否存在" stat: path: '/etc/yum.repos.d/{{ repo_file_name }}.repo' register: repo_installed - name: "{{ repo_name }}仓库未安装则失败" assert: that: - not repo_installed.changed fail_msg: "{{ repo_name }}仓库未安装" success_msg: "{{ repo_name }}仓库已安装"
错误信息
INFO Running default > verify Molecule default > verify INFO Running Ansible Verifier [WARNING]: Failure using method (v2_runner_on_failed) in callback plugin (<ansible.plugins.callback.junit.CallbackModule object at 0x7fef2cf843a0>): /xxx/nextcloud- ami/ansible/xxx/molecule/default/test-dependencies.yml:9: Verify: include_tasks _raw_params=repo-verify.yml: duplicate host callback: test-molecule CRITICAL Ansible return code was 2, command was: ['ansible-playbook', '--inventory', '/root/.cache/molecule/xxx/default/inventory', '--skip-tags', 'molecule-notest,notest', '/xxx/molecule/default/verify.yml'] WARNING An error occurred during the test sequence action: 'verify'. Cleaning up.
解决方案
这个错误通常和JUnit回调插件重复注册主机有关,可按以下步骤排查:
- 检查Molecule配置文件(
molecule/default/molecule.yml)的verifier配置,确认是否重复启用JUnit回调。比如避免同时在verifier的ansible.cfg和测试playbook中配置junit插件。 - 调整验证阶段的任务结构:将
include_tasks替换为import_tasks,或改用loop替代with_items(Ansible 2.5+推荐使用loop),减少循环中回调触发的冲突。 - 检查全局或项目的
ansible.cfg,确保callback_whitelist中没有重复添加junit插件。 - 清理Molecule缓存:删除
~/.cache/molecule下对应项目的缓存目录,重新运行测试。
内容的提问来源于stack exchange,提问作者Rob Wilkinson
相关产品推荐
相关产品推荐

