首页 > 解决方案 > YAML 错误:需要流结束或文档分隔符

问题描述

我在 yaml 文件中收到以下错误 错误:第 2 行第 11 列应有流结束或文档分隔符:apiVersion:v1 ^ 行:未定义未定义

这是文件的全部内容

<<EOT
apiVersion: v1
clusters:
    - cluster:
    server: https://3F46DDD9022BD149B88DA7ED4AFB2B30.gr7.eu-west-1.eks.amazonaws.com
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjR>  name: kubernetes
  contexts:
    - context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "terraform-eks-demo"

EOT

我已经在谷歌上搜索了几个小时,但我无处可去。我已经尝试了我能找到的每一个 YAML linter,有人能指出我正确的方向吗?我是新手,如果这不是很明显

标签: yaml

解决方案


您需要删除<<EOTEOT您可能从通过heredoc将YAML 注入命令行实用程序的一些代码中复制了它们,但它们不应成为YAML 内容的一部分。

发生的情况是,当 YAML 处理器看到<<EOT(由于不是特殊字符而将其解析为 YAML 标量的一部分<)然后是新行时。根级别的多行标量必须是文档的单个根节点。读取第二行时,YAML 处理器会看到:此处不允许的 a。此时,两行都被读取为多行标量,并且不能将多行标量用作映射键。因此,处理器抱怨在 YAML 文档的单个根节点之后,文档必须结束,但您尝试启动映射。


推荐阅读