Ansible报错“mapping values are not allowed...”含义解析及Playbook排查
Ansible YAML报错:
mapping values are not allowed in this context at line 3 column 16 解析与修复 首先,这个报错本质是YAML语法解析错误,意思是Ansible的YAML解析器在处理第3行第16列的内容时,碰到了不符合规则的键值对(mapping)结构——简单来说,就是在本该是普通文本或单一值的位置,出现了类似key: value的写法,或者语法符号(比如冒号、缩进)使用不当,导致解析器没法正确识别你的Playbook结构。
先看你提供的Playbook代码:
- hosts: local_host remote_user: ansible become: yes become_method: sudo connection: ssh gather_fact: yes tasks: - name: installing MariaDB yum: name: mariadb-server state: latest notify: startservice handlers: - name: startservice service: name: mariadb state: restarted
我帮你排查了几个核心问题:
参数名拼写错误(最可能触发报错的原因):
你写的gather_fact: yes是错误的,Ansible官方的正确参数名是gather_facts: yes(多了一个s)。虽然这看起来是个小拼写问题,但YAML解析器在处理未识别的参数时,可能因为隐性的语法逻辑冲突抛出这个报错。第3行的语法细节检查:
报错明确指向第3行(也就是become: yes这一行),请确认:- 冒号
:后面必须有且仅有一个空格,不能写成become:yes(无空格)或者become: yes(多个空格虽然YAML允许,但尽量和其他行保持一致); - 这一行的缩进必须和上面的
remote_user: ansible完全一致(统一用2个或4个空格缩进,绝对不能用制表符,YAML对制表符不兼容); - 行尾没有多余的特殊隐藏字符(比如奇怪的换行符、编辑器自动添加的格式标记)。
- 冒号
另外,我也检查了Playbook的其他逻辑部分:
yum模块的配置是正确的,安装mariadb-server并保持最新版本的写法没问题;notify关联handler的逻辑正确,handler里的service模块重启mariadb服务的配置也符合CentOS/RHEL系统的要求。
快速修复步骤:
- 把
gather_fact改成gather_facts; - 重新检查第3行的缩进和冒号后的空格,确保语法规范;
- 用纯文本编辑器(比如VS Code、Vim)保存Playbook,避免格式混乱。
内容的提问来源于stack exchange,提问作者Akshay Dilip Ishwarkar
相关产品推荐
相关产品推荐

