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

运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:07:10