yaml 的 vs 代码编辑器说期待地图但找到了序列

vs-code editor for yaml says expecting a map but found a sequence

我正在 ansible 角色的任务文件夹中编辑 main.yml。

我正在使用 Red Hat 的 YAML vscode 扩展。

这是文件的第一部分...

# Install Packages
- name: Install the Kafka Broker Packages
  yum:
    name: "{{item}}-{{confluent.package_version}}"
    state: latest
  loop: "{{kafka_broker_packages}}"
  when: ansible_os_family == "RedHat"

- name: Install the Kafka Broker Packages
  apt:
    name: "{{item}}={{confluent.package_version}}"
    update_cache: yes
  loop: "{{kafka_broker_packages}}"
  when: ansible_os_family == "Debian"

整个文件都有红色的波浪下划线:

Expecting a 'map', but found a 'sequence'

我确定我在做一些愚蠢的事情 - 非常感谢任何帮助

那么 Readme of that extension 说:

with built-in Kubernetes and Kedge syntax support.

所以扩展可能会尝试根据 Kubernetes 或 Kedge 模式验证您的 YAML 文件,但由于您正在为 Ansible 编写配置文件而失败。您可以尝试将 yaml.validate 设置为 "false" 以禁用验证。

但是,您最好还是使用 Ansible extension

VSCode-YAML 从 http://schemastore.org/json/ 中提取 JSON 模式,并尝试将模式与 yaml 文件相关联,这样您就可以在不进行任何配置的情况下进行悬停、自动完成、验证边。然而,有时这些模式是不正确的,这里似乎就是这种情况。

您可以在此处提交问题:https://github.com/SchemaStore/schemastore 并且对架构的任何更新都会出现在 vscode-yaml 中,或者您可以通过将 "yaml.schemaStore.enable" 设置为 false 来禁用架构存储.

此问题的原因是 ansible 扩展 (https://marketplace.visualstudio.com/items?itemName=vscoss.vscode-ansible) 无法将给定文件识别为其支持的项目。要摆脱它,请尝试编辑 VSCode 的 settings.json 以添加以下配置:

"files.associations": {
    "**/*.yml": "ansible"
},
"ansible.validation": true

转到File >> preferences >> settings 然后在右上角单击 open settings(json) 图标。 然后在设置中添加这个 json:

"files.associations": {
   "**/*.yml": "yaml"
}