R / Richie全部文章 ↑

Linux · 2 分钟阅读

YAML: 文件格式

YAML 设计目标:人类一眼能读、机器一秒能解析。Ansible、Kubernetes、GitHub Actions、Helm、Docker Compose 都用它做配置。

基本规则

  • 用空格缩进,禁止 Tab
  • 缩进对齐即可识别层级,没有固定空格数
  • 区分大小写
  • # 注释
  • --- 文档起始标记
  • ... 文档结束标记

数据类型

对象(Map / Dict)

name: John Smith
age: 30
address:
  street: 123 Main St
  city: Boston
  country: USA

数组(List)

colors:
  - Red
  - Blue
  - Green

# 行内写法
colors: [Red, Blue, Green]

标量

string1: Hello World            # 不含特殊字符
string2: "Hello World"          # 含特殊字符或变量时引号

integer: 123
float: 12.30

boolean1: true
boolean2: false

null_value: null                # 或 ~

yes / no 在 YAML 1.1 里被当成布尔,1.2 起只有 true / false 是真布尔。要稳妥就全用引号包起来。

进阶

多行字符串

description: |
  保留每一行
  末尾换行

message: >
  多行合并成一行
  用空格连接

锚点与引用

defaults: &defaults
  timeout: 30
  retries: 3

development:
  <<: *defaults
  host: dev.example.com

production:
  <<: *defaults
  host: prod.example.com

复杂示例

app:
  name: myapp
  version: 1.0.0

  database:
    host: localhost
    port: 5432
    credentials: &db_creds
      user: admin
      password: "<PASSWORD>"

  services:
    - name: web
      port: 8080
      database: *db_creds
    - name: api
      port: 3000
      database: *db_creds

写 YAML 的几条经验

  • 缩进统一 2 空格
  • 字符串含 : # & * { } 等字符时引号包起来
  • 别把锚点放在会被多次合并的位置,会很难调试
  • 复杂数据先写 JSON 再转 YAML,避免缩进错乱
  • 用 yamllint 校验,避免 CI 阶段才发现格式问题

参考