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

Ansible运行playbook时报变量合并失败,得到AnsibleUnicode错误

问题根因

该报错由Ansible默认的变量文件自动加载规则触发:

  • Ansible扫描host_vars/[主机名]目录时,会自动加载所有无后缀、后缀为.yml/.yaml/.json的文件作为变量源,该行为不需要你在playbook的vars_files字段中显式声明。
  • 你使用的encryption_key、id_rsa_backup、id_rsa_backup.pub均为无后缀(或后缀不在排除规则内)的vault加密文件,解密后为纯字符串格式,不符合Ansible变量要求的YAML字典结构。Ansible尝试将这些字符串内容与同目录下backup.yml加载的字典变量合并时,就会出现「期望字典但得到AnsibleUnicode」的类型冲突报错。
  • 你给加密文件添加.key/.pem等后缀后,文件不再符合Ansible自动加载的后缀规则,不会被识别为变量文件加载,自然不会触发合并冲突,这就是添加后缀后运行正常的原因。
  • 其余5个正常运行的剧本,对应主机的host_vars目录下要么没有无后缀的非字典类加密文件,要么无后缀文件解密后刚好是YAML字典结构,不会触发类型冲突。

修复方案

  • 方案1:给所有非变量类加密文件(密钥、证书、二进制文件等)添加非.yml/.yaml/.json的后缀,例如.key、.pem、.bin均可,避免被Ansible自动识别为变量文件。
  • 方案2:调整目录结构,将非变量类文件存放到Ansible变量自动搜索路径外的目录,例如在项目根目录新建files/[主机名]/目录存储密钥文件,变量中引用路径对应修改即可。
  • 方案3:修改ansible.cfg的vars_plugins_enabled配置关闭host_vars自动递归加载(不推荐,会影响其他正常变量的加载逻辑)。

内容的提问来源于stack exchange,提问作者Igor Hrcek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:57:05