Ansible使用synchronize模块报错:无法导入MAGIC_VARIABLE_MAPPING
Ansible synchronize模块导入错误的解决办法
错误原因
出现cannot import name 'MAGIC_VARIABLE_MAPPING'报错,核心原因是ansible.posix集合版本与Ansible核心版本不兼容:
- synchronize模块属于ansible.posix集合,旧版本的该集合会尝试调用Ansible核心中已移除的
MAGIC_VARIABLE_MAPPING变量,导致导入失败。 - copy模块是Ansible核心内置模块,不受集合版本影响,因此替换后可正常运行。
可行解决方案
1. 升级ansible.posix集合
执行命令更新到与当前Ansible核心兼容的集合版本:
ansible-galaxy collection install ansible.posix --upgrade
2. 调整Playbook的synchronize用法
如果暂不升级集合,可修改Playbook逻辑,明确源主机和目标主机的委托关系:
- name: copy files between hosts hosts: rocky tasks: - name: copy file from ubuntu to rocky synchronize: src: /etc/hosts dest: /tmp/hosts mode: pull delegate_to: ubuntu - name: check file existence stat: path: /tmp/hosts register: stat_result - debug: var: stat_result
说明:
- 将
hosts指定为接收文件的目标主机(rocky) - 通过
delegate_to把任务委托给源文件所在的主机(ubuntu),使用mode: pull完成从源到目标的文件复制
3. 确认版本兼容性
查看当前Ansible核心和ansible.posix集合版本,确保二者匹配:
# 查看Ansible核心版本 ansible --version # 查看ansible.posix集合版本 ansible-galaxy collection list ansible.posix
例如Ansible 2.14及以上版本,建议搭配ansible.posix 1.5.0及以上版本。
内容的提问来源于stack exchange,提问作者user20773782
相关产品推荐
相关产品推荐

