问题描述
在学习使用 Ansible 配置 MongoDB 时,在本地的 Vagrant 虚拟机上设置了一个 Ansible playbook,但是在执行过程中遇到了以下错误:
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TypeError: 'Collection' object is not callable. If you meant to call the 'authenticate' method on a 'Database' object it is failing because no such method exists.
fatal: [192.168.56.11]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 192.168.56.11 closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n File \"/home/vagrant/.ansible/tmp/ansible-tmp-1640759955.2153473-3678-226245830655855/AnsiballZ_mongodb_user.py\", line 107, in <module>\r\n _ansiballz_main()\r\n File \"/home/vagrant/.ansible/tmp/ansible-tmp-1640759955.2153473-3678-226245830655855/AnsiballZ_mongodb_user.py\", line 99, in _ansiballz_main\r\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n File \"/home/vagrant/.ansible/tmp/ansible-tmp-1640759955.2153473-3678-226245830655855/AnsiballZ_mongodb_user.py\", line 47, in invoke_module\r\n ...
错误信息中的一部分表明以下操作是出错的:
- name: Create the application user
mongodb_user:
login_user: root
login_password: "{{ dbpass }}"
database: "{{ dbname }}"
name: "{{ appdbuser }}"
password: "{{ appdbpass }}"
roles: dbOwner
state: present
解决方案
这个错误可能与你正在使用的 Ansible MongoDB Collection 以及 pymongo 版本的兼容性有关。目前,Ansible 的 community.mongodb
Collection 版本(例如 v1.3.2)可能不兼容 pymongo 4.x 版本。要解决这个问题,你可以尝试以下解决方案:
方案1:降级 pymongo 版本
由于当前的 Ansible MongoDB Collection 版本可能不兼容 pymongo 4.x 版本,你可以将 pymongo 版本降级到 3.x。这样可以避免与 Ansible Collection 的兼容性问题。以下是一些可能的步骤:
- 在你的目标主机上,卸载当前安装的 pymongo 4.x 版本。
- 安装 pymongo 3.x 版本。你可以使用以下命令:
bash
pip install pymongo==3.12.1
- 在运行 Ansible playbook 之前,确保 pymongo 已经降级到了 3.x 版本。
方案2:等待修复
如果你想继续使用 pymongo 4.x 版本,你可以等待 Ansible community.mongodb
Collection 更新,以适应 pymongo 4.x 版本。根据用户评论,最新的提交已经在修复这个问题,并将库版本固定为了 3.12.2。你可以随着更新的发布来升级 Ansible Collection,以解决兼容性问题。
另外,开发者已经在 GitHub 上创建了一个分支来适配 pymongo 4.x 版本,你可以在 这里 查看相关进展。
请注意,解决这个问题可能需要根据具体情况选择不同的方法,例如降级 pymongo 版本或等待 Ansible Collection 的更新。在选择解决方案之前,请确保备份相关数据以及配置文件。
注意:本解决方案中提到的操作可能会因版本差异或其他因素而产生变化,请在实际操作前确保充分了解和备份。
总结
在使用 Ansible 配置 MongoDB 时,可能会遇到与 pymongo 版本兼容性相关的问题。如果遇到上述错误,可以考虑降级 pymongo 版本或等待 Ansible Collection 更新来解决。根据具体情况选择最适合的解决方案,以确保成功配置 MongoDB。