自动化运维(三十一)Ansible之 YAML 详细介绍

YAML(YAML Ain't Markup Language)是一种便于人类阅读的数据序列化标准,常用于配置文件、数据交换等场景。它以其简洁和易于理解的语法而受到开发者的青睐。YAML 设计的目标是易于人类阅读和支持各种编程语言的数据结构。

一、YAML 基础

1. 数据结构

YAML 主要支持三种数据结构:

  • 标量(Scalars):单个的、不可分的值,比如字符串或数字。
  • 序列(Sequences):一组按顺序排列的值,通常表示为列表或数组。
  • 映射(Mappings):键值对的集合,通常表示为哈希表、字典或对象。
2. 语法
  • 缩进:YAML 使用缩进来表示结构层次,类似于 Python。缩进空格的数量不是固定的,但是必须一致。
  • 列表 :使用短横线 - 开头表示一个列表项。
  • 字典 :使用冒号 : 后跟一个空格来分隔键和值。
  • 多行字符串 :可以用 |> 来表示,| 保留换行符,> 折叠换行符。
  • 注释 :使用 # 开头的行被视为注释。
3. 示例
复制代码
# 示例 YAML 配置文件
person:
  name: John Doe
  age: 30
  children:
    - Alice
    - Bob
  address:
    street: 123 Elm Street
    city: Somewhere
    zip: 12345

# 列表示例
fruits:
  - Apple
  - Banana
  - Cherry

# 多行字符串示例
description: |
  This is a long description
  that spans multiple lines in the YAML file.
  It includes all line breaks.

二、YAML 的高级特性

1. 锚点和别名

YAML 允许定义一个锚点(使用 &)并在后续使用别名(使用 *)引用,这在配置文件中避免重复非常有用。

复制代码
defaults: &defaults
  adapter: postgres
  host: localhost

development:
  <<: *defaults
  database: dev_db

test:
  <<: *defaults
  database: test_db
2. 合并键

使用 << 符号可以合并两个字典的内容,这在使用共通配置时非常方便。

复制代码
base: &base
  name: Everyone has same name

foo:
  <<: *base
  age: 10

bar:
  <<: *base
  age: 20
3. 复杂的数据类型

YAML 支持表示更复杂的数据类型,如日期、时间、布尔值和 null 值。

三、YAML 使用注意事项

  • 缩进问题:缩进必须使用空格而非制表符(tab),不同编辑器中的默认设置可能不同。
  • 数据类型转换:YAML 自动将数据转换为相应的数据类型,比如将 "123" 解析为整数而非字符串,有时这可能不是预期的行为。

四、使用场景

YAML 常用于各种软件和应用的配置,如 Kubernetes 的配置文件、CI/CD 系统(如 Travis CI、GitLab CI、Jenkins)的配置文件等。它的易读性和简洁性使其成为理想的配置语言。

通过以上详细介绍,可以看出 YAML 是一种灵活且功能丰富的数据序列化语言,非常适合用于现代软件开发和运维任务中的配置管理。

相关推荐
悠然南风4 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠13 天前
ansible编辑
网络·ansible
芳心粽伙饭13 天前
Ansible课后作业
ansible
烁34714 天前
Ansible初识
ansible
烁34714 天前
Ansible安装部署调试
ansible
烁34715 天前
Ansible命令
ansible
小义_15 天前
【Ansible】(三)基础配置与连接设置
云原生·ansible
辣机小司19 天前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
炸炸鱼.19 天前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible
风曦Kisaki20 天前
# 自动化运维Day03:Ansible模块进阶(setup,debug),四种常用变量,进阶语法;Ansible Roles(角色)
运维·自动化·ansible