什么是 YAML?
探索 IBM® watsonx Code Assistant for Red Hat Ansible Lightspeed 预约实时演示
同事在查看计算机显示器上的代码

发布日期:2023 年 12 月 11 日
撰稿人:Tasmiha Khan、Michael Goodwin

什么是 YAML?

YAML 是一种通用的、人类可读的数据序列化语言,通常用于编写配置文件。

它提供了一种标准化格式,以人类易于理解、机器可解读的方式表示结构化数据。“YAML”是首字母缩略词,其全称为“YAML Ain't Markup Language”或“Yet Another Markup Language”。前者旨在强调该语言是针对数据而不是文档。

从本质上讲,YAML 的设计考虑了简单性和可读性。它使用清晰简洁的语法,依赖缩进、键值对和直观的约定。这种方法让开发人员和用户以类似于自然语言且易于理解、一目了然的格式表达复杂的数据结构。

由于强调人类可读性,YAML 特别适合各种应用程序,包括配置 (config) 文件和不同系统之间的数据交换。简单直观的结构增强了其在不同领域的可用性,使用户能够以清晰易懂的方式定义和组织数据。YAML 支持 Unicode 字符,允许表示来自不同语言和字符集的各种字符和符号。有效的 YAML 会生成没有语法错误的规范。

YAML 适应性强,是各种应用程序的通用选择。YAML 可用于各个领域,包括从配置管理到数据交换和自动化,提供了一种可访问且结构化的方法来表示和管理数据。

预约演示

现在是利用生成式 AI 的力量提升自动化水平的时候了。与我们的专家预约 30 分钟的个性化演示,了解 IBM watsonx Code Assistant for Red Hat Ansible Lightspeed 的实际应用。

相关内容

订阅 IBM 时事通讯

YAML 语法和属性

YAML 语法中有各种属性和关键元素。了解 YAML 文件中使用的结构、数据类型和约定对确保有效的数据表示和可读性至关重要。

地图(字典)

在 YAML 中,字典表示为映射。它们是键值对的集合,其中每个键都与一个值相关联。这种数据结构类似于各种编程语言中字典或映射的概念。

缩进

YAML 语法严重依赖缩进和空格数量来表示数据结构。YAML 中使用空格(不是制表符,YAML 中禁止使用制表符)来表示层次结构和嵌套。由于 YAML 在结构上依赖缩进,因此在整个 YAML 文档中确保一致性非常重要。

换行 (Newline) 表示换行符,或 YAML 格式中的行尾,用于分隔不同的元素。

引号

YAML 中的大多数标量不需要引号。但是,在某些情况下可能必须使用引号来避免混淆,例如在包含特殊字符并且可能会被 YAML 语法误解的文本字符串附近。再如,如果有一个只含“true”的字符串,但您不想将其转换为布尔值。在这种情况下,可以使用单引号或双引号,具体取决于数据和需要表达的内容。

键值对

YAML 采用简单明了的键值对格式,以冒号分隔来表示数据关联。  

例如:

职业:教师

序列(数组)

序列(其他语言中的数组或列表),让您可以使用 YAML 定义项目列表。缩进将序列与父序列分开,每个列表项以破折号 (-) 开头,然后跟一个空格。序列中的所有项目都必须缩进相同的量。

例如:

fruits:
    - apple
    - orange
    - pear

也可以使用方括号和逗号在流序列中表示序列。1

fruits: [apple, orange, pear]

数据类型

YAML 支持各种数据类型,例如字符串、整数、浮点数、布尔值和空值。这些数据类型可以灵活地表示不同种类的信息。

评论

YAML 支持使用 # 符号表示注释。注释可辅助在 YAML 文件中添加解释、说明或上下文。

多行字符串

YAML 支持多行字符串,允许文本跨越多行,而无需明确的换行符。要在 YAML 文档中包含文本块,多行字符串非常有用。

YAML 文件

YAML 文件通常使用 .yaml 或 .yml 等扩展名。YAML 文件的命名和结构约定可确保数据的一致性和正确解读数据。YAML 文件也可以使用 Perl、Ruby 和 Python 语言读取。

YAML、JSON 和 XML

YAML 和 JSON 在数据表示方面有些相似,但 YAML 因其可读性、表现力和对复杂数据结构的支持而脱颖而出。YAML 是 JSON 的超集,除了扩展的功能和命令之外,还包含 JSON 的所有功能。

JSON(JavaScript 对象表示法)使用更明确的语法,包含大括号 {}、方括号 [] 和逗号。虽然 JSON 语法简洁,使用广泛,但其可读性可能较差,尤其是在较大的数据集中。JSON 对数据结构的支持相对有限,主要包括数组、对象和标量值。

在 web 应用程序和 API 中,JSON 通常因其数据交换的交叉兼容性而备受青睐,而 YAML 更常用于需要人类可读性和更复杂的数据结构的场景,例如配置文件和某些类型的数据文档和交换。2

与 XML 相比,YAML 提供了更简洁、更人性化的替代方案,强调数据表示和数据交换的简单性和易理解性。YAML 和 XML 在语法和用途上有根本的区别。

XML 是高度结构化的,依赖明确的开头和结束标记,因此有点混乱。相比之下,YAML 采用更简单、更自然的类似语言的结构,通过缩进和键值对来注重可读性,而无需明确的结束标签。

YAML 用例

YAML 可与所有编程语言一起使用,通常用于配置文件以及数据交换和文档。其人类可读的格式使文档内容更加清晰。

YAML 和开发运维 (DevOps)

YAML 在 DevOps 中起着举足轻重的作用,在自动化、协调和配置管理方面发挥着重要作用。在 DevOps 实践中,YAML 文件充当蓝图,以易于理解的格式定义操作序列和配置。这些文件用于精确概述自动化所需的步骤和程序,从而清晰、简洁地表示复杂的工作流程。

基础架构即代码 (IaC)

YAML 用于定义基础架构即代码,即使用代码而非手动流程来定义和管理 IT 基础架构。IaC 可实现更高效、更一致的 IT 基础架构配置。YAML 可用于定义虚拟机、网络和存储等基础架构的所需配置,并描述 IT 基础架构组件之间的关系。

部署

YAML 用于为应用程序创建部署文件,用于指定应用程序配置、依赖关系、资源限制和其他对高效应用程序部署和性能至关重要的信息。YAML 文件有助于减少部署错误,并通过版本控制和自动化提高应用程序的交付速度。

CI/CD 管道配置

YAML 可以在持续集成和持续交付 (CI/CD) 管道(一个重要的敏捷开发运维 (DevOps) 工作流程)中发挥重要作用。与基础架构配置和部署类似,YAML 文件用于定义管道步骤和目标,并最终帮助实现 CI/CD 流程自动化。

YAML 和开发运维 (DevOps) 工具

开发运维团队使用的许多工具和程序都利用 YAML,包括:

Ansible

Ansible 是一种使用 YAML 格式的文件(即 playbook)来定义任务和自动化流程的开源自动化软件应用程序。​​YAML 模板让用户可以在不了解高级编程语言的情况下对重复性任务的自动化进行编程。3

使用 IBM watsonx™ Code Assistant for Red Hat® Ansible® Lightspeed,用户可以使用简单的英语编写任务,并接收自动化任务的 YAML 代码建议。这些代码建议用于创建 Ansible Playbook。3

Kubernetes

Kubernetes 是一个开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。Kubernetes 基于“状态”工作,尝试根据特定指令从当前状态转变为所需状态。YAML 文件可用于创建 Kubernetes 资源,例如 pod、对象和部署,以及指定和传达 Kubernetes 对象的所需状态。

GitHub

GitHub 是一个基于 web 的软件开发版本控制和协作平台,它采用 YAML 来定义工作流程。GitHub 存储库中基于 YAML 的配置支持设置自动化工作流程,以进行持续集成和项目管理。

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。4Docker Compose 中使用 YAML 文件配置应用程序的服务。

跨语言数据共享

YAML 与语言无关,非常适合跨语言数据共享。一旦定义了 YAML 文件,就可以使用其他语言(例如 Python 或 Ruby)执行。

日志文件

日志文件是计算机生成的文本数据文件,其中包含有关应用程序、系统、服务器和其他 IT 资源或设备内的操作和模式的信息。它们用于衡量资源性能,并在系统可观察性中发挥至关重要的作用。由于简单明了的特性,YAML 用于创建直观、清晰的日志文件。

YAML 的优点

YAML 能成为一种流行的数据序列化语言,有多种原因,包括它在创建配置文件方面的简单性、兼容性和实用性。

简易性

YAML 的语法类似于自然语言结构。由于其简单性和简约设计,开发人员和非技术用户容易理解,从而增强理解并减少错误。

用于配置文件

YAML 因其可读的结构化格式而非常适用于配置文件。它通过使用缩进和键值对简化了定义配置流程,使其易于管理并适用于各种软件应用程序。

兼容性

YAML 的平台独立性确保了不同系统和编程语言之间的兼容性,促进各种平台和环境之间的无缝数据交换和互操作性。

用于 YAML 处理的工具

PyYAML 是一个著名的 Python 库,用于在基于 Python 的应用程序中解析和处理 YAML 文件。它提供了将 YAML 数据加载到 Python 对象中的方法。PyYAML 允许在 Python 应用程序中将 YAML 文件转换为实用的数据结构,反之亦然。5

PyYAML 等工具以及其他 YAML 解析器和验证器(例如 yamllint 和 YAML Validator)在保持 YAML 文件的准确性、有效性和完整性方面发挥着重要作用。它们的主要功能包括验证 YAML 语法、识别错误并确保 YAML 文档内的一致性。

相关解决方案
IBM watsonx Code Assistant for Red Hat Ansible Lightspeed

IBM watsonx Code Assistant for Red Hat Ansible Lightspeed 通过生成式 AI 驱动的内容推荐,揭开了 Ansible Playbook 创建过程的神秘面纱。该产品专为加速 IT 自动化而构建,旨在提供自动化内容推荐,增强 Ansible 体验。

深入了解 watsonx Code Assistant for Red Hat Ansible Lightspeed 预约实时演示

IBM watsonx Code Assistant

IBM watsonx™ Code Assistant 利用生成式 AI 来加快开发,同时保持信任、安全性、合规性的核心原则。开发人员和 IT 运营商可以加快应用程序现代化工作并实现自动化,以快速扩展 IT 环境。

深入了解 watsonx Code Assistant

采取后续步骤

准备好推进生成式 AI 驱动的自动化了吗?请在预约现场演示或咨询我们的专家时,了解一下 watsonx Code Assistant for Red Hat Ansible Lightspeed 可以做些什么。

深入了解 watsonx Code Assistant for Red Hat Ansible Lightspeed 预约实时演示
脚注

1《如何使用 YAML 表示数组》(ibm.com 外部链接), Tarun Telang, Educative, Inc., 2023

2《YAML 和 JSON 有何区别》(ibm.com 外部链接), Amazon Web Services, 2023

3《什么是 YAML》(ibm.com 外部链接), redhat.com, 2023 年 3 月 3 日

4《Docker Compose 概述》(ibm.com 外部链接), Docker.com, 2023

5《Python YAML | YAML 文件处理指南》(ibm.com 外部链接), Gabriel Ramuglia, 2023 年 9 月 11 日