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

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

我帮你排查了几个核心问题:

  1. 参数名拼写错误(最可能触发报错的原因):
    你写的gather_fact: yes是错误的,Ansible官方的正确参数名是gather_facts: yes(多了一个s)。虽然这看起来是个小拼写问题,但YAML解析器在处理未识别的参数时,可能因为隐性的语法逻辑冲突抛出这个报错。

  2. 第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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:42:52